codeql学习笔记分享1
2024-4-12 12:31:5 Author: www.freebuf.com(查看原文) 阅读量:8 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

1.环境安装

解释一下什么是codeql吧:

CodeQL 是一种强大的静态代码分析工具,由 GitHub 开发。它可以用于发现和修复软件中的安全漏洞、漏洞和代码质量问题。CodeQL 通过将编程语言的语法和语义建模为一种特殊的查询语言,使得用户可以编写自定义查询来分析代码库。它支持多种编程语言,包括 C、C++、C#、Java、JavaScript、Python 等。用户可以使用现有的查询来发现已知的问题,也可以编写自己的查询来查找特定的问题或需求。

CodeQL 的工作原理是首先将代码转换成一种中间表示(IR)也就是我们这里要用到的数据库,然后在这种 IR 上执行查询。这种方法可以让用户不受代码语言的限制,因为查询是在 IR 上执行的,而不是直接在源代码上。这使得用户可以使用相同的查询语言来分析不同编程语言的代码。同时,CodeQL 还提供了丰富的 API 和库,使得用户可以编写更加复杂和高效的查询。

1.环境准备

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

1712891436_6618a62cee9121ffd2dab.png!small?1712891437855

解压,设置环境变量

1712891614_6618a6dec3ecf6323033f.png!small?1712891615536

1712891636_6618a6f4d7f6ff70e49eb.png!small?1712891638218

OK,第一步已经完成了。

2.规则库

官方规则库,各种内置的ql脚本,这部分是开源的。里面是各种ql脚本,也就是我们以后要学习的东西地址:

https://github.com/github/codeql(git clone下来,或者下载下来。最好和codeql_cli也就是上面那个放一起)

3.vscode_codeql插件

1712891926_6618a8168f8fb6eeb54c7.png!small?1712891927383

安装这个插件。设置可执行路径:

1712892021_6618a875508cf15a7cc0e.png!small?1712892023811

这里环境已经配置好了。

2.生成数据库

这里以java语言的数据库为示例:

原则要生成数据库的源文件:我这里选择的是java-sec-code 地址:https://github.com/JoyChou93/java-sec-code

因为java-sec-code是通过maven进行依赖管理,需要我们事先安装好maven,codeql识别出是个maven项目之后会自动对项目文件进行编译(用到mvn命令),通过编译得到的文件创建数据库。

安装maven: 默认你已经安装好java的jdk了,没有安装记得安装,并配置好环境变量

下载:https://maven.apache.org/download.cgi1712892389_6618a9e57e64c81d6a36a.png!small?1712892390361

配置环境变量:1712892488_6618aa489c0958bf38f90.png!small?1712892489218

1712892504_6618aa587dff20c3c4180.png!small?1712892505220

1712892533_6618aa7564cd42a188d6e.png!small?1712892534322这就是安装好了。我在这里遇见一个错误。后面在创建数据库的时候,一直创建失败,就是这一部分的原因。这里maven识别到的一定要是jdk下的jre,不能是如图:1712893882_6618afba3aa6b28395842.png!small?1712893882913

1712893963_6618b00b90ce016e8ae16.png!small?1712893964284

注意看区别

创建数据库的命令:

codeql database create java-sce-code-database  --language="java"  --command="mvn clean install --file pom.xml" --source-root=D:\CODEQLALL\java-sec-code-master\

1712894093_6618b08d70ef1bdb68876.png!small?17128940948431712894108_6618b09cb20e97d1d3ba4.png!small?1712894109489

成功。

3.利用利用数据库进行查询:

1712894317_6618b16d16616610c6372.png!small?1712894318019

选择语言选择数据库

1712894298_6618b15a3e345a843b2a3.png!small?1712894299235

打开规则库:1712894361_6618b199387b78b291d86.png!small?1712894362224

file ->open
找到Java的规则库如图:1712894434_6618b1e2249327d69afcd.png!small?1712894434749

你可以在这创建一个.ql的脚本也可以直接用写好的。

我们自己写一个查看(我在src下面写了一个test.ql)

1712895244_6618b50c0a90aad9d5869.png!small?1712895244796

也可以在这个地方查看,会主动识别的1712895974_6618b7e622b6ae92f2760.png!small?1712895974997

我们写了一个查询调用了executeQuery方法的地方:1712896083_6618b8535ec1344a56fb8.png!small?1712896086546

点这两个地方运行。最好我们看一下查询结果:

1712896129_6618b881a05b503f25328.png!small?1712896130318

1712896143_6618b88f7264fc176dd14.png!small?1712896144840

已在FreeBuf发表 0 篇文章

本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022


文章来源: https://www.freebuf.com/sectool/397748.html
如有侵权请联系:admin#unsafe.sh