起因是在做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源代码文件

二进制可执行文件

主要作用

定义漏洞检测逻辑

执行分析流程

更新频率

高频更新(GitHub每月更新)

低频更新(季度发布)

自定义能力

可修改/扩展规则

通过参数配置运行方式

典型路径

~/codeql-repo/ql/src/

/usr/local/bin/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语句的写法才能更好的进行我们代码审计工作