文章总结: 本文介绍CodeQL代码审计工具的基本使用方法,包括创建数据库、升级格式、全量扫描与精简规则加速扫描等操作步骤。文档以WebGoat项目为例展示漏洞检测结果,统计出35个漏洞实例并分析SQL注入等5类高危漏洞。最后演示了VSCode插件的可视化漏洞定位功能,为代码安全审计提供实用指导。 综合评分: 85 文章分类: 代码审计,WEB安全,安全工具,漏洞分析,安全开发
【代码审计】CodeQL初识
原创
十月的进阶之路 十月的进阶之路
十月的进阶之路
2026年4月18日 17:09 重庆
在小说阅读器读本章
去阅读
与其精神内耗,不如出门瞎跑。
目录
- 背景
- CodeQL 检测示例
- 结果总览
- 结果抽样分析
- 使用 VSCode 的 CodeQL 插件
一、背景
微软开发的SAST工具,将代码转化成一种关系型数据库,可用QL查询语句来查找符合特定模式的代码片段,通过这种方式查找漏洞。QL语言作为一种面向对象的逻辑编程语言,语法类似于SQL,但引入了类 (Class) 和谓词 (Predicate) 等概念。
CodeQL组成部分:解析引擎+SDK。
- 解析引擎地址:
https://github.com/github/codeql-cli-binaries/releases
- 规则库地址:
https://github.com/github/codeql
解析引擎:不开源,解析编写的规则,但是可以直接在官网下载二进制文件直接使用。
SDK(规则库):完全开源,里面包含大部分现成的漏洞规则,可编写自定义规则。
二、CodeQL 检测示例
注意:本小结的示例代码依旧以WebGoat作为案例
1. 创建数据库
codeql database create webgoat --language=java --command="mvn clean package -DskipTests" --source-root=D:\code-audit\codeQL\WebGoat-2025.3
2. 升级数据库格式
升级CodeQL数据库的格式,让旧数据库适配最新版的CodeQL工具/扫描规则。
codeql database upgrade webgoat
3. 全量规则扫描(基础版)
调用CodeQL官方规则库,对数据库进行代码扫描,输出漏洞/缺陷报告。默认的检测命令太慢了,加入如下的参数稍微快一点。
codeql database analyze D:\code-audit\codeQL\data\webgoat D:\code-audit\codeQL\codeql-main\java\ql\src\Security --format=csv --output=webgoat_result.csv --threads 0 --ram 16 --no-debug --no-save-cache
当然如果您执行上述的命令,会出现如下的情况,内存不足。
4. 精简规则加速扫描
针对这种情况精简下规则,将不需要的规则去除掉。在codeql-main\java\ql\src\Security目录下编写fast-web-security.qls文件,加入如下规则。
- description: fast-web-security
# 只保留你关心的 Web 安全类 CWE 目录
- queries: Security/CWE/CWE-022
- queries: Security/CWE/CWE-023
- queries: Security/CWE/CWE-074
- queries: Security/CWE/CWE-079
- queries: Security/CWE/CWE-089
- queries: Security/CWE/CWE-094
- queries: Security/CWE/CWE-113
- queries: Security/CWE/CWE-134
- queries: Security/CWE/CWE-200
- queries: Security/CWE/CWE-209
- queries: Security/CWE/CWE-352
- queries: Security/CWE/CWE-601
- queries: Security/CWE/CWE-611
- queries: Security/CWE/CWE-918
# 再做一次“收口”:只保留 security 且高精度的查询
- include:
tags contain: security
precision:
- high
- very-high
执行验证命令resolve queries,将suite展开成最终会执行的查询列表。
重新执行命令扫描。
codeql database analyze D:\code-audit\codeQL\data\webgoat D:\code-audit\codeQL\codeql-main\java\ql\src\Security\fast-web-security.qls --format=csv --output=webgoat_fast_result.csv --threads 0 --ram 16 --no-debug
这次很快就扫描完成。
三、结果总览
先来看看扫描的漏洞整体状态,如下。
(一)漏洞总体统计
- 总计漏洞数量:35个实例
- 漏洞类型:5种不同类型
- 高危漏洞占比:94.3%(33/35个)
- 主要影响范围:SQL安全、文件操作安全、Web安全配置
(二)漏洞类型分布
| 漏洞类型 | 危险级别 | 数量 | 主要风险 | | — | — | — | — | | SQL注入漏洞 | 高危 | 16个 | 数据泄露、篡改、服务器接管 | | 路径遍历漏洞 | 高危 | 15个 | 敏感文件泄露、服务器文件访问 | | CSRF防护漏洞 | 中危 | 2个 | 跨站请求伪造、未授权操作 | | Zip Slip漏洞 | 高危 | 1个 | 文件覆盖、恶意文件上传 | | XXE漏洞 | 高危 | 1个 | 内部信息泄露、端口扫描 |
四、结果抽样分析
本小结随机抽取一个sql注入进行结果分析,首先介绍下codeql结果中各列的含义,当然为了表格的美观,我建议将csv转换为xlsx视觉上更舒服。
| Excel列号 | 完整列名 | 核心作用 | | — | — | — | | A | 漏洞类型(Vulnerability Type) | 快速识别漏洞属于哪一类安全问题 | | B | 漏洞描述(Vulnerability Description) | 一句话说明漏洞的原理和基本危害 | | C | 严重级别(Severity Level) | 评估漏洞的紧急程度 | | D | 输入源追踪(Source Trace) | 找到用户输入从哪里进入漏洞代码(最关键的溯源列) | | E | 漏洞所在文件(Vulnerable File) | 漏洞代码实际存在的Java文件路径 | | F | 起始行号(Start Line) | 漏洞代码片段的第一行行号 | | G | 起始列号(Start Column) | 漏洞代码片段的第一个字符位置 | | H | 结束行号(End Line) | 漏洞代码片段的最后一行行号 | | I | 结束列号(End Column) | 漏洞代码片段的最后一个字符位置 |
根据列表的内容定位代码中的漏洞点,经过发现这正是jwt存在sql注入的漏洞点。
五、使用 VSCode 的 CodeQL 插件
从csv文件去定位代码,终究是比较繁琐,那么我们考虑使用codeql插件,可以免去手动定位这个步骤。
当然你可以参考内置的检测规则撰写自己的检测规则,充分发挥你的能力。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:十月的进阶之路 十月的进阶之路 十月的进阶之路《【代码审计】CodeQL初识》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论