CodeQL系列之安装CodeQL
0x01 下载
将CodeQL CLI的可执行文件添加到环境变量
https://github.com/github/codeql-cli-binaries/releases/latest/download/codeql.zip
CodeQL 标准库
https://codeload.github.com/github/codeql/zip/refs/heads/main
Visual Studio Code CodeQL插件
Ctrl+Shift+X => 输入CodeQL => install
在CodeQL扩展中配置CodeQL CLI的路径,例如C:\Users\xxxxx\Desktop\codeql\codeql\codeql\codeql.exe
0x02 编译QL数据库
常规编译
在开源项目的根目录下运行如下命令建库,前提是该项目能够编译成功
codeql database create catMaster -l java
如果上面编译失败,就用下面的命令编译
Gadle项目
codeql database create XXXXXXXXXX--language=java --command="gradle.bat" --overwrite
codeql database create XXXXXXXXXXXX --source-root=D:\Study\Java\XXXXXXXXXX --language=java --command="gradle clean build -x test --no-daemon -Dfile.encoding=UTF-8"
Maven项目
codeql database create JEECMS -l java -c "mvn lean install --file pom.xml"
delombok
如果发现数据库少文件,大概率原因是少的文件都用了lombok,使用下面的命令删除该注解
wget https://projectlombok.org/downloads/lombok.jar -O "lombok.jar"
java -jar D:\tools\CodeQL\lombok.jar delombok XXXXXXXXXX -d XXXXXXXXXXX-Delombok --encoding=UTF-8
然后重新创建数据库
codeql database create XXXXXXXXXX --language=java --command="gradle clean build -x test --no-daemon -Dfile.encoding=UTF-8" --overwrite
生成了catMaster目录
0x03 使用
创建你的第一个QL包
你需要创建一个文件夹,用来存放后续你编写的CodeQL脚本,CodeQL官方称这个文件夹为QL Pack。
例如名为Cat-codeql的文件夹,并在里面创建1个QL Pack的配置文件,名称固定为qlpack.yml
;再创建一个ql后缀的文件,名称随意。
将如下信息填入qlpack.yml文件
name: example-query
version: 0.0.0
libraryPathDependencies: codeql-java
第一行表示这个QL包的名称为example-query,必选,如果你在VSCode中同时打开多个QL包时,要保证这个name的值唯一不重复;
第二行表示这个QL包的版本号,必选;
第三行表示这个QL包的依赖,必选,codeql-java表示需要Java语言的QL标准库依赖。
VSCode工作区增加CodeQL标准库
VSCode - 文件 - 将文件夹加入工作区 - 选择存放CodeQL标准库的文件夹
在VSCode的CodeQL插件中添加之前用CodeQL创建的CatMaster的数据库。
添加成功的样子
编写第一个查询
import java
from Method m
select m
0x04 参考链接
https://mp.weixin.qq.com/s?__biz=Mzg4ODU4ODYzOQ==&mid=2247484326&idx=1&sn=fd055d23efe80f5c6758ce9bd01307c9&chksm=cff99396f88e1a80cd1e52c2a17649f6f20da7fe45b743925c80a90b3997395963a9afe84691&scene=178&cur_album_id=1970201600723910658#rd