前言
在我们使用codeql
进行代码审计之前,不妨先学习一些QL
的基础语法,磨刀不误砍柴工。
官方教程链接:https://codeql.github.com/docs/writing-codeql-queries/ql-tutorials/
在这个教程中我们作为一个侦探,为了解决遇到的问题使用QL
进行相应的调查
QL介绍
通过一些简单的练习和例子来帮助我们了解
QL
和CodeQL
的基础知识
任何使用过 SQL 的人都会对 QL 的基本语法看起来很熟悉,但它的使用方式略有不同。
QL 是一种逻辑编程语言,因此它是由逻辑公式构成的。QL 使用常见的逻辑连接词(例如and,or和not)、量词(例如foralland exists)和其他重要的逻辑概念(例如谓词)。
QL 还支持递归和聚合。这允许您使用简单的 QL 语法编写复杂的递归查询,并直接使用聚合,例如count、sum和average。
以下的例子都在配置好环境的VScode
上运行
- 输出hello world
- 更一般的查询
- 进行一个乘法
需要注意的是,codeql中存在5种类型: int date float boolean string, 每个类型有对应的谓词(也可以先理解为函数)可以被调用,当我们需要输入函数的时候,在vscode中会像以前我们编写java或者python一样进行提示。
- 进行字符串长度查询
- 编写一个查询,返回3^5和245.6这两个数中小的那一个的正弦值。
- 返回
false
相反的值
- 编写一个查询,计算 2017 年 6 月 10 日到 9 月 28 日之间的天数
在上面的查询中我们都值select出了一个结果,我们也可以使用select 输出多个结果,就像是
- 计算1 到 10 之间的所有毕达哥拉斯三元组
可以看到上面的代码中[1,2,....10]这里是重复的,以及x*x
,y*y
这里也是重复的,所以我们可以考虑将其定义为一个类方便代码的复用
到这里ql
中的内置原始类型我们就学习的差不多了,但我们其实是想要分析代码中的漏洞,所以现在需要进一步了解如何使用CodeQL
分析项目代码
这里我们使用的是python-flask
的一个项目
- 查询项目中有哪些函数参数数量大于7
这里的from子句定义了一个ftemp表示python函数的变量,该where部分限制参数数量为我们所要求的,最后select查询出了结果
这部分剩下还有一个javascript
和java
的案例就不再赘述了
END
公众号,欢迎关注 😃