0x00 前言

 

最近这个东西实在太火了,而且log4j 和最近的Spring Cloud Gateway 都说是利用codeql来挖掘的,好不好用先用了再说。所以学习一下这个东西   

0x01 CodeQL是什么

 
  
在我接触这个东西之前,我一直以为这是一个代码审计的工具,类似于Fortify rips 这种东西?
 
但其实并不是,理解大大错了。。。

还记得记得SQL的全称吗? -> Structured Query Language:结构化查询语言

所以我简单通俗的理解就是:

  • Codeql = code + ql,这样就是一门面向对象的编程语言(对比SQL)
  • 是把代码结构化分析后的存在一个代码数据库里面
  • 然后就是写ql就可以进行各种查询
  • 找某个方法、类、参数的传递等等。。。

神奇。。

官方地址:

github/codeql: CodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security (code scanning), LGTM.com, and LGTM Enterprise

https://github.com/github/codeql

   

0x01 相关下载

 

CodeQL本身包含两部分解析引擎+SDK

我推荐直接下载这个!可以直接配合 vscode 的现成项目,使用方便。

https://github.com/github/vscode-codeql-starter

(注意下载的时候不能直接git clon,因为里面包含子项目

image-20220304221924777

        

0x02 安装详细步骤

        

我这边推荐使用 vscode-codeql-starter 这个现成的项目,使用起来很方便

1、vscode 环境

  • 首先需要在官网下载并安装Visual Studio Code

Visual Studio Code - Code Editing. Redefined

  • 安装codeql插件:

image-20220304222734040

        

2 安装 CodeQL 引擎

        

s引擎二进制文件下载 :Releases · github/codeql-cli-binaries

(推荐直接下载codeql.zip 这个是多平台都打包在一起)

image-20220304221553522

        

3 克隆工作车间 Codeql starter

        

我推荐直接下载这个!可以直接配合 vscode 的现成项目,使用方便。

https://github.com/github/vscode-codeql-starter

(注意下载的时候不能直接git clone,因为里面包含子项目

image-20220304221924777

这个项目里的 submodule 也须要 Clone

使用下面命令一步到位

1
git clone --recursive https://github.com/github/vscode-codeql-starter/

image-20220304224556711
(如果子模块clone失败,可以自己下载放进去也行)

        

4 配置环境变量

 

1 、在 VSCode 菜单中点击 File > Open Workspace 选择 vscode-codeql-starter.code-workspace 这个文件来打开这个工作区。

2、找到插件的扩展设置

image-20220304225202804

3、设置引擎地址

这里面添加引擎刚刚下载的 CodeQL 引擎的可执行文件

image-20220304225259649

就是codeql.zip 解压后对于系统的可执行文件地址image-20220304225430633

 

5 系统环境变量添加

 
为了方便后面使用codeql,还需要把刚刚那个添加到系统里面

我是Mac 就是这样

1
2
vim ~/.zshrc
alias codeql="/Users/zy/Documents/project/codeql/CodeQLCLI/codeql"

windows 就和添加Java环境变量一样,设置一个path到刚刚到codeql.exe 那个目录就行了

到这里环境应该就是好了,下一步就是建立数据库了(或导入数据库)

    

0x03 创建数据库(Java)

 

  • 打开终端使用 codeql命令
1
codeql database create [数据库存的路径]  --language="java"  --command="mvn clean install --file pom.xml" --source-root=[源码路径路径]

例如我的用的这个项目作为审计的目标 https://github.com/godzeo/java-sec-code

1
codeql database create /Users/zy/Documents/project/codeql/vscode-codeql-starter-main/database/codeql_java-sec-code  --language="java"  --command="mvn clean install --file pom.xml" --source-root=/Users/zy/Documents/project/sec_java_vul/java-sec-code

然后把这个命令拆解看一下

codeql database create java-database 创建数据库,名字为codeql_java-sec-code
-language=java 编译语言为java
-command=“mvn clean install –file pom.xml” 利用命令进行源码编译
–source-root 设置源码的路径

成功建库

image-20220305164718115

 

0x04 导入库进行查询

 

在vscode里面找到 导入数据库

image-20220305164846289

这样就是导入成功了

image-20220305164933079

下面开始查询:

1
2
跟目录/ql/java/ql/src/Security                 放着一些官方的规则(java),可直接用。
这跟目录/ql/java/ql/src/experimental/Security 一些还在实验中的规则(java)。

找到规则文件试一下,xss.ql 文件 ,右键 Run Query

image-20220305165221286

出结果了,跑通了这就是

image-20220305165413207

然后点一下就找到了漏洞点了。

image-20220305165516750

基础的完成之后,这就能勉勉强强用了,然后就是学习语法规则,自己写规则使用了