起因是在做java代码审计的时候用的是铲子这个工具,但是这个工具要收费,免费次数用完了之后,就没在用了
我的代码审计的习惯就自己先手动分析,然后交给工具来帮我分析一下哪里有遗漏的地方没有发现漏洞,然后在分析
铲子不让用之后,我就想着用这个CodeQL这个工具来帮我自动挖掘
环境安装
首先这里我用的是wsl下面的Ubuntu,不用单独开启虚拟机,直接在终端里面打开就行
这里我们用的编译器是vscode,里面有CodeQL插件,能很方便的让我们配置我们的CodeQL
我们不多介绍wsl的安装过程,网上大部分都有,也比较简单,今天的主题就是怎么安装配置我们的CodeQL
1. 安装依赖项
首先更新系统并安装必要的依赖:
sudo apt update
sudo apt upgrade -y
sudo apt install -y git wget unzip build-essential openjdk-17-jdk
2. 下载 CodeQL CLI
# 创建安装目录
mkdir ~/codeql && cd ~/codeql
# 下载最新版 CodeQL CLI (请替换为最新版本号)
wget https://github.com/github/codeql-cli-binaries/releases/download/v2.21.1/codeql-linux64.zip
# 解压
unzip codeql-linux64.zip
# 添加到环境变量
echo 'export PATH=$PATH:~/codeql/codeql' >> ~/.bashrc
source ~/.bashrc
3. 获取 CodeQL 标准查询库
git clone https://github.com/github/codeql.git ~/codeql/codeql-repo
4. 验证安装
codeql version
codeql resolve languages
上面的命令直接复制粘贴到命令行就行(这里也是AI生成的)
这里我说明一下这个这个CodeQL CLI和CodeQL标准库的区别
简单来说这个CLI就是运行我们的ql语句的,这标准库里面集成了很多ql查询语句
安装完成之后
codeql version
我们看到
codeql resolve languages
这是我们支持的语言
与vscode联动
上面的安装过程是比较简单的,对于我们的Linux系统来说
这里我们与vsCode联动的时候,我们需要用两个插件,一个是允许我们wsl连接的插件,这个在安装wsl的教程里面会有说,另一个就是codeql
我们安装完成之后使用它下面会有一个QL的图标
里面有几个选项,我来解释一下
我们在wsl里面输入命令
code . 就能直接启动我们的vscode
在此之前我们要先编译一下数据库,直接用源码编译
https://github.com/l4yn3/micro_service_seclab/
我们就用这个java漏洞靶场进行演示,这里我们的编译语句是这样写的
codeql database create ~/codeql-dbs/javasec --language=java --source-root=javasec/micro_service_seclab-main --command="mvn clean install -DskipTests --file pom.xml"
大概意思就是创建一个数据库,指定数据库路径,指定语言,指定源码路径,指定命令
这里我用java8可以创建成功
数据库创建成功之后,我们需要导入到我们的vscode里面
我们在哪个目录使用code .
呢
在那个codeql标准查询库的那个目录
然后自动打开这个vscode连接我们的wsl
然后我们配置我们的数据
之后我们就可以看到里面多了一个文件夹
这里的language和qureies都已经自动导入了,语言我们就直接all就行
其他的先都不用管
这里我们基本上就是配置完成了
使用
很多师傅在安装完成环境之后,就一头雾水,我环境安装完成了,该怎么用啊
也没人告诉我怎么用,我的源码在哪呢,没用源码我怎分析,我的ql语句在哪编写啊
这也是我当时的疑问
下面我就简单介绍一下使用教程
先说一下怎么导入源码,我们在数据这个选项可以添加一下工作区
就是我们右键一下,就可以直接导入我们的源码
之后我们会变成这个窗口
这里我们就可以看到我们的源码了
那我们在哪写我们的ql语句呢
首先我们这里有一些标准的查询库,这里有一些查询语句我们可以直接运行
我们在java里面找一下里面的xxe运行看一下
/home/keke/codeql/codeql-repo/java/ql/src/Security/CWE/CWE-611
在这个目录里面
运行之后就直接显示结果
这就说明这个地方存在xxe,从入口点一直到危害点
假如说我们要自己编写ql语句,我们就可以在/home/keke/codeql/codeql-repo/java/ql/examples
这个路径下新建一个demo.ql
写一个简单的helloword
不知道为何我这里会报错
如果我们想用这个AST树的功能,可以在QL这个插件里面看
但是我们直接点击的话会报错
因为我们在这个ql文件中,我们要切换到我们的源码才能看
这就是怎么使用这个CodeQL工具了
后面还要了解一下这个ql语句的写法才能更好的进行我们代码审计工作