CodeQL基本使用

0x01 安装codeql

去github下载一个对应版本的codeql捆绑包。

github.com/github/code...

然后解压,这里我是解压到桌面

然后用添加到环境变量中 然后在任意位置输入codeql命令,如果能有以下提示就表示安装成功

然后下载vscode, 并且给vscode安装codeql扩展

0x02 创建codeql数据库

在使用 CodeQL 分析代码之前,需要创建一个 CodeQL 数据库。

创建codeql数据库命令:

ini 复制代码
codeql database create <database> --language=<language-identifier> 

是创建数据库的路径 执行命令会自动创建一个文件夹

是选定的语言 比如java,python等

比如需要审计一个python程序,那么命令就可以如下 (注意这条命令需要在需要审计的源代码目录中使用,codeql默认是使用当前位置作为源文件目录)

codeql database create pythondb --language=python # 也可以用source-root指定源码路径 比如源码文件在d:/python_code codeql database create pythondb --language=python --source-root="d:/python_code"

然后准备好一份python的源代码。我这里是随便去github搜索了一份别人写好的代码

执行完毕后可以发现多了一个文件夹,这个就是codeql创建的数据库

0x03 codeql使用

打开vscode,打开源码文件夹

切换到codeql插件然后选择刚刚codeql创建的数据库文件夹

成功之后点击queries选项里面的蓝色字体,可以快速的创建一个ql查询文件。

选择对应的语法然后回车

成功如下

0x04 ql语法简介

分析一下自动生成的脚本文件是什么意思

import python // 用于引入Python语言的元数据和查询库 比如import java就是引用java的元数据和查询库 from File f // 引入文件(File)元数据的语法 select f, "Hello, world!" // (其实这是一条语句) select和sql中的select类似查询一个具体值

帮助网安学习,全套资料S信领取:

① 网安学习成长路径思维导图

② 60+网安经典常用工具包

③ 100+SRC漏洞分析报告

④ 150+网安攻防实战技术电子书

⑤ 最权威CISSP 认证考试指南+题库

⑥ 超1800页CTF实战技巧手册

⑦ 最新网安大厂面试题合集(含答案)

⑧ APP客户端安全检测指南(安卓+IOS)

select关键字

和sql的select类似,查询一个字符串的结果。

from关键字

用于定义变量,格式如 from 变量类型 变量名, 如定义字符串变量str如下 (多个变量用逗号分隔)

csharp 复制代码
from string str​from string str1, string str2​wher关键字​用于赋值和逻辑运算,比如where str = "abcde" 就是将str变量赋值为abcde字符串 ​where str1 = "a" and str2 = "b" 

注意以上语句需要配合使用不能单独使用,这里是和编程语言的语法有一些区别,更加贴近于sql语法

还有一些内置的类,如Function 表示一个函数类

篇幅关系,更多语法查阅官方文档:codeql.github.com/docs/

0x05 实际使用

比如这里是用codeql查找sql注入,个人感觉codeql更加考验对于漏洞的理解,比起其他传统的代码审计工具,codeql显得更加灵活。

codeql其实自带了很多ql脚本,这些脚本可以帮助我们去查找漏洞最简单的方式就是使用 CodeQL CLI 捆绑包中包含的标准查询。

命令格式如下

perl 复制代码
codeql database analyze <database> --format=<format> --output=<output>​//format就是指定分析过程中生成的结果文件的格式,比如csv格式等​//output就是输出的文件名

比如

然后打开生成的result.csv文件 可以看到如下结果

比如查看第一个sql注入漏洞就可以打开/utils/query.py文件 然后找到12行,函数直接excute了sql语句。且中途未经过过滤。

在vs中使用codeql可以编写语句,比如查询query函数在哪个位置

点击鼠标就可以跳转到对应源码界面

然后还可以查询query函数有哪些地方调用了。

vbnet 复制代码
 import python   from Call call, Name name  where call.getFunc() = name and name.getId() = "query" select call, call.getLocation(), "使用了query函数."

然后挑选一个函数去跟踪,发现字符串直接拼接到sql语句中。

相关推荐
酷爱码38 分钟前
css中的 vertical-align与line-height作用详解
前端·css
沐土Arvin1 小时前
深入理解 requestIdleCallback:浏览器空闲时段的性能优化利器
开发语言·前端·javascript·设计模式·html
专注VB编程开发20年1 小时前
VB.NET关于接口实现与简化设计的分析,封装其他类
java·前端·数据库
小妖6661 小时前
css 中 content: “\e6d0“ 怎么变成图标的?
前端·css
L耀早睡2 小时前
mapreduce打包运行
大数据·前端·spark·mapreduce
HouGISer2 小时前
副业小程序YUERGS,从开发到变现
前端·小程序
outstanding木槿2 小时前
react中安装依赖时的问题 【集合】
前端·javascript·react.js·node.js
霸王蟹3 小时前
React中useState中更新是同步的还是异步的?
前端·javascript·笔记·学习·react.js·前端框架
霸王蟹3 小时前
React Hooks 必须在组件最顶层调用的原因解析
前端·javascript·笔记·学习·react.js
专注VB编程开发20年3 小时前
asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
服务器·前端·asp.net