您当前的位置:首页 > 电脑百科 > 程序开发 > 开源程序 > WordPress

WordPress 5.1 CSRF to RCE 漏洞详解

时间:2020-04-04 09:59:22  来源:  作者:

wordPress/ target=_blank class=infotextkey>WordPress是使用php语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。前些日子,RIPS放了一个WordPress5.1的CSRF漏洞通过本文将对此次CSRF漏洞进行详细分析,RCE相关的分析见后续分析文章

 

预备知识


在wordpress中,超级管理员是可以在评论中写入任何代码而不被过滤的

 

比如,在评论中输入

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

直接弹框

但是超级管理员在提交评论表单时,wordpress需要校验其Nonce值

想理解这个漏洞,首先要了解下wordpress的Nonce ( number used once )防御机制

Wordpress的Nonce ( number used once ) 机制,是用来防止CSRF而引进的。WordPress会为一些请求提供一个随机数进行校验,以防止未授权的请求的发生。

 

来看下wordpress的Nonce机制是如何使用的:

1、使用wp_create_nonce生成 nonce值:

WordPress 5.1 CSRF to RCE 漏洞详解

 

可见,其实nonce值与$i、$action、$uid、$token有关

这里的$i 是nonce创建的时间相关变量,由wp_nonce_tick()生成,其余的$action、$uid、$token很好理解。

由这里我们可以看出,nonce的生成,与其操作也是有关系的

 

2、将生成的 nonce传递给需要提交时验证的前端模板

3、需要验证的表单被提交后,验证其中nonce,例如下图中,本次漏洞点

WordPress 5.1 CSRF to RCE 漏洞详解

 

Nonce讲解完毕,言归正传,分析本次漏洞

 

漏洞分析


理论上,如果没法通过Nonce验证,后续的操作会直接被终止,而且在csrf攻击中,攻击者是没有办法伪造管理员实时的Nonce值。

 

但从本次漏洞处来看,如下图

WordPress 5.1 CSRF to RCE 漏洞详解

 

这里虽然没有通过Nonce的验证(wp_verify_nonce),但是并未终止操作。Wordpress在这里使用了两个过滤方法对后续的数据进行过滤。

 

至于为什么没有终止,而采用了如下的过滤逻辑,据说是因为WordPress其中有一些特殊的功能例如trackbacks and pingbacks会受到该值的影响,笔者没有进一步考究,感兴趣的同学可以自己分析下。

 

到目前为止,我们虽然没有合法的nonce值,但我们的payload仍然幸存,

接下来,看看逻辑里的 kses_init_filters()这个方法

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

超级管理员&非法Nonce情况:


我们用超级管理员身份提交一个评论,但是改包,把&_wp_unfiltered_html_comment改为空,使其通过不了Nonce校验,如下图

 

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

果然进入下图断点

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

紧接着,进入如下断点

WordPress 5.1 CSRF to RCE 漏洞详解

 

使用wp_filter_post_kses对输入的数据进行过滤

 

普通用户情况:


此时用普通用户进行评论

 

WordPress 5.1 CSRF to RCE 漏洞详解

 


WordPress 5.1 CSRF to RCE 漏洞详解

 

直接调用wp_filter_kses进行过滤

 

以上思路以及明朗了

超级管理员&合法nonce ->不做任何过滤

超级管理员&不合法nonce ->wp_filter_post_kses

普通用户 –>wp_filter_kses

 

先来看看普通用户提交和超级管理员无nonce提交时调用的过滤函数有什么区别

 

普通用户提交过滤函数:

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

超级管理员无nonce提交过滤函数:

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

可以看出只是wp_kses中第二个参数不同,一个是current_filter(),一个是’post’

这里不同的,对应wp_kses中,应该是allowed_html参数值

 

这里举个普通用户评论的例子,普通用户提交评论,current_filter()方法返回的值是pre_comment_content,也就是说allowed_html参数值为pre_comment_content。可见下图动态调试结果

WordPress 5.1 CSRF to RCE 漏洞详解

 

对应的,超级管理员无nonce提交时,这里的allowed_html参数值为”post”

 

那么allowed_html值不同,到底会有什么区别呢?

$allowed_html被传入wp_kses_split方法

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

进一步看wp_kses_split

WordPress 5.1 CSRF to RCE 漏洞详解

 

注意到这里$pass_allowed_html = $allowed_html;

现在$allowed_html传给了$pass_allowed_html

我们要看看这两个不同的$allowed_html最终传递到哪里被用到

 

跟进_wp_kses_split_callback,$allowed_html传给了wp_kses_split2

WordPress 5.1 CSRF to RCE 漏洞详解

 

跟进wp_kses_split2,$allowed_html被传给了wp_kses_attr

WordPress 5.1 CSRF to RCE 漏洞详解

 

跟进wp_kses_attr,$allowed_html被传给了wp_kses_allowed_html

WordPress 5.1 CSRF to RCE 漏洞详解

 

跟进wp_kses_allowed_html

一路跟踪,到了这里,$allowed_html终于有作用了

WordPress 5.1 CSRF to RCE 漏洞详解

 

回顾一下,

超级管理员无nonce提交时,这里的allowed_html参数值为”post”

普通用户提交评论时, allowed_html参数值为”pre_comment_content”。

首先看超级管理员无nonce提交吗,allowed_html参数值为”post”,进入post分支

WordPress 5.1 CSRF to RCE 漏洞详解

 

可以看到这里有一个wp_kses_allowed_html方法,跟进去看看

WordPress 5.1 CSRF to RCE 漏洞详解

 

相当于一个白名单机制,再看看白名单上都有什么,看看$allowedposttags

WordPress 5.1 CSRF to RCE 漏洞详解

 

这里’a’标签运行’rel’属性

 

再看看普通用户提交评论时, allowed_html参数值为”pre_comment_content”情况。

WordPress 5.1 CSRF to RCE 漏洞详解

 

 

这里白名单是$allowedtags

WordPress 5.1 CSRF to RCE 漏洞详解

 

只允许’href’与’title’

看到这里,明白wp_filter_post_kses 、wp_filter_ kses两个过滤函数有什么区别了吗?

 

可以用’rel’属性与不可以用’rel’,有什么区别呢?如何造成这次的csrf呢?看下图

wp-includesformatting.php

WordPress 5.1 CSRF to RCE 漏洞详解

 

可以看到属性值在没有被转义处理的情况下就再次拼接在一起,

在a标签最终被拼接时,title的属性会被封装到双引号中,这样我们就可以构造数据使其闭合,从而执行js

Payload:

WordPress 5.1 CSRF to RCE 漏洞详解

 

被双引号包裹后

 

单鼠标放置时,js执行

 

但是这个wp_rel_nofollow_callback哪里来的呢?

 

看一下wordpress对comment_content都采用了哪些默认的过滤器

 

wp-includesdefault-filters.php

 


WordPress 5.1 CSRF to RCE 漏洞详解

 

上图三个分别是:

wp_rel_nofollow

convert_invalid_entities

balanceTags

 

看下wp_rel_nofollow

WordPress 5.1 CSRF to RCE 漏洞详解

 

wp_rel_nofollow_callback是在这里被加载并使用的

 

结语


最后,整理下流程

 

此次漏洞的流程是:

(超级管理员&不合法nonce) ->(wp_filter_post_kses)->(’rel’属性在白名单中逃逸)->(wordpress加载默认评论内容过滤器wp_rel_nofollow)->(加载wp_rel_nofollow_callback) ->(未过滤并用双引号包裹title值)->(js执行)->(RCE



Tags:WordPress   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
在最近的一波攻击中,黑客利用多个插件中未修补的漏洞攻击了 160 万个 WordPress 网站。 易受攻击的插件对 WordPress 网站产生了的巨大攻击数据。 Wordfence 最近发现 WordPr...【详细内容】
2021-12-16  Tags: WordPress  点击:(9)  评论:(0)  加入收藏
说起 WordPress 优化加速来可以说是个经久不衰的话题了,包括明月自己都撰写发表了不少相关的文章。基本上到现在为止明月的 WordPress 优化方案已经固定成型了,那就是 WP Supe...【详细内容】
2021-11-02  Tags: WordPress  点击:(49)  评论:(0)  加入收藏
很多人在做了网站的搬家和网站的从新更换空间域名搬家之后,往往出现网站打不开的情况,这个问题其实并不难,但是很多新手站长因为不知道,导致在处理这类问题上花费了大量的时间。...【详细内容】
2021-08-17  Tags: WordPress  点击:(147)  评论:(0)  加入收藏
当访问者访问您的网站时,您只有几秒钟的时间来显示这个人正在寻找的信息,否则,他们只需点击浏览器的后退按钮,开始浏览器别的同类型的网站了。缓慢的WordPress网站会给您的访问...【详细内容】
2020-08-20  Tags: WordPress  点击:(112)  评论:(0)  加入收藏
WordPress 5.5如期而至,更新优化的主要三个领域:速度,搜索和安全。主要内容速度方面主要体现图片的加载优化上面,新版本采用了懒加载模式,在滚动到对应的位置,才会加载真实的图片...【详细内容】
2020-08-17  Tags: WordPress  点击:(97)  评论:(0)  加入收藏
【ALENG 自媒体】8月11日早间自媒体专稿,话说从2008年涉足独立博客至今,掐指一算,走独立博客这一行已经10多年了。10多年间,我的独立博客网站先后使用过早期的Z-blog博客系统,后...【详细内容】
2020-08-12  Tags: WordPress  点击:(114)  评论:(0)  加入收藏
安装好nginx、php、mysql之后,需要经过配置,才能使用起LNMP的环境。...【详细内容】
2020-08-06  Tags: WordPress  点击:(101)  评论:(0)  加入收藏
一台云服务器能做什么?上次介绍了薅腾讯云和阿里云两家厂商羊毛的方法和过程,那到手的云主机要干什么用呢?或者说,云主机有什么用?过了这么多年,"上云"这个说法好像并没有过时。简...【详细内容】
2020-08-04  Tags: WordPress  点击:(106)  评论:(0)  加入收藏
一般的大型网站系统,都依赖伪静态。如果服务器的伪静态没有配置好,访问部分链接就会出现 404 的情况。在 WordPress 则具体表现为后台“固定链接”选项设置失效。 下面就提供...【详细内容】
2020-07-04  Tags: WordPress  点击:(134)  评论:(0)  加入收藏
在本地的 Mac 电脑上配置开发环境安装 homeBrew安装 PHP 7 和 Composer安装 Valet配置 Valet安装 MySQL安装 WordPress在 Windows 电脑上配置开发环境安装 PHPstudy安装 Wor...【详细内容】
2020-06-20  Tags: WordPress  点击:(138)  评论:(0)  加入收藏
▌简易百科推荐
说起 WordPress 优化加速来可以说是个经久不衰的话题了,包括明月自己都撰写发表了不少相关的文章。基本上到现在为止明月的 WordPress 优化方案已经固定成型了,那就是 WP Supe...【详细内容】
2021-11-02  明月登楼    Tags:WordPress   点击:(49)  评论:(0)  加入收藏
很多人在做了网站的搬家和网站的从新更换空间域名搬家之后,往往出现网站打不开的情况,这个问题其实并不难,但是很多新手站长因为不知道,导致在处理这类问题上花费了大量的时间。...【详细内容】
2021-08-17  企飞资源    Tags:WordPress   点击:(147)  评论:(0)  加入收藏
当访问者访问您的网站时,您只有几秒钟的时间来显示这个人正在寻找的信息,否则,他们只需点击浏览器的后退按钮,开始浏览器别的同类型的网站了。缓慢的WordPress网站会给您的访问...【详细内容】
2020-08-20      Tags:wordpress   点击:(112)  评论:(0)  加入收藏
WordPress 5.5如期而至,更新优化的主要三个领域:速度,搜索和安全。主要内容速度方面主要体现图片的加载优化上面,新版本采用了懒加载模式,在滚动到对应的位置,才会加载真实的图片...【详细内容】
2020-08-17      Tags:Wordpress5.5   点击:(97)  评论:(0)  加入收藏
【ALENG 自媒体】8月11日早间自媒体专稿,话说从2008年涉足独立博客至今,掐指一算,走独立博客这一行已经10多年了。10多年间,我的独立博客网站先后使用过早期的Z-blog博客系统,后...【详细内容】
2020-08-12      Tags:WordPress   点击:(114)  评论:(0)  加入收藏
安装好nginx、php、mysql之后,需要经过配置,才能使用起LNMP的环境。...【详细内容】
2020-08-06      Tags:WordPress   点击:(101)  评论:(0)  加入收藏
一台云服务器能做什么?上次介绍了薅腾讯云和阿里云两家厂商羊毛的方法和过程,那到手的云主机要干什么用呢?或者说,云主机有什么用?过了这么多年,"上云"这个说法好像并没有过时。简...【详细内容】
2020-08-04      Tags:WordPress   点击:(106)  评论:(0)  加入收藏
一般的大型网站系统,都依赖伪静态。如果服务器的伪静态没有配置好,访问部分链接就会出现 404 的情况。在 WordPress 则具体表现为后台“固定链接”选项设置失效。 下面就提供...【详细内容】
2020-07-04      Tags:WordPress   点击:(134)  评论:(0)  加入收藏
在本地的 Mac 电脑上配置开发环境安装 homeBrew安装 PHP 7 和 Composer安装 Valet配置 Valet安装 MySQL安装 WordPress在 Windows 电脑上配置开发环境安装 PHPstudy安装 Wor...【详细内容】
2020-06-20      Tags:WordPress   点击:(138)  评论:(0)  加入收藏
操作场景WordPress 是一款使用 PHP 语言开发的博客平台,您可使用通过 WordPress 搭建属于个人的博客平台。本文以 CentOS 7.6 操作系统的腾讯云云服务器为例,手动搭建 WordPre...【详细内容】
2020-04-27      Tags:WordPress   点击:(100)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条