一名代码审计新手的实战经历与感悟
字数 1652 2025-08-18 11:37:11
BlueCMS v1.6 sp1 代码审计实战教学文档
一、环境准备
- 目标系统: BlueCMS v1.6 sp1
- 环境配置:
- phpstudy
- PHP 5.4.45
- Apache
- MySQL
- 操作系统: Windows 7 64位 专业版
二、代码审计方法论
1. 审计方法选择
- 数据流追踪法: 关注"输入"、"输出"和"数据流"三个关键点
- 危险函数回溯法: 查找危险函数并回溯输入源
- 功能点审计法: 按功能模块进行审计
- 通读全文法: 全面了解系统架构
2. 推荐新手审计流程
- DVWA
- BlueCMS
- 其他小众CMS
- 框架级审计
三、审计实战步骤
1. 目录结构分析
- admin/: 管理员相关操作
- include/: 常用函数库
- 根目录文件: 主要业务逻辑文件
2. 核心审计流程
- 浏览网站目录结构
- 查看主页index.php及其引用文件
- 追踪用户输入点
- 分析数据处理流程
- 检查过滤机制
3. 输入点追踪技巧
- 使用正则匹配查找用户可控变量
- 关注
$_GET、$_POST、$_REQUEST、$_COOKIE、$_SERVER - 特别注意未过滤或过滤不完善的输入点
四、漏洞挖掘与分析
1. ad_js.php SQL注入漏洞
漏洞位置: 根目录下ad_js.php文件
漏洞分析:
- 存在int型SQL注入
- 过滤机制仅针对string型注入无效
- 注入点可构造union select语句
验证方法:
union select 1,2,3,4,5,6,7
2. 文件读取漏洞
漏洞位置: 用户登录操作中的$from变量
漏洞分析:
$from变量可控且经过base64解码- 通过
showmsg函数将内容渲染到前端 - 可读取网站根目录下其他文件
利用方法:
- 构造
from参数为base64编码的目标文件路径 - 发送请求后在前端获取文件内容
限制:
- 受session权限限制,部分文件无法读取
3. 反射型XSS漏洞
漏洞位置: 注册页面(user.php?act=reg)
漏洞分析:
$from变量在注册操作时被渲染到浏览器- 仅使用
addslashes过滤,对XSS防护不足 - 需要同时满足两个条件才能触发:
- 访问user.php时提交恶意请求
- 同时访问注册页面
利用方法:
<script>alert(1)</script>
4. 存储型XSS漏洞
漏洞位置: 用户资料编辑功能
漏洞分析:
- email等字段虽有正则过滤但后台未严格过滤
- 恶意代码可存储到数据库并在显示时执行
利用方法:
- 在email字段插入:
<script>alert(1)</script>
- 或在msn字段插入:
">
5. IP伪造与注入漏洞
漏洞位置: common.fun.php中的getip()函数
漏洞分析:
- 可伪造HTTP头(X-Forwarded-For等)控制IP值
- IP值未过滤直接用于SQL语句导致注入
利用方法:
1','1'),('','6','2','1','6',(select concat(admin_name,':',pwd) from blue_admin),'1','1
五、过滤机制分析
1. 主要过滤函数
addslashes: 对特殊字符进行转义inval(): 获取变量的整数值(白名单思想)
2. 过滤机制缺陷
- 仅过滤了
$_GET、$_POST、$_REQUEST、$_COOKIE - 遗漏了
$_SERVER(导致IP伪造漏洞) - 对int型注入防护不足
- XSS过滤仅使用转义,防护不全面
六、审计技巧总结
-
保持清晰的审计记录:
- 记录已审计文件
- 标记可疑点
- 跟踪数据流路径
-
理解业务逻辑:
- 结合页面操作分析代码
- 构建情景图帮助理解
-
处理未知函数:
- 通过搜索引擎了解函数功能
- 先掌握基本功能,不必过度深入
-
组合漏洞利用:
- 考虑漏洞间的关联性
- 如DOM XSS可能绕过服务端过滤
七、新手建议
- 从简单CMS开始,逐步提升难度
- 选择适合自己的审计方法
- 遇到不懂的代码坚持研究
- 做好笔记和标记
- 保持耐心和细心
- 多实践,积累经验
八、参考资源
- BlueCMS v1.6 sp1 SQL注入分析
- 《代码审计:企业级web安全》
通过本实战案例,新手可以掌握基本的代码审计流程和方法,逐步培养安全审计思维和能力。