CNVD漏洞挖掘实战:CMS代码审计白名单挖掘
背景
在学习代码审计的过程中,我选择了一款国产CMS作为练手目标,通过下载源码、代码审计的方式,成功发现了一个前台SQL注入漏洞,并提交至CNVD获得编号归档。
挖洞思路
这次挖洞采用白盒审计方式,主要流程:
- 下载CMS源码
- 搭建本地环境
- 代码审计(敏感函数逆推)
- 漏洞验证与复现
- 编写CNVD报告
第一步:下载源码
从CMS官网下载最新版本源码,本地搭建LAMP/LNMP环境进行审计。
# 下载源码后,重点关注以下目录
/config # 配置文件
/include # 公共函数
/admin # 后台功能
/user # 用户功能
/api # 接口文件
第二步:代码审计
审计思路:敏感函数逆推
使用Seay代码审计工具扫描,重点关注SQL注入相关的敏感函数:
# SQL注入相关函数
mysql_query()
mysqli_query()
PDO::query()
# 搜索关键词
SELECT、INSERT、UPDATE、DELETE
# 用户输入点
$_GET、$_POST、$_REQUEST、$_COOKIE
审计过程
- 找入口点:搜索用户可控的输入参数(GET/POST)
- 跟踪数据流:查看参数是否经过过滤、转义
- 找危险函数:查看参数是否传入SQL查询语句
- 判断绕过可能:分析过滤逻辑,寻找绕过方式
第三步:漏洞发现
漏洞位置
在某个前台功能文件中,发现参数直接拼接到SQL语句中,未经过滤:
// 漏洞代码示例(已脱敏)
$id = $_POST['id'];
$sql = "SELECT * FROM table WHERE id IN ($id)";
// 未对$id进行过滤,直接拼接
漏洞类型
- 漏洞类型:SQL注入
- 漏洞位置:前台功能
- 利用方式:联合查询注入
第四步:漏洞验证
验证步骤
- 发送POST请求,添加参数
- 查看SQL拼接结果
- 执行联合查询,确认注入存在
- 使用SQLMap进一步验证
验证结果
- 确认存在联合查询注入
- 可获取数据库信息
- 可进一步获取数据
第五步:CNVD报告编写
报告要点
- 漏洞描述:清晰说明漏洞类型、位置、影响
- 影响范围:受影响的版本、系统
- 漏洞复现:详细的复现步骤、截图
- 修复建议:给出修复方案
编写技巧
- 步骤清晰,可复现
- 截图完整,有说明
- 脱敏处理,不暴露敏感信息
- 修复建议具体可行
经验总结
挖洞心得
- 白盒审计效率高:相比黑盒测试,代码审计能发现更多隐蔽漏洞
- 敏感函数逆推:快速定位潜在漏洞点
- 数据流跟踪:重点关注用户输入到SQL查询的完整链路
- 本地搭建环境:方便调试和验证
注意事项
- 只审计自己搭建的环境,不测试线上系统
- 漏洞报告要脱敏,不暴露敏感信息
- 及时提交CNVD,避免漏洞被他人发现
- 遵守CNVD提交规范,提高通过率
工具推荐
- Seay代码审计工具:自动扫描敏感函数
- PHPStorm + Xdebug:断点调试,跟踪数据流
- BurpSuite:抓包测试
- SQLMap:SQL注入验证
注:本文已脱敏处理,不涉及具体厂商和系统信息。漏洞已提交CNVD并获得编号归档。
