前言

老是看师傅萌使用codeql来做代码审计,小菜鸡表示也想尝试尝试,刚好一时兴起,说干就干!

codeql 介绍

CodeQL是一个分析引擎,被开发人员用来自动进行安全检查,也被安全研究人员用来进行变体分析。

对做安全的师傅来说其实就是帮助我们进行代码审计

codeql使用

安装

首先将codeql已经编译好的程序下载到本地

https://github.com/github/codeql-cli-binaries/releases

再将ql的语言工具包下载到本地

https://github.com/Semmle/ql

为了方便可以将codeql目录添加为环境变量

接着我们去vscode添加codeql插件

image-20211209201624643

并点击插件设置

image-20211209204503677

将codeql执行文件的可执行文件目录填入

使用

我们参考l4yn3 的文章使用java的靶场https://github.com/l4yn3/micro_service_seclab/(本来想写go的,但是不熟悉go,菜🐔还是放弃了)

首先将原文件下载到本地并使用codeql编译

编译之前要将数据库文件导入,并且将mybatis配置以及application.properties做出更改

codeql database create ~/codeql/codeqldatabase/codeqlDemo –language=”java” –command=”mvn clean install –file pom.xml” –source-root=/Users/kai/Downloads/micro_service_seclab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
database create ~/codeql/codeqldatabase/codeqlDemo 指的的是我们创建的数据库名称及位置 

--language="java" 指的是我们程序的语言
Language Identifier
C/C++ cpp
C# csharp
Go go
Java java
JavaScript/TypeScript javascript
Python python
Ruby ruby


--source-root=/Users/kai/Downloads/micro_service_seclab 用于数据库创建的主要源文件的根文件夹。默认情况下,该命令假定当前目录是源根目录 - 使用此选项指定不同的位置。

--db-cluster 当想要为一种以上语言创建数据库时,用于多语言代码库。

--command 当为一种或多种编译语言创建数据库时使用,如果请求的唯一语言是 Python 和 JavaScript,则省略。这指定了调用编译器所需的构建命令。命令从当前文件夹运行,或者--source-root 如果指定。如果不包含--command,CodeQL 将尝试使用内置的自动构建器自动检测构建系统。

--no-run-unnecessary-builds 用于--db-cluster抑制 CodeQL CLI 不需要监视构建的语言的构建命令(例如,Python 和 JavaScript/TypeScript)

执行完之后,我们就生成了对应的数据库,接着我们去vscode导入

首先将我们下载的ql语言工具包导入,不同语言有不同的sdk

比如我们这里导入/Users/kai/codeql/ql/java/ql/

image-20211216174640869

紧接着我们去导入codeql的数据库,选择我们刚刚生成的文件夹

image-20211209204829256

如下图就是导入成功了

image-20211216174044110

接着我们在src目录中新建一个ql文件并查询一个helloworld;

image-20211216174937632

至此我们的安装到demo已经基本实现了

参考文章