首页 SEO攻略 正文

All in One SEO Pack v4.1.0.1存在RCE漏洞CVE-2021-24307,WordPress用户需警惕

SEO攻略 2025-03-13 16

最近一直都在对 WordPress 的核心框架以及主流插件中一些有趣的漏洞进行查看。今天,要继续给小伙伴们分享一个主流 SEO 插件所存在的 RCE 漏洞。

漏洞信息

All in One SEO Pack 是一个从 2007 年开始的原始 WordPress SEO 插件。有超过 300 万智能网站所有者使用 AIOSEO 来正确设置 WordPress SEO。因为他们这样做了,所以他们的网站能够在搜索引擎中获得更高的排名。

设置打开_all in one seo 设置_设置路由器

All in One SEO Pack v4.1.0.1 及其以下版本存在一个 PHP 反序列化漏洞,该漏洞被编号为 CVE-2021-24307,其漏洞信息具体如下:

CVE-2021-24307

反序列化触发分析

下载插件:

all-in-one-seo-packv4.1.0.1

安装并激活:

设置打开_all in one seo 设置_设置路由器

设置路由器_all in one seo 设置_设置打开

环境搭建完毕后,我们就可以开始愉快的漏洞分析之旅。

All in One SEO Pack 插件对一套 Restful API 接口(`AIOSEO\Plugin\Common\Api`)进行了自定义。

all in one seo 设置_设置打开_设置路由器

接口的前缀规则为“aioseo/v1”,并且有一组路由规则是由“$routers”所定义的。

设置打开_设置路由器_all in one seo 设置

关注一个 POST 请求规则,即“setting/import”。

'settings/import'=> [ 'callback' => [ 'Settings', 'importSettings' ], 'access' => 'aioseo_tools_settings' ]

处理代码处于`AIOSEO\Plugin\Common\Api\Settings`这个函数中,即`importSettings`函数。

设置打开_设置路由器_all in one seo 设置

这是一个用于处理文件上传请求的接口。若`Content-Type`的类型为`application/octet-stream`,那么处理代码呈现如下情况:

设置路由器_设置打开_all in one seo 设置

进入`importIniData`函数:

设置路由器_all in one seo 设置_设置打开

对请求数据包进行分割处理,如通过`\r\n`等方式,同时整理其格式。经过一系列处理步骤之后,会通过`foreach`循环来调用`convertAndSanitize`。

设置路由器_all in one seo 设置_设置打开

这里有反序列化的处理过程,并且进入了函数“maybe_unserialize”。

设置路由器_all in one seo 设置_设置打开

回顾上述参数的处理过程,经调试后我们能够构造出如下请求,其中可控参数最终被输入到了`unserialize`函数中。

设置打开_all in one seo 设置_设置路由器

all in one seo 设置_设置路由器_设置打开

完整调用栈如下:

设置路由器_all in one seo 设置_设置打开

上面的请求对应的用户操作界面如下所示:

all in one seo 设置_设置打开_设置路由器

从上面的分析能够看出,引发反系列化处理的数据是可以完全掌控的。接下来需要做的事情便是去寻觅一条反序列化 Gadget 链。

Gadget构造

WordPress 的核心框架没有可以直接被利用的利用链,因此我们的主要关注点在插件自身的代码上:

设置打开_all in one seo 设置_设置路由器

All in One SEO Pack 插件将 Monolog 进行了集成,能够借鉴 PHPGGC 工具来构造 gadget。

all in one seo 设置_设置打开_设置路由器

all in one seo 设置_设置打开_设置路由器

这里需要注意的是,All in One SEO Pack 里的 Monolog 以特定方式进行了自加载定义。具体而言,它通过 PSR-4 来定义自身的自加载方式。

all in one seo 设置_设置路由器_设置打开

因此我们构造恶意类时,需要修改namespace:

设置打开_设置路由器_all in one seo 设置

生成载荷的代码如下:

设置路由器_设置打开_all in one seo 设置

如果有小伙伴对完整生成命令执行载荷的代码怀有兴趣,那么请关注公众号,之后再私聊本人以进行交流。最终达成了成功触发 RCE 的结果。

设置打开_设置路由器_all in one seo 设置

修复方式

设置路由器_all in one seo 设置_设置打开

把`maybe_unserialize`这个函数替换成了`maybeUnserialize`。

public function maybeUnserialize( $string ) {  if ( ! is_string( $string ) ) {    return $string;  }
$string = trim( $string ); if ( is_serialized( $string ) && false === $this->stringContains( $string, 'O:' ) ) { 我们希望为大于 5.6 的 PHP 版本添加额外的加固措施。 return version_compare( PHP_VERSION, '7.0', '<' ) ? @unserialize( $string ) : @unserialize( $string, [ 'allowed_classes' => false ] ); 去掉最前面的序号,将长句拆分成多个小分句,使分句尽量简短,同时保持原文风格,禁止修改专有名词,禁止穿插英文单词。 } return $string;}

对序列化字符串加强了检查。

使用此文档提供的信息进行传播或利用后,所产生的任何直接或间接的后果及损害,都由使用本人来承担,同时听安全团队以及文章作者不会为此承担任何责任。

斯露德首次测试表现亮眼,B站评分9.0,玩家期待值爆表
« 上一篇 2025-03-13
sem点击付费ip,sem付费方式有哪几种
下一篇 » 2025-03-13

文章评论