CodeQL初体验——j2eefast代码审计 一
字数 1182 2025-08-12 12:46:04

CodeQL初体验——j2eefast代码审计教学文档

一、CodeQL基础介绍

1.1 什么是CodeQL

  • CodeQL是一款由Semmle公司开发的代码分析引擎,后被GitHub收购
  • 它将源代码转换为可分析的数据库,允许开发者像查询数据一样查询代码
  • 支持跨文件/跨函数分析,能够追踪数据流传播路径

1.2 核心特点

  1. 上下文语义理解:能理解变量类型、数据流等语义信息,而非简单文本匹配
  2. 跨文件分析:可追踪数据从用户输入到敏感函数的完整传播路径
  3. 灵活查询:通过编写查询语句识别潜在安全漏洞和代码问题

二、环境准备

2.1 工具安装

  • Visual Studio Code + CodeQL插件
  • CodeQL CLI工具
  • 标准QL查询库

2.2 基本命令

codeql database analyze --threads 16 ./java-database java-security-and-quality.qls --format=csv --output=java-results.csv

三、j2eefast项目审计实战

3.1 初步审计发现

3.1.1 Shiro反序列化漏洞

  • 项目使用Apache Shiro 1.13.0版本(低版本存在已知漏洞)
  • 硬编码密钥直接暴露在配置文件中

3.2 使用CodeQL进行SQL注入审计

3.2.1 查询选择

使用标准库中的MyBatis相关查询:

java/ql/src/experimental/Security/CWE/CWE-089/MyBatisMapperXmlSqlInjection.ql

3.2.2 审计发现

  1. SQL注入点

    • 参数sql_filter直接拼接SQL语句,未做预编译处理
    • 数据流清晰展示:从用户输入到SQL执行的完整路径
  2. 输入点分析

    • 通过POST请求获取参数
    • 通过findPage方法执行SQL语句
  3. 防御机制

    • 使用@RequiresPermissions注解调用SQL注入过滤器
    • 实现黑名单过滤机制,过滤常见SQL注入关键字和编码函数

3.3 黑名单过滤机制分析

分类 字段名称 用途说明
SQL关键字 select, insert, update等 过滤基本SQL操作
特殊字符 ', ", ;等 过滤SQL语句分隔符
编码函数 hex(), encode()等 过滤编码转换函数

四、审计技巧总结

  1. 优先检查框架版本:如Shiro等安全框架的低版本通常存在已知漏洞
  2. 关注敏感配置:如加密密钥、数据库凭证等是否硬编码
  3. 数据流追踪:使用CodeQL的数据流分析功能追踪用户输入到敏感操作的路径
  4. 防御机制验证:即使存在防护措施,也要验证其完整性和有效性

五、后续学习建议

  1. 深入学习CodeQL语法:掌握自定义查询编写能力
  2. 扩展审计范围:尝试审计其他类型漏洞(XSS、RCE等)
  3. 结合动态测试:静态分析结果配合动态测试验证漏洞真实性
  4. 参与社区贡献:向CodeQL官方库提交漏洞检测规则

六、参考资源

  1. CodeQL官方文档
  2. GitHub Security Lab资源
  3. OWASP Top 10漏洞模式
  4. 常见框架安全配置指南
CodeQL初体验——j2eefast代码审计教学文档 一、CodeQL基础介绍 1.1 什么是CodeQL CodeQL是一款由Semmle公司开发的代码分析引擎,后被GitHub收购 它将源代码转换为可分析的数据库,允许开发者像查询数据一样查询代码 支持跨文件/跨函数分析,能够追踪数据流传播路径 1.2 核心特点 上下文语义理解 :能理解变量类型、数据流等语义信息,而非简单文本匹配 跨文件分析 :可追踪数据从用户输入到敏感函数的完整传播路径 灵活查询 :通过编写查询语句识别潜在安全漏洞和代码问题 二、环境准备 2.1 工具安装 Visual Studio Code + CodeQL插件 CodeQL CLI工具 标准QL查询库 2.2 基本命令 三、j2eefast项目审计实战 3.1 初步审计发现 3.1.1 Shiro反序列化漏洞 项目使用Apache Shiro 1.13.0版本(低版本存在已知漏洞) 硬编码密钥直接暴露在配置文件中 3.2 使用CodeQL进行SQL注入审计 3.2.1 查询选择 使用标准库中的MyBatis相关查询: 3.2.2 审计发现 SQL注入点 : 参数 sql_filter 直接拼接SQL语句,未做预编译处理 数据流清晰展示:从用户输入到SQL执行的完整路径 输入点分析 : 通过POST请求获取参数 通过 findPage 方法执行SQL语句 防御机制 : 使用 @RequiresPermissions 注解调用SQL注入过滤器 实现黑名单过滤机制,过滤常见SQL注入关键字和编码函数 3.3 黑名单过滤机制分析 | 分类 | 字段名称 | 用途说明 | |------|---------|---------| | SQL关键字 | select, insert, update等 | 过滤基本SQL操作 | | 特殊字符 | ', ", ;等 | 过滤SQL语句分隔符 | | 编码函数 | hex(), encode()等 | 过滤编码转换函数 | 四、审计技巧总结 优先检查框架版本 :如Shiro等安全框架的低版本通常存在已知漏洞 关注敏感配置 :如加密密钥、数据库凭证等是否硬编码 数据流追踪 :使用CodeQL的数据流分析功能追踪用户输入到敏感操作的路径 防御机制验证 :即使存在防护措施,也要验证其完整性和有效性 五、后续学习建议 深入学习CodeQL语法 :掌握自定义查询编写能力 扩展审计范围 :尝试审计其他类型漏洞(XSS、RCE等) 结合动态测试 :静态分析结果配合动态测试验证漏洞真实性 参与社区贡献 :向CodeQL官方库提交漏洞检测规则 六、参考资源 CodeQL官方文档 GitHub Security Lab资源 OWASP Top 10漏洞模式 常见框架安全配置指南