某cms 用户中心存在时间盲注
字数 937 2025-08-29 08:32:30
ZZCMS 用户中心时间盲注漏洞分析与利用
漏洞概述
ZZCMS 用户中心存在时间盲注漏洞,该漏洞位于 /inc/function.php 文件的 markit() 函数中,由于未对 $_SERVER['REQUEST_URI'] 进行过滤就直接拼接进 SQL 语句,导致 SQL 注入漏洞。
漏洞分析
漏洞位置
漏洞核心代码位于 /inc/function.php 的 markit() 函数:
function markit(){
$userip=$_SERVER["REMOTE_ADDR"];
$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $url;
query("insert into zzcms_bad (username,ip,dose,sendtime)values('".$_COOKIE["UserName"]."','$userip','$url','".date('Y-m-d H:i:s')."')") ;
}
漏洞成因
$_SERVER['REQUEST_URI']直接拼接进 SQL 语句,未做任何过滤- 虽然
/inc/stopsqlin.php中有针对 XSS 的过滤,但对 SQL 注入无效:if (strpos($_SERVER['REQUEST_URI'],'script')!==false || strpos($_SERVER['REQUEST_URI'],'%26%2399%26%')!==false|| strpos($_SERVER['REQUEST_URI'],'%2F%3Cobject')!==false){ die ("无效参数"); }
触发条件
漏洞触发需要满足以下条件:
- 修改 Cookie 中的
UserName值 - 使查询出来的
$row["editor"]值与$username不同 $_POST['id']的值必须在对应表中存在
漏洞复现
复现步骤
- 找到调用
markit()函数的地方,如/user/del.php - 修改 Cookie 中的
UserName值 - 构造恶意请求,在 URL 中注入 SQL 语句
- 使用时间盲注技术判断注入结果
示例注入
由于注入点位于 URL 中,需要使用 ? 进行连接:
http://target.com/user/del.php?id=1' AND (SELECT * FROM (SELECT(SLEEP(5)))a)--
修复建议
- 对
$_SERVER['REQUEST_URI']进行严格过滤 - 使用参数化查询或预处理语句
- 对用户输入进行转义处理
- 限制特殊字符的输入
技术要点
- 时间盲注技术:通过
SLEEP()函数和条件判断来获取数据 - 注入点构造:需要理解 URL 参数如何被拼接进 SQL 语句
- 绕过技巧:虽然有针对 XSS 的过滤,但对 SQL 注入无效
注意事项
- 复现时需要确保
$_POST['id']的值在数据库中存在 - 需要修改 Cookie 中的
UserName值才能进入注入分支 - 注入语句需要根据实际环境进行调整
参考链接
- 源码下载地址:http://www.zzcms.net/download/zzcms2019.zip
- 原始漏洞报告:http://www.a.com/asdsabdas (示例链接)