CVE-2022-21663: WordPress <5.8.3 版本对象注入漏洞深入分析

news2024/11/13 23:17:32

引言

在网络安全领域,技术的研究与讨论是不断进步的动力。本文针对WordPress的一个对象注入漏洞进行分析,旨在分享技术细节并提醒安全的重要性。特别强调:本文内容仅限技术研究,严禁用于非法目的。

漏洞背景

继WordPress CVE-2022-21661注入漏洞之后,安全研究人员又发现了一个严重的对象注入漏洞,该漏洞允许具有管理员权限的用户通过修改特定的选项来获取服务器的shell访问权限。

影响范围

以下是受该漏洞影响的WordPress实例条件:

  • WordPress版本低于5.8.3。
  • 启用了多站点模式。
  • 存在一条可用的反序列化链(本文不展开讨论)。

GitHub上的漏洞修复记录可以在此链接查看:
GitHub漏洞修复记录

环境搭建

为了复现此漏洞,首先需要搭建一个符合条件的WordPress环境。可以通过以下命令获取漏洞修复前的WordPress源码:

git clone https://github.com/WordPress/WordPress
git checkout 7d20ea9

漏洞分析

漏洞入口点

首先来到 wp-admin/upgrade.php,这是管理员可以直接访问到的文件,也是我认为的此漏洞的入口点。

跟进 wp_upgrade函数,来到 wp-admin/includes/upgrade.php

首先看几个全局变量,$wp_db_versionwp-includes/version.php中定义,根据其定义处的注释来看,这是本安装程序的数据库版本,在下一行中从数据库中取出了 db_version赋值给 $wp_current_db_version,看这情况,大概是一个是固定的数据库版本,另一个是可变的,upgrade.php会时不时地比较,当发生改变时,会进行一些操作

接下来看到我下的断点处,进入 upgrade_all()函数

这里就是在将两个版本进行比较,一致时不发生任何变化,不一致时运行后面的代码,接着看下面

根据从数据库中取出的 db_version也就是此处的 $wp_current_db_version的大小,会进行不同的处理,我们来关注断点处的 upgrade_280函数

看到 1611 行的 is_multisite(),跟进

这是一个判断是否开启了多站点的函数,这也是本漏洞的一个开启条件,必须要开启多站点才可以。开多站点需要改配置文件,我这里图省事儿,直接改了判断条件 !is_multisite(),强行让他绕过了

继续看上面,进入循环,每次从 wp_options表中取 20 条数据,将每一条数据都进行反序列化,漏洞的点就在此处了,因为 wp_options中的数据大部分都是可控的,我们可以通过管理员修改其值,最后进入反序列化。

还有两个问题,第一,如何控制 db_version的值,让他进入我们想要进入的函数;第二,如何更改 wp_options中的值。

数据写入

其实这两个是同一个问题,一并解决,wordpress后台没有直接访问所有 options的按钮,但我们可以访问 wp-admin/options.php

这里可以更改 db_options中大部分的值,包括 db_version,我们将其修改为 10300,就满足了进入漏洞函数的要求,接下来我们尝试写入反序列化字符串

我们先随便选择一个选项写入反序列化字符串,这里我首先选择的是 blogdescription,也就是博客描述,这个也可以在常规选项中更改(更建议,因为需要处理的值会更少,调试没那么费力),post的数据会逐个进入 wp-includes/option.php中的 update_option,来看几个比较重要的函数(PS:太长截图截不完)

这里首先说明一下 $option是每个选项的键,$value是每个选项的值

首先看到 sanitize_option

这个函数会根据不同的键来选择不同的处理方式,比如一些一定会用整数的,就会intval处理,所以选择的选项也是有讲究的,我之前选择的blogdescription,就因为这个函数而无法使用,他会将一些特殊字符编码,导致无法正常反序列化,这个可以慢慢尝试,尽量选择这个函数不会进行太多处理的选项

最终我选择的是 wp-admin/options-writing.php中的 “密码”(选择 options.php中的mailserver_pass也一样,是同一个),一般来说,密码对字符都不会有太多的限制,至少这里是的

回到之前的 update_option的代码,稍微注意一下这里的比较

如果我们输入的选择没有发生改变,就不会继续后面的代码,继续往下走,进入 wp-includes/functions.php中的maybe_serialize函数

如果是数组或者对象,那么会直接序列化后返回。然后进入 is_serialized函数

这里会取字符串的第一个字符进行比较,这里几乎囊括了反序列化字符串的所有类型,遇到是这一些的,返回后会再次反序列化,也就是进行了二次反序列化,这样几乎是防止了可能的反序列化。

这里遗漏了一个 C类型,官方文档对他的描述是 custom object,自定义对象,这个以前几乎没有用到过,因此这次进行了一次测试

代码:

结果

同一个类,将类型从 O修改为了 C,反序列化运行后,虽然报错,但最后仍然会触发 __destruct方法,因此我们可以将一个正常的反序列化字符串,将第一个字符 O修改为 C,这样就可以逃过这里的二次反序列化,从而将我们的反序列化字符串写入数据库,等待触发即可。

0x03 漏洞复现

本菜鸡找不到 wordpress的链子,只能随意触发一个 __destruct意思意思

这里使用 wp-includes/Requests/Transport/cURL.php中的 Requests_Transport_cURL

C:23:"Requests_Transport_cURL":0:{}

查看数据库,并没有被二次序列化

来到wp-admin/options.php,将 db_version修改为 10300

这里一个意外的发现,修改数据库的时候就会触发漏洞入口

成功取出数据库中的反序列化串,并且执行反序列化

触发 __destruct方法

总结

通过对WordPress对象注入漏洞的深入分析与复现,我们发现漏洞的利用存在一定的复杂性。这不仅是对技术能力的挑战,也是对安全意识的考验。在学习和研究过程中,我们应始终保持谨慎和敬畏之心。

参考链接

  • GitHub漏洞利用代码仓库:d5shenwu/vulPOC

关于

剑芸信息安全团队
剑芸信息安全团队成立于2022年9月,我们是一个专注于互联网攻防技术研究的团队。我们的研究领域涵盖网络攻防、Web安全、移动终端安全、安全开发以及IoT/物联网/工控安全等。

想了解更多关于我们,请继续关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1964597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

系统设计中15 个最重要的权衡

系统设计的第一法则:一切都与权衡有关。 在设计系统时,我们需要决定要包含哪些功能以及要忽略哪些功能。每次我们做这个决定时,我们都在进行权衡。在本文中,我们将探讨系统设计中遇到的15个最常见的权衡问题,并使用实…

第十四天学习笔记2024.7.25

Git安装 1.安装git 2.创建git仓库 3.创建文件并且提交文件 (git add . 将文件提交到缓存)(git commit -m 说明)(git log 查看历史) 4.分支创建与解决分支冲突问题 创建主机(git 192.1…

手机三要素接口怎么对接呢?(二)

一、什么是手机三要素? 手机三要素又叫运营商三要素,运营商实名认证,运营商实名核验,手机三要素实名验证,手机三要素实名核验,每个人的称呼都不同,但是入参和出参是一样的。 输入姓名、身份证…

24暑假算法刷题 | Day25 | 回溯算法 III | LeetCode 491. 非递减子序列,46. 全排列,47. 全排列 II

目录 491. 非递减子序列题目描述题解 46. 全排列题目描述题解 47. 全排列 II题目描述题解 491. 非递减子序列 点此跳转题目链接 题目描述 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任…

MELLE: Autoregressive Speech Synthesis without Vector Quantization

2024.7MICROSOFT 文章目录 MELLE: Autoregressive Speech Synthesis without Vector Quantizationabstractmethod损失函数 Autoregressive Image Generation without Vector Quantizationabstractmethods更好的AR modelresults MELLE: Autoregressive Speech Synthesis without…

UI框架与MVC模式详解(3)——MVC\MVP\MVVM

【PDI模式】 前文中,我们详细讲解了为实现一个涉及UI的功能所必须得三者,简称PDI: Panel类:主要实现交互逻辑、显示逻辑的地方以及保存界面相关的数据的地方Data类:数据管理类,主要是业务相关的数据Inter…

小白也能轻松学的计算机网络零基础入门(附学习路线 + 计算机网络教程)

本文作者:程序员鱼皮 免费编程学习 - 编程导航网:https://www.code-nav.cn 介绍 计算机网络是指将地理位置不同的多台计算机或设备通过通信线路进行连接,从而实现信息传递和资源共享,或者组成一个更完整的计算机系统。 如今&…

【MySQL】用户管理连接池原理{数据库权限/连接池/mysql访问逻辑}

文章目录 1.普通用户的引入用户创建用户删除用户修改用户密码 2.数据库的权限给用户授权回收权限实操过程 3.简略介绍mysql连接池3.一个用户注册/登录/使用网页版mysql逻辑 1.普通用户的引入 用户 MySQL中的用户,都存储在系统数据库mysql的user表中 mysql> use…

Internet Download Manager(IDM)2024最新免费版电脑下载管理器

1. Internet Download Manager(IDM)是一款流行的下载管理软件,以其高速、稳定的下载性能著称。 2. IDM支持多线程下载,可以显著提高下载速度。 3. 该软件还具备恢复中断下载的功能,对于网络不稳定的用户非常实用。 …

蓝鹏测径仪非标定制订制流程

测径仪通常属于非标定制设备,非标定制意味着这些设备不是按照标准规格批量生产的,而是根据特定的客户需求和应用场景设计和制造的。例如,某些测径仪可能需要特殊的测量范围、精度、传感器或软件来满足特定的工业检测要求。 测径仪非标定制的…

Axure Web端元件库:构建高效互动网页的基石

在快速迭代的互联网时代,Web设计与开发不仅追求视觉上的美感,更注重用户体验的流畅与功能的强大。Axure RP,作为一款专业的原型设计工具,凭借其强大的交互设计能力和丰富的元件库,成为了众多UI/UX设计师、产品经理及前…

箱型图大揭秘!Matplotlib带你玩转数据界的‘变形金刚’

想要一窥数据深海的秘密?Matplotlib箱型图来助阵!不是魔术师,却能让数据‘箱’中显真章,异常值无所遁形。笑点低?不,是数据洞察力强!跟着这波操作,让数据可视化变得既科学又有趣&…

【手撕数据结构】链表面试题进阶

目录 相交链表环形链表扩展问题 环形链表||原理 随机链表的复制 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 思…

Centos7.6升级Nginx到nginx-1.27.0

Centos7.6升级Nginx到nginx-1.27.0 简介 升级过程 常见问题 简介 Nginx 更新到了1.27.0,为了系统的安全性将进行服务升级 升级过程 一、Nginx的卸载 升级前需要先卸载以前安装的版本 1、yum的卸载 > yum remove nginx同时还需要手动删除配置文件和日志文…

sqli-labs靶场——第三关

1、判断注入类型 ?id1和?id2-1的页面不一样 2、判断闭合类型 http://127.0.0.1/sqli-labs/Less-3/?id1)and 11 -- 页面正常 http://127.0.0.1/sqli-labs/Less-3/?id1)and 12 -- 页面变化 3、order by查看有几列 http://127.0.0.1/sqli-labs/Less-3/?id1)order by 4 --页面…

vue3+ts+pinia+vant-项目搭建

1.pnpm介绍 npm和pnpm都是JavaScript的包管理工具,用于自动化安装、配置、更新和卸载npm包依赖。 pnpm节省了大量的磁盘空间并提高了安装速度:使用一个内容寻址的文件存储方式,如果多个项目使用相同的包版本,pnpm会存储单个副本…

LABVIEW2016安装教程完整版安装图文教程、注册下载方法

大家好,今天分享下LABVIEW2016安装步骤,同样的安装前请大家务必退出杀毒软件,安装路径千万不要出现中文或其他特殊符号,否则都会导致安装失败的,跟着教程来安装都会安装成功的,如果你遇到了安装问题&#x…

springboot整合mybatis-plus(数据层Dao/Mapper测试)

第一部分:创建springboot文件 第一步:打开软件,点击file,点击new 然后选择module,在右侧选择springboot 第二步:选择配置和JDK以及java版本 ①选择maven类型 ②选择JDK1.8版本 ③选择java8版本 ④选择j…

破解监控难题,局域网电脑监控软件哪家强?

现在的环境,企业要想茁壮成长,员工的高效工作那可是关键中的关键。但不少老板都发现了一个头疼的问题,员工上班老是偷懒,这可怎么行?今天,就来给大家详细说道说道几款出色的局域网电脑监控软件,…