某CMS代码审计
字数 711 2025-08-25 22:59:09
YZMCMS 代码审计报告:会员模块时间盲注漏洞分析
漏洞概述
在 YZMCMS 会员模块的订单搜索功能中,存在一个时间盲注漏洞,攻击者可以通过构造特殊的请求参数执行任意 SQL 语句,导致数据库信息泄露或服务器被控制的风险。
漏洞位置
application/member/controller/order.class.php 第 76 行
漏洞分析
漏洞代码
漏洞出现在订单搜索功能中,代码直接拼接了用户输入的 type 参数到 SQL 查询语句中,没有进行适当的过滤或参数化处理。
漏洞原理
- 当用户提交搜索请求时,系统构建 SQL 查询语句
type参数被直接拼接到 WHERE 条件中- 如果传入的是数组,系统会进行预编译处理
- 但如果传入的是字符串,则直接拼接到 SQL 语句中
漏洞利用条件
- 会员功能已启用(默认关闭)
- 目标表中至少有一条数据(否则不会执行 sleep 操作)
漏洞复现步骤
环境搭建
- 下载最新版 YZMCMS 源码
- 使用 Docker 搭建环境:
docker run -it -d --name mysql_dev -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.6 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci docker run -d -p 80:80 --link mysql_dev -v $(pwd):/var/www/html suanve/php:7-apache
漏洞利用
- 确保
yzm_order表中有数据(可通过在线充值功能创建订单) - 构造恶意 URL:
http://127.0.0.1/member/order/order_search.html?of=id&or=DESC&dosubmit=1&&t_type=sleep(1) - 观察响应时间,确认是否存在时间延迟
实际执行的 SQL 语句
SELECT COUNT(*) AS total FROM `yzmcms`.`yzm_order` WHERE 1=1 AND `type` = sleep(1);
修复建议
- 对所有用户输入进行严格的过滤和验证
- 使用参数化查询或预编译语句
- 对
type参数进行白名单验证 - 限制特殊字符的输入
漏洞影响
- 可导致数据库信息泄露
- 在特定条件下可导致服务器被控制
- 但由于会员模块默认关闭,实际影响有限
后记
该漏洞虽然存在,但由于会员功能默认关闭,实际可利用性较低。建议开发者对所有用户输入保持警惕,即使是非公开功能也应实施严格的安全措施。