对SEMCMS再一次审计
字数 984 2025-08-09 19:14:07
SEMCMS 安全审计报告与漏洞分析
前言
本报告基于对SEMCMS系统的安全审计,发现了多个安全漏洞,包括SQL注入等高风险问题。SEMCMS是一个网站内容管理系统,本次审计发现其存在多处安全缺陷,可能被攻击者利用来获取未授权访问或破坏系统。
漏洞详情
SQL注入漏洞1
位置: /Include/web_inc.php
漏洞描述:
- 系统使用
$_SERVER["REQUEST_URI"]接收用户输入 - 输入被传递到
web_language_ml()函数中处理 - 未对
$_SERVER["REQUEST_URI"]的值进行充分过滤
漏洞代码分析:
$web_urls = $_SERVER["REQUEST_URI"];
// 分割后传入web_language_ml函数
利用方式:
- 使用时间盲注技术进行攻击
- 注意:
$_SERVER["REQUEST_URI"]不会自动解码,空格需要使用其他方式绕过(不能直接使用%20) - 注释部分可使用
or'绕过
SQL注入漏洞2(后台认证绕过)
位置: 后台认证机制
漏洞描述:
- 所有后台文件都包含
SEMCMS_Top_include.php - 该文件使用
checkuser()函数进行认证 - 认证基于cookie值直接拼接到SQL查询中
过滤函数分析:
test_input()函数:
function test_input($data) {
$data = str_replace("%", "percent", $data);
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data,ENT_QUOTES);
return $data;
}
verify_str()函数:
function verify_str($str) {
if(inject_check_sql($str)) {
exit('Sorry,You do this is wrong! (.-.)');
}
return $str;
}
inject_check_sql()函数:
function inject_check_sql($sql_str) {
return preg_match('/select|insert|=|%|<|between|update|\'|\*|union|into|load_file|outfile/i',$sql_str);
}
绕过方法:
虽然过滤了常见SQL关键词,但可以通过构造特定payload绕过认证:
scuseradmin: fthgb\\
scuserpass: or 1#
这个payload利用了SQL逻辑,构造出'xxx' or 1=1的形式,使认证条件始终为真。
修复建议
-
输入验证:
- 对所有用户输入进行严格验证,包括
$_SERVER变量 - 使用参数化查询或预处理语句替代直接SQL拼接
- 对所有用户输入进行严格验证,包括
-
认证机制:
- 实现安全的会话管理
- 使用强密码哈希(如bcrypt)存储密码
- 增加多因素认证
-
过滤改进:
- 更新过滤规则,覆盖更多潜在危险字符和SQL操作
- 对特殊字符进行统一转义处理
-
错误处理:
- 避免显示详细错误信息给用户
- 实现自定义错误页面
总结
SEMCMS系统存在多处安全漏洞,特别是SQL注入问题较为严重。攻击者可能利用这些漏洞获取未授权访问、窃取数据或破坏系统。建议开发者参考本报告及时修复这些问题,并定期进行安全审计以确保系统安全。
注: 本报告仅分析了部分已发现的漏洞,建议对系统进行全面审计以发现其他潜在安全问题。