CodeQL初体验——j2eefast代码审计 一
字数 1182 2025-08-12 12:46:04
CodeQL初体验——j2eefast代码审计教学文档
一、CodeQL基础介绍
1.1 什么是CodeQL
- CodeQL是一款由Semmle公司开发的代码分析引擎,后被GitHub收购
- 它将源代码转换为可分析的数据库,允许开发者像查询数据一样查询代码
- 支持跨文件/跨函数分析,能够追踪数据流传播路径
1.2 核心特点
- 上下文语义理解:能理解变量类型、数据流等语义信息,而非简单文本匹配
- 跨文件分析:可追踪数据从用户输入到敏感函数的完整传播路径
- 灵活查询:通过编写查询语句识别潜在安全漏洞和代码问题
二、环境准备
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 审计发现
-
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漏洞模式
- 常见框架安全配置指南