MyBB远程代码执行攻击链(上)——存储型XSS(CVE-2021-27889)

访客3年前黑客文章755

0x00 前言

本文旨在将这个有点复杂的存储型XSS漏洞的形成原理讲清楚,先放全文最关键的部分

问题发生是由于2个特性+1个问题:
特性1:MyCode是一个“宽松的”模板,它允许内嵌的HTML标签被渲染,正如我们将在下面讲述的XSS漏洞
特性2:MyBB的渲染过程会自动检测没有被[url]包围的URL,即未使用MyCode格式的URL,然后转换它们为HTML链接。
问题1:由于HTML编码以及URL编码并未对小括号编码,导致使用正则检索并替换时忽略了小括号

0x01 远程代码执行攻击链概述

国外著名论坛软件MyBB在1.8.16<=版本<=1.8.25受2个漏洞影响,在默认的MyBB配置下,这2个漏洞能被连在一起使用最终导致远程代码执行,漏洞的利用无需管理员账户,普通用户即可。

第1个漏洞(“内嵌的自动URL”导致的持久型XSS——CVE-2021-27889)发生在MyBB的渲染过程,允许任何普通论坛用户来嵌入存储型XSS攻击代码到帖子甚至私信中。

第2个漏洞(“主题属性”导致的SQL注入——CVE-2021-27890)是一个能导致RCE的SQL注入,漏洞能被任何带有管理员会话的用户触发

一个经验丰富的攻击者能够开发一个针对存储型XSS的利用,然后发送一个私信给管理员,管理员登录论坛后打开私信,漏洞被触发,一个RCE的利用代码将在后台自动执行,最终导致完全接管MyBB论坛

0x02 “内嵌的自动URL”导致的持久型XSS(CVE-2021-27889)技术细节

现代论坛软件例如MyBB通常允许普通用户来创建包含图像、视频等的帖子或私信。这个功能必须被小心实现,当这个功能的限制不够严格时,恶意攻击者能够滥用它来以预期外的方式修改论坛内容,甚至,能够注入任意的JavaScript代码到论坛的HTML文档中

现代论坛中,通常有2种方式实现这个功能:
1、允许用户提交HTML标签,然后应用一个允许或拒绝列表来决定输入是否是健全的、安全的,最终决定是否展示给用户
2、使用一个存在的或定制的消息模板,例如Markdown,来从输入中创建健全的HTML输出

这2种方式都有其对应的优缺点。MyBB利用第2种方式,在渲染过程中使用一个叫做MyCode的定制模板

如下是2个例子,看一下MyCode的基本格式以及它是如何被转化的

当用户输入一个MyCode形式的私信,MyBB解析器会先对整个输入进行HTML编码以及URL编码,然后利用一个正则来发现并替换全部的MyCode为HTML

问题发生是由于2个特性+1个问题:
特性1:MyCode是一个“宽松的”模板,它允许内嵌的HTML标签被渲染,正如我们将在下面讲述的XSS漏洞
特性2:MyBB的渲染过程会自动检测没有被[url]包围的URL,即未使用MyCode格式的URL,然后转换它们为HTML链接。
问题1:由于HTML编码以及URL编码并未对小括号编码,导致使用正则检索并替换时忽略了小括号

下列的代码片段展示了$message变量被传递给渲染类的mycode_auto_url() ***

mybb/inc/class_parser.php

在527行处的$message变量包含着已经渲染后的HTML结果,因此必须被小心处理,以至于HTML标签或属性不会被破坏。此处的逻辑是,仅仅处理不在HTML标签中的URL,并将其转化为标签

MyBB利用下列的正则来尝试安全的解析不在HTML标签中的URL(此处的正则是被简化的,去掉了对于理解漏洞不相关的部分)
mybb/inc/class_parser.php

正则被|分为2部分:
部分1:匹配任何标签中的内容,在这样的匹配下,没有东西被改变
部分2:URL必须以一个空格(“ ”)或左小括号(“(”)或右小括号(“)”)或左中括号(“[”)或右尖角号(“>”)开始,后面是一个URL地址(这是简化的版本)。在这的逻辑是当一个用户提供的MyCode被转化为了HTML,即使用户控制的数据能被嵌入到一个HTML标签的属性中,它依旧不能包含这5个字符

例如,当MyCode中的[img]被转化为HTML,结果如下

当这样一个图像标签被构造时,将要成为src属性的URL将被去掉全部的空格,然后被HTML编码和URL编码,程序本身的想法是,编码时将去掉这5个字符,因此第2部分正则假设之前的编码已经去掉了这5个字符

然而,URL编码和HTML编码都没有修改小括号,因此构造如下的一个[img]标签,会逃过编码,然后让第2部分正则匹配

在渲染过程的第1阶段,下列标签将被创建

在下一阶段,mycode_auto_url() *** 会匹配第2段URL,正如它以一个没有被编码的右小括号开始。最终的HTML如下:

正如你能看见,一个标签已经 *** 入到存在的标签,因为这2个标签都包含双引号,因此他们会互相影响。浏览器例如Chrome或Firefox将构造一个包含攻击者控制的onerror事件处理器的元素。这允许攻击者执行任意的JavaScript代码在一个读取恶意帖子或私信的受害者浏览器上。

0x03 思考总结

现代漏洞攻击,越来越趋向:“多个特性、问题造成漏洞,多个漏洞造成RCE攻击链”

0x04 参考链接

https://blog.sonarsource.com/mybb-remote-code-execution-chain

相关文章

影驰显卡怎么样?影驰显卡哪个系列更好用?

影驰显卡怎么样?影驰显卡哪个系列更好用?

影驰显卡的销量挺好的,出色的性价比和口碑受到不少用户的还原,对于大多数人来说,影驰的黑将、虎将、名人堂都是比较熟悉的品牌,但其实影驰品牌主要分为三个,下面就给各位介绍一下影驰的三大系列显卡。  ...

黑客入侵了全世界打印机 只为宣传自己最喜爱的主播

虽然Youtube播主一茬又一茬火了又凉,但“Pewdiepie”—— Felix Kjellberg始终都是无法被撼动的Youtube主播之王。不过现在,一个印度音乐制作公司的Youtube频道T-...

手机迅雷如何添加离线空间(迅雷离线下载取消了吗)

我相信很多朋友已经注意到离线下载功能越来越差,无论是像迅雷这样的下载工具还是像网络磁盘这样的云存储服务。由于各种原因,离线下载越来越不可能,百度云甚至一度关闭了离线下载服务——虽然只是虚惊一场,但足以...

黑客网站接单靠谱吗_黑客高手联系方式是多少-中介找黑客帮忙改gpa

「黑客网站接单靠谱吗_黑客高手联系方式是多少-中介找黑客帮忙改gpa」1.1获取方针信息n"); exec 9<&-进入crunch的装置目录下面能够看到里边有一个charset.lst...

论坛微信-论坛微信(论坛微信聊天记录误删除)业务等相关信息

论坛微信-论坛微信(论坛微信聊天记录误删除)业务等相关信息

论坛微信相关问题 论坛微信聊天记录误删除相关问题 用英语怎么说黑客 开个小的软件公司赚钱(开软件公司流程) 怎么样成为顶级黑客 求黑客帮忙找回QQ账号(怎么联系黑客帮忙盗号...

孕妇可以吃螃蟹吗(孕妇吃螃蟹的注意事项)

  孕妇能吃大闸蟹吗(孕妇吃螃蟹的常见问题)大家都了解,大闸蟹是一种很有营养成分且很美味的一种食材,尽管是那样,可是吃蟹拥有 许多的常见问题,也是有很多人都说孕妇不可以吃大闸蟹,那麼孕妈妈究竟能不能吃...