一名代码审计新手的实战经历与感悟
字数 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. 推荐新手审计流程

  1. DVWA
  2. BlueCMS
  3. 其他小众CMS
  4. 框架级审计

三、审计实战步骤

1. 目录结构分析

  • admin/: 管理员相关操作
  • include/: 常用函数库
  • 根目录文件: 主要业务逻辑文件

2. 核心审计流程

  1. 浏览网站目录结构
  2. 查看主页index.php及其引用文件
  3. 追踪用户输入点
  4. 分析数据处理流程
  5. 检查过滤机制

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函数将内容渲染到前端
  • 可读取网站根目录下其他文件

利用方法:

  1. 构造from参数为base64编码的目标文件路径
  2. 发送请求后在前端获取文件内容

限制:

  • 受session权限限制,部分文件无法读取

3. 反射型XSS漏洞

漏洞位置: 注册页面(user.php?act=reg)

漏洞分析:

  • $from变量在注册操作时被渲染到浏览器
  • 仅使用addslashes过滤,对XSS防护不足
  • 需要同时满足两个条件才能触发:
    • 访问user.php时提交恶意请求
    • 同时访问注册页面

利用方法:

<script>alert(1)</script>

4. 存储型XSS漏洞

漏洞位置: 用户资料编辑功能

漏洞分析:

  • email等字段虽有正则过滤但后台未严格过滤
  • 恶意代码可存储到数据库并在显示时执行

利用方法:

  1. 在email字段插入:
<script>alert(1)</script>
  1. 或在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. 过滤机制缺陷

  1. 仅过滤了$_GET$_POST$_REQUEST$_COOKIE
  2. 遗漏了$_SERVER(导致IP伪造漏洞)
  3. 对int型注入防护不足
  4. XSS过滤仅使用转义,防护不全面

六、审计技巧总结

  1. 保持清晰的审计记录:

    • 记录已审计文件
    • 标记可疑点
    • 跟踪数据流路径
  2. 理解业务逻辑:

    • 结合页面操作分析代码
    • 构建情景图帮助理解
  3. 处理未知函数:

    • 通过搜索引擎了解函数功能
    • 先掌握基本功能,不必过度深入
  4. 组合漏洞利用:

    • 考虑漏洞间的关联性
    • 如DOM XSS可能绕过服务端过滤

七、新手建议

  1. 从简单CMS开始,逐步提升难度
  2. 选择适合自己的审计方法
  3. 遇到不懂的代码坚持研究
  4. 做好笔记和标记
  5. 保持耐心和细心
  6. 多实践,积累经验

八、参考资源

  1. BlueCMS v1.6 sp1 SQL注入分析
  2. 《代码审计:企业级web安全》

通过本实战案例,新手可以掌握基本的代码审计流程和方法,逐步培养安全审计思维和能力。

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语句 验证方法 : 2. 文件读取漏洞 漏洞位置 : 用户登录操作中的 $from 变量 漏洞分析 : $from 变量可控且经过base64解码 通过 showmsg 函数将内容渲染到前端 可读取网站根目录下其他文件 利用方法 : 构造 from 参数为base64编码的目标文件路径 发送请求后在前端获取文件内容 限制 : 受session权限限制,部分文件无法读取 3. 反射型XSS漏洞 漏洞位置 : 注册页面(user.php?act=reg) 漏洞分析 : $from 变量在注册操作时被渲染到浏览器 仅使用 addslashes 过滤,对XSS防护不足 需要同时满足两个条件才能触发: 访问user.php时提交恶意请求 同时访问注册页面 利用方法 : 4. 存储型XSS漏洞 漏洞位置 : 用户资料编辑功能 漏洞分析 : email等字段虽有正则过滤但后台未严格过滤 恶意代码可存储到数据库并在显示时执行 利用方法 : 在email字段插入: 或在msn字段插入: 5. IP伪造与注入漏洞 漏洞位置 : common.fun.php中的 getip() 函数 漏洞分析 : 可伪造HTTP头(X-Forwarded-For等)控制IP值 IP值未过滤直接用于SQL语句导致注入 利用方法 : 五、过滤机制分析 1. 主要过滤函数 addslashes : 对特殊字符进行转义 inval() : 获取变量的整数值(白名单思想) 2. 过滤机制缺陷 仅过滤了 $_GET 、 $_POST 、 $_REQUEST 、 $_COOKIE 遗漏了 $_SERVER (导致IP伪造漏洞) 对int型注入防护不足 XSS过滤仅使用转义,防护不全面 六、审计技巧总结 保持清晰的审计记录 : 记录已审计文件 标记可疑点 跟踪数据流路径 理解业务逻辑 : 结合页面操作分析代码 构建情景图帮助理解 处理未知函数 : 通过搜索引擎了解函数功能 先掌握基本功能,不必过度深入 组合漏洞利用 : 考虑漏洞间的关联性 如DOM XSS可能绕过服务端过滤 七、新手建议 从简单CMS开始,逐步提升难度 选择适合自己的审计方法 遇到不懂的代码坚持研究 做好笔记和标记 保持耐心和细心 多实践,积累经验 八、参考资源 BlueCMS v1.6 sp1 SQL注入分析 《代码审计:企业级web安全》 通过本实战案例,新手可以掌握基本的代码审计流程和方法,逐步培养安全审计思维和能力。