作者:LoRexxar'@知道创宇404实验室
时间:2019年3月14日

2019年3月13日, RIPS团队公开了一篇关于WordPress 5.1.1的XSS漏洞详情,标题起的很响亮,叫做wordpress csrf to rce, https://blog.ripstech.com/2019/wordpress-csrf-to-rce/

下面我们就来详细聊聊这个漏洞。

关于 WordPress 防护

早在2017年10月25号,我曾经写过一篇关于WordPress安全机制的文章。

https://lorexxar.cn/2017/10/25/wordpress/

在其中,我着重描述了WordPress整体安全机制中的最核心机制,nonce安全机制

出于防御CSRF攻击的目的,WordOress引入了Nonce安全机制,Nonce是通过用户id、token、操作属性来计算的。简单来说就是,Nonce值受限于用户以及操作属性两点,不同用户同一个操作Nonce值不同,同一个用户不同操作Nonce值不同,同一个用户同一个操作不同站Nonce不同。

虽然是出于防御CSRF攻击的目的诞生,但却在WordPress薄弱的后台安全防御下,打上了最强的一节防御外壳。

在WordPress Core开发团队的认知中,任何一个WordPress的超级管理员,都应该保管好自己的网站以及账号安全,超级管理员也应该能对自己的网站以及服务器负责。

在这样的观点设计下,WordPress的超级管理员可以直接修改后台插件模板来getshell,超级管理员的评论不会有任何过滤。

所以在WordPress的防御体系下,如何绕过Nonce、如何获取超级管理员权限、如果在非超级管理员权限下做任何可以威胁网站安全操作,就是WordPress安全漏洞的主要方向。

关于 CSRF to RCE 漏洞

在我们熟悉了WordPress的安全机制之后,我们再回到这个漏洞来。

作者提到,在WordPress的评论处有一个比较神奇的机制。刚才提到,对于WP的超级管理员来说,文章的评论不会有任何过滤,但仍旧有Nonce值_wp_unfiltered_html_comment,而WordPress其中有一些特殊的功能例如trackbacks and pingbacks会受到该值的影响,所以在评论处,Nonce不会直接阻止请求,而是另外生成了一套逻辑来做处理

/wp-includes/comment.php line 3245

if ( current_user_can( 'unfiltered_html' ) ) {    if ( wp_create_nonce( 'unfiltered-html-comment' )!=$_POST['_wp_unfiltered_html_comment'] ) {        kses_remove_filters(); // start with a clean slate        kses_init_filters(); // set up the filters    }}

继续跟下去,我们简单的把逻辑写成伪代码

if 有权限:    if nonce正确:        wp_filter_post_kses()    else:        wp_filter_kses()

而其中的区别就是,wp_filter_post_kses不会做任何过滤,会保留请求的完整评论,而wp_filter_kses将只允许白名单的标签存在,就比如a标签等。

而问题的核心就在于,如何在wp_filter_kses的白名单中找到一个可以导致xss的输入点。这个点就在a标签的rel属性处理中。

在/wp-includes/formatting.php line 3025

这里对整个标签全部做了一次处理,而没有额外的转义,再加上这里是通过拼接双引号符号来完成,那么如果我们构造一个评论为

原链接中的属性会被取出,然后被双引号包裹,就成了

恶意链接就构造成功了,当管理员鼠标放在这条评论上时,则可以执行任意JS。

最后就是在执行任意JS之后,我们可以通过JS直接修改后台的模板,来实现管理员权限下的恶意操作,在我曾经写过的文章《从瑞士军刀到变形金刚--XSS攻击面拓展》中,我就曾经以WordPress为例子来举了多个从XSS到进一步恶意操作的利用方式。

https://lorexxar.cn/2017/08/23/xss-tuo/#Xss-to-Rce

我们仔细回顾一下整个漏洞,攻击者需要诱骗超级管理员点击他的恶意链接,然后需要手动把鼠标放置到评论上,甚至还需要保留该页面一段时间,整个攻击才有可能成功。

不难发现,如果我们把漏洞放在WordPress Core树立的安全标准下来说,该漏洞实际能算作是漏洞的部分只有一个,就是绕过Nonce机制实现的一个WordPress XSS漏洞。当我们抛开这个关键点之后,我们不难发现,这个漏洞看上次利用条件还不错,但实际上,在WordPress的安全机制中,插件安全一直是最严重的问题,一旦WordPress的高量级插件爆了一个后台的反射性XSS漏洞,利用难度反而甚至比这个漏洞更低,不是吗?

漏洞要求

WordPress commit 2504efcf9439c1961c4108057e8f3f48239a244b(5.2-alpha-44833)

超级管理员点击恶意链接。

漏洞复现

搭建完成后使用admin账号登陆

然后构造恶意页面

使用登陆过超级管理员的浏览器点开该页面,然后就会提交评论,当鼠标移动到评论上是,则会执行相应的js

从漏洞补丁看漏洞分析

刚才我们说到了一个关键点,整个漏洞实际上可以看作是一个绕过Nonce机制实现的一个WordPress XSS漏洞。

这里我们从漏洞补丁出发,重新分析下这个漏洞的几个关键点。这个漏洞到目前为止,一共有2个commit用来修复。

https://github.com/WordPress/WordPress/commit/2504efcf9439c1961c4108057e8f3f48239a244b#diff-e7c589fb0969e0f690bf2f051517d0ad

https://github.com/WordPress/WordPress/commit/0292de60ec78c5a44956765189403654fe4d080b#diff-91531896c6f70c8a4b4b321d1369c988

第一个commit首先是修复了那个不该有的xss漏洞

esc_attr是WordPress内置的过滤函数,专用来处理属性处的可能出现xss的位置。

第二个commit就比较有趣了,在我看来这个commit更像是一个半成品,可能是由于修复比较匆忙,先把修复的patch更新了再说的感觉。

这个commit我们需要跟进到函数wp_filter_kses才看得懂,我们跟着这个函数一路跟下去,一直到/wp-includes/kses.php line 1039

这里的pre_comment_content大概像是请求的类型,要到wp_kses_allowed_html去获取允许的标签以及属性列表。

/wp-includes/kses.php line 829

由于还没有针对性的设置,所以在现在的版本中,如果没有设置nonce,享受的是和其他用户相同的评论过滤,也就从另一个角度修复了这个漏洞:>

写在最后

当我们一起分析完整个漏洞之后呢,不难发现RIPS为了pr不惜吹了个大牛,其实当我们把整个漏洞重新压缩之后,我们发现其实漏洞就相当于其他CMS爆了一个存储型XSS漏洞一样,之所以会有这样的利用链,反而是因为WordPress对其本身错误的安全认知导致的。

在WordPress的安全认知中,Nonce机制的确是一个效果非常好的安全机制,但从一个安全从业者的观点来说,WordPress的超级管理员应不应该等同于服务器管理员仍然是一个需要考虑的问题,在安全的世界里来说,给每个用户他们应有的权限才是最安全的做法,不是吗?

 

往 期 热 门

利用 Exchange SSRF 漏洞和 NTLM 中继沦陷域控

ES 文件浏览器安全漏洞分析(CVE-2019-6447)

简单 Unity3D 安卓游戏逆向思路

  

“好看”的你最好看!

wordpress漏洞_聊聊 WordPress 5.1.1 CSRF to RCE 漏洞相关推荐

  1. wordpress 数据库_在WordPress中使用数据库

    wordpress 数据库 Out of the box, WordPress provides tons of functions that can be used to interact with ...

  2. html应用json 文件_安全研究 | Slack桌面应用程序的RCE漏洞+XSS漏洞

    对于Slack的桌面应用程序来说,一些应用内跳转.XSS.逻辑重定向和HTML或javascript注入bug,都有可能导致任意代码执行.这篇Writeup就讲述了作者通过构造HTML注入,绕过Sla ...

  3. rmi反序列化导致rce漏洞修复_企业安全05-Fastjson =1.2.47反序列化RCE漏洞(CNVD-2019-22238)...

    Fastjson <=1.2.47反序列化RCE漏洞(CNVD-2019-22238) 一.漏洞描述 Fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 ...

  4. 小米商城html代码_小米6 WiFi验证门户中的RCE漏洞

    介绍 在2018年的Pwn2own上,F-Secure实验室演示了小米6在连接攻击者所控制的恶意WiFi热点后被攻陷.以下是具体步骤: 用户加入由攻击者控制的WiFi,手机会通过发送测试性的HTTP ...

  5. wordpress创建_在WordPress网站上创建论坛的利弊

    wordpress创建 The Pros and Cons of Creating a Forum on a WordPress Website 在WordPress网站上创建论坛的利弊 Forums ...

  6. wordpress插件_适用于WordPress的10个最佳联盟营销工具和插件

    wordpress插件 Are you looking for the best affiliate marketing tools and plugins? 您是否在寻找最佳的会员营销工具和插件? ...

  7. wordpress插件_更多WordPress插件可成功进行内容营销

    wordpress插件 Let's begin today with a little trip down memory lane- 让我们从今天的记忆之旅开始-- In part one of Wo ...

  8. url存在宽字节跨站漏洞_利用WebSocket跨站劫持(CSWH)漏洞接管帐户

    在一次漏洞悬赏活动中,我发现了一个使用WebSocket连接的应用,所以我检查了WebSocket URL,发现它很容易受到CSWH的攻击(WebSocket跨站劫持) 有关CSWH的更多详细信息,可 ...

  9. mysql堡垒机漏洞_关于近期网传齐治堡垒机漏洞的声明

    尊敬的用户: 齐治科技(下述简称"齐治")注意到近期有消息称"齐治堡垒机存在未修复的前台远程代码执行漏洞".经过确认,消息提及的漏洞是齐治已停售产品Shterm ...

最新文章

  1. 混合云应用双活容灾实践
  2. 用Python编写小工具下载OSM路网数据
  3. jetty优秀文章转载
  4. Hibernate实体类注解中如何忽略某些字段的映射
  5. 字体变换大小的html代码,JQuery 实时改变网页字体大小的代码
  6. android 百度输入法表情,百度输入法安卓8.6版本发布,AI输入法成为最懂你的“斗图神器”...
  7. IT规划的两大困惑及未来之路
  8. Python实现《都挺好》社交网络分析
  9. 108-周跳探测之GF
  10. 超人能一拳把某个人打出地球吗?
  11. 考题篇(6.2) 02 ❀ FortiGate ❀ Fortinet 网络安全专家 NSE 4
  12. python中正则表达式与jieba分词的使用
  13. word 条件多项式公式对齐
  14. win10+ubuntu18.04安装+sougou输入法
  15. System Power Tools Suite
  16. 环信IM即时通讯集成-遇到问题及创建默认会话+默认欢迎语
  17. c语言虽难,但是只要入门了,学习了那个思想后,就觉得容易多了!
  18. 个人简历中的自我评价
  19. ITSM | Atlassian ITSM终极指南,重构IT、运营和支持的工作方式
  20. 1044 火星数字 C++

热门文章

  1. swift 之SnapKit 动画
  2. ASP.NET froms 身份验证之Roles
  3. 参考基因组中的特殊序列
  4. 使用Flink时遇到的问题(不断更新中)
  5. [Vue] : 键盘修饰符
  6. rocketmq sql解析过滤
  7. String字符串类的获取功能
  8. 简练软考知识点整理-控制干系人参与
  9. Oracle Database 9i 10g 11g编程艺术 深入数据库体系结构 第2版pdf
  10. Spring Boot 之构建Hello Word项目