- Notifications
You must be signed in to change notification settings - Fork53
Firebasky/CodeqlLearn
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
在safe6sec师傅的基础上修改的,更加适合自己
https://www.jianshu.com/p/ff8ec920f5b9
https://www.jianshu.com/p/4bd5dc13f35a
https://www.jianshu.com/p/68fcbc154c2f
自己学习codeql 看过的一些文章
- CodeQL从入门到放弃 ✔️
- codeQL入门 ✔️
- Codeql 入门2 ✔️
- CodeQL笔记 ✔️
- 代码分析引擎 CodeQL 初体验 ✔️
- codeql学习笔记 ✔️
- CodeQL学习——CodeQl数据流分析 - bamb00 - 博客园 ✔️
- 原创 |CodeQL与AST之间联系 ✔️
- 使用静态代码检测微服务越权、未授权访问漏洞 ✔️
- 微服务下用静态代码扫描越权漏洞 ✔️
- CodeQL for Golang Practise(3)
- CodeQL静态代码扫描之实现关联接口、入参、和危险方法并自动化构造payload及抽象类探究
- Codeql分析Vulnerability-GoApp - FreeBuf网络安全行业门户
- codeql反序列化分析
- [原创]58集团白盒代码审计系统建设实践2:深入理解SAST-业务安全-看雪论坛-安全社区|安全招聘|bbs.pediy.com
- 楼兰#CodeQL
- CodeQL学习笔记 | Gamous'Site
- language:go - Search - LGTM
- CodeQL 和代码扫描简介 - GeekMasher 的博客
- CVE-2018-11776: 如何使用CodeQL发现5个 Apache Struts RCEs
- CodeQL静态代码扫描规则编写之RemoteFlowSource
- CodeQL静态代码扫描之抽象类探究
- Codeql规则编写入门
- About LGTM - Help - LGTM
- LGTM help & documentation
- Capture the flag | GitHub Security Lab
- 分类: codeql - 食兔人的博客
- CodeQL - butter-fly
- 表达式
- mark/CodeQL-数据流在Java中的使用.md at master · haby0/mark
- github/securitylab: Resources related to GitHub Security Lab
- codeql挖掘React应用的XSS实践 | Image's blog
- SummerSec/learning-codeql: CodeQL Java 全网最全的中文学习资料
- CodeQL query help for Go — CodeQL query help documentation
- codeql使用指南_zzzzfeng的博客-CSDN博客_codeql使用
- Apache Dubbo:条条大路通RCE | GitHub 安全实验室
- 南大软件分析课程
- 各种语言危险sink
- 编译OpenJDK8并生成CodeQL数据库 ✔️对jdk进行ql用处多多。。
- 如何利用CodeQL挖掘CVE-2020-10199 ✔️可以使用污点跟踪TaintTracking::Configuration 并且添加isAdditionalTaintStep
- 利用CodeQL分析并挖掘Log4j漏洞
- 使用codeql 挖掘 ofcms ✔️
- 使用codeql挖掘fastjson利用链 ✔️
- 用codeql分析grafana最新任意文件读取 ✔️
- codeql学习——污点分析 ✔️
- CodeQL从0到1(内附Shiro检测demo) ✔️
- Codeql分析Vulnerability-GoApp ✔️ (go语言)
- 如何用CodeQL数据流复现 apache kylin命令执行漏洞 - 先知社区 ✔️
- 从Java反序列化漏洞题看CodeQL数据流 ✔️
- CodeQL 学习小记 ✔️
- 使用codeql挖掘fastjson利用链 ✔️
文档:https://codeql.github.com/docs/codeql-cli/
二进制:https://github.com/github/codeql-cli-binaries
现成项目:https://github.com/github/vscode-codeql-starter
数据库下载,在线查询,规则搜索:https://lgtm.com/
第一步、创建索引代码数据库。得有数据库才能开始查询。
codeql database create <database> --language=<language-identifier>支持的语言及language对应关系如下
| Language | Identity |
|---|---|
| C/C++ | cpp |
| C# | csharp |
| Go | go |
| Java | java |
| javascript/Typescript | javascript |
| Python | python |
| Ruby | Ruby |
1、生成代码扫描数据库(java)
codeql database create D:\codeqldb/javasec --language=java --command="mvn clean install --file pom.xml -Dmaven.test.skip=true" --source-root=./javasec注:source-root 为源码路径,默认为当前目录,可不指定
一些常用命令
跳过测试,构建 --command="mvn clean install --file pom.xml -Dmaven.test.skip=true" 无论项目结果如何,构建从不失败 --command="mvn -fn clean install --file pom.xml -Dmaven.test.skip=true"包含xml文件github/codeql#3887
codeql database init --source-root=<src> --language java <db>codeql database trace-command --working-dir=<src> <db> <java command>codeql database index-files --language xml --include-extension .xml --working-dir=<src> <db>codeql database finalize <db>将上面的命令拆分为如下4条命令,在index-files中将xml文件添加到CodeQL的数据库中CodeQL将XML文件包含到CodeQL数据库
第二种方案是在codeql-cli/java/tools/pre-finalize.cmd文件中插入--include "/resources//*.xml"
2、更新数据库
codeql database upgrade database/javasec参考:https://help.semmle.com/lgtm-enterprise/admin/help/prepare-database-upload.html
对于编译型语言来说,需要在创建索引数据库的时候增加编译的功能,主要是针对java,对于非编译性的语言来说,直接扫描吧
对于go来说,可编译也可不编译
importjavafromMethodmethodwheremethod.hasName("toObject")selectmethod
把这个方法的classname也查出来
importjavafromMethodmethodwheremethod.hasName("toObject")selectmethod,method.getDeclaringType()
比如我想查询ContentTypeHandler 的所有子类toObject方法
importjavafromMethodmethodwheremethod.hasName("toObject")andmethod.getDeclaringType().getASupertype().hasQualifiedName("org.apache.struts2.rest.handler","ContentTypeHandler")selectmethod
Callable表示可调用的方法或构造器的集合。
Call表示调用Callable的这个过程(方法调用,构造器调用等等)
过滤 方法调用
一般是先查method,与MethodAccess.getMethod() 进行比较。
比如查ContentTypeHandler 的toObject() 方法的调用。
importjavafromMethodAccesscall,Methodmethodwheremethod.hasName("toObject")andmethod.getDeclaringType().getASupertype().hasQualifiedName("org.apache.struts2.rest.handler","ContentTypeHandler")andcall.getMethod() =methodselectcall
上面这种查询方式不行,只能查到JsonLibHandler 这样显式定义的。
怎么改进呢?
也可以使用getAnAncestor() 或者getASupertype()*
importjavafromMethodAccesscall,Methodmethodwheremethod.hasName("toObject")andmethod.getDeclaringType().getAnAncestor().hasQualifiedName("org.apache.struts2.rest.handler","ContentTypeHandler")andcall.getMethod() =methodselectcall
Local Data Flow分析SPEL
本地数据流本地数据流是单个方法(一旦变量跳出该方法即为数据流断开)或可调用对象中的数据流。本地数据流通常比全局数据流更容易、更快、更精确。
import javaimport semmle.code.java.frameworks.spring.SpringControllerimport semmle.code.java.dataflow.TaintTrackingfrom Call call,Callable parseExpression,SpringRequestMappingMethod routewhere call.getCallee() = parseExpression and parseExpression.getDeclaringType().hasQualifiedName("org.springframework.expression", "ExpressionParser") and parseExpression.hasName("parseExpression") and TaintTracking::localTaint(DataFlow::parameterNode(route.getARequestParameter()),DataFlow::exprNode(call.getArgument(0))) select route.getARequestParameter(),call全局数据流分析要继承DataFlow::Configuration 这个类,然后重载isSource 和isSink 方法
class MyConfig extends DataFlow::Configuration { MyConfig() { this = "Myconfig" } override predicate isSource(DataFlow::Node source) { .... } override predicate isSink(DataFlow::Node sink) { .... }}全局污点跟踪分析要继承TaintTracking::Configuration 这个类,然后重载isSource 和isSink 方法
import semmle.code.java.dataflow.TaintTrackingimport javaclass VulConfig extends TaintTracking::Configuration {VulConfig() { this = "myConfig" }override predicate isSource(DataFlow::Node source) {}override predicate isSink(DataFlow::Node sink) {}}from VulConfig config, DataFlow::PathNode source, DataFlow::PathNode sinkwhere config.hasFlowPath(source, sink)select sink.getNode(), source, sink, "source are"ql库集成了许多常见的安全漏洞,可以直接拿来扫描项目源码
https://codeql.github.com/codeql-query-help/java/
下面是写好的
java1、zip slip(zip解压覆盖任意文件)
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-022/ZipSlip.ql
2、命令注入
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-078/ExecUnescaped.ql
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-078/ExecTainted.ql
3、cookie安全
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-614/InsecureCookie.ql
4、XSS
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-079/XSS.ql
5、依赖漏洞
6、反序列化
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-502/UnsafeDeserialization.ql
7、http头注入
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-113/ResponseSplitting.ql
8、url跳转
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-601/UrlRedirect.ql
9、ldap注入
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-090/LdapInjection.ql
10、sql注入
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-089/SqlTainted.ql
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-089/SqlUnescaped.ql
11、file权限&目录注入
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-022/TaintedPath.ql
12、xml注入
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-611/XXE.ql
13、SSL校验
14、弱加密
https://github.com/github/codeql/java/ql/src/Security/CWE/CWE-327/BrokenCryptoAlgorithm.ql
15、随机数种子可预测
https://github.com/github/codeql/blob/main/java/ql/src/Security/CWE/CWE-335/PredictableSeed.ql
codeql analyze命令可以执行单个ql文件,目录下所有ql文件,和查询suite(.qls)
白盒扫描使用如下命令(执行所有漏洞类查询)
codeql database analyze source_database_name qllib/java/ql/src/codeql-suites/java-security-extended.qls --format=csv --output=java-results.csv如果是自己写可用于analyze的必须按规范写,包含元数据@kind,如下这种
/** * @name Incomplete regular expression for hostnames * @description Matching a URL or hostname against a regular expression that contains an unescaped * dot as part of the hostname might match more hostnames than expected. * @kind path-problem * @problem.severity warning * @security-severity 7.8 * @precision high * @id go/incomplete-hostname-regexp * @tags correctness * security * external/cwe/cwe-20 */About
记录学习codeql的过程
Topics
Resources
Uh oh!
There was an error while loading.Please reload this page.