某CMS代码审计
字数 711 2025-08-25 22:59:09

YZMCMS 代码审计报告:会员模块时间盲注漏洞分析

漏洞概述

在 YZMCMS 会员模块的订单搜索功能中,存在一个时间盲注漏洞,攻击者可以通过构造特殊的请求参数执行任意 SQL 语句,导致数据库信息泄露或服务器被控制的风险。

漏洞位置

application/member/controller/order.class.php 第 76 行

漏洞分析

漏洞代码

漏洞出现在订单搜索功能中,代码直接拼接了用户输入的 type 参数到 SQL 查询语句中,没有进行适当的过滤或参数化处理。

漏洞原理

  1. 当用户提交搜索请求时,系统构建 SQL 查询语句
  2. type 参数被直接拼接到 WHERE 条件中
  3. 如果传入的是数组,系统会进行预编译处理
  4. 但如果传入的是字符串,则直接拼接到 SQL 语句中

漏洞利用条件

  1. 会员功能已启用(默认关闭)
  2. 目标表中至少有一条数据(否则不会执行 sleep 操作)

漏洞复现步骤

环境搭建

  1. 下载最新版 YZMCMS 源码
  2. 使用 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
    

漏洞利用

  1. 确保 yzm_order 表中有数据(可通过在线充值功能创建订单)
  2. 构造恶意 URL:
    http://127.0.0.1/member/order/order_search.html?of=id&or=DESC&dosubmit=1&&t_type=sleep(1)
    
  3. 观察响应时间,确认是否存在时间延迟

实际执行的 SQL 语句

SELECT COUNT(*) AS total FROM `yzmcms`.`yzm_order` WHERE 1=1 AND `type` = sleep(1);

修复建议

  1. 对所有用户输入进行严格的过滤和验证
  2. 使用参数化查询或预编译语句
  3. type 参数进行白名单验证
  4. 限制特殊字符的输入

漏洞影响

  1. 可导致数据库信息泄露
  2. 在特定条件下可导致服务器被控制
  3. 但由于会员模块默认关闭,实际影响有限

后记

该漏洞虽然存在,但由于会员功能默认关闭,实际可利用性较低。建议开发者对所有用户输入保持警惕,即使是非公开功能也应实施严格的安全措施。

YZMCMS 代码审计报告:会员模块时间盲注漏洞分析 漏洞概述 在 YZMCMS 会员模块的订单搜索功能中,存在一个时间盲注漏洞,攻击者可以通过构造特殊的请求参数执行任意 SQL 语句,导致数据库信息泄露或服务器被控制的风险。 漏洞位置 application/member/controller/order.class.php 第 76 行 漏洞分析 漏洞代码 漏洞出现在订单搜索功能中,代码直接拼接了用户输入的 type 参数到 SQL 查询语句中,没有进行适当的过滤或参数化处理。 漏洞原理 当用户提交搜索请求时,系统构建 SQL 查询语句 type 参数被直接拼接到 WHERE 条件中 如果传入的是数组,系统会进行预编译处理 但如果传入的是字符串,则直接拼接到 SQL 语句中 漏洞利用条件 会员功能已启用(默认关闭) 目标表中至少有一条数据(否则不会执行 sleep 操作) 漏洞复现步骤 环境搭建 下载最新版 YZMCMS 源码 使用 Docker 搭建环境: 漏洞利用 确保 yzm_order 表中有数据(可通过在线充值功能创建订单) 构造恶意 URL: 观察响应时间,确认是否存在时间延迟 实际执行的 SQL 语句 修复建议 对所有用户输入进行严格的过滤和验证 使用参数化查询或预编译语句 对 type 参数进行白名单验证 限制特殊字符的输入 漏洞影响 可导致数据库信息泄露 在特定条件下可导致服务器被控制 但由于会员模块默认关闭,实际影响有限 后记 该漏洞虽然存在,但由于会员功能默认关闭,实际可利用性较低。建议开发者对所有用户输入保持警惕,即使是非公开功能也应实施严格的安全措施。