欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Mybb 18.20 From Stored XSS to RCE 分析

来源:本站整理 作者:佚名 时间:2019-06-14 TAG: 我要投稿

2019年6月11日,RIPS团队在团队博客中分享了一篇MyBB ,文章中主要提到了一个Mybb18.20中存在的存储型xss以及一个后台的文件上传绕过。
其实漏洞本身来说,毕竟是需要通过XSS来触发的,哪怕是储存型XSS可以通过私信等方式隐藏,但漏洞的影响再怎么严重也有限,但漏洞点却意外的精巧,下面就让我们一起来详细聊聊看…
 
漏洞要求
储存型xss
拥有可以发布信息的账号权限
服务端开启视频解析
后台文件创建漏洞
拥有后台管理员权限(换言之就是需要有管理员权限的账号触发xss
 
漏洞分析
在原文的描述中,把多个漏洞构建成一个利用链来解释,但从漏洞分析的角度来看,我们没必要这么强行,我们分别聊聊这两个单独的漏洞:储存型xss、后台任意文件创建。
储存型xss
在Mybb乃至大部分的论坛类CMS中,一般无论是文章还是评论又或是的什么东西,都会需要在内容中插入图片、链接、视频等等等,而其中大部分都是选择使用一套所谓的“伪”标签的解析方式。
也就是说用户们通过在内容中加入[url]、[img]等“伪”标签,后台就会在保存文章或者解析文章的时候,把这类“伪”标签转化为相应的、,然后输出到文章内容中,而这种方式会以事先规定好的方式解析和处理内容以及标签,也就是所谓的白名单防御,而这种语法被称之为bbcode。
这样一来攻击者就很难构造储存型xss了,因为除了这些标签以外,其他的标签都不会被解析(所有的左右尖括号以及双引号都会被转义)。
function htmlspecialchars_uni($message)
{
    $message = preg_replace("#&(?!\#[0-9]+;)#si", "&", $message); // Fix & but allow unicode
    $message = str_replace(", ", $message);
    $message = str_replace(">", ">", $message);
    $message = str_replace("\"", """, $message);
    return $message;
}
正所谓,有人的地方就会有漏洞。
在这看似很绝对的防御方式下,我们不如重新梳理下Mybb中的处理过程。
在/inc/class_parse.php line 435 的 parse_mycode函数中就是主要负责处理这个问题的地方。


当服务端接收到你发送的内容时,首先会处理解析[img]相关的标签语法,然后如果开启了$this->options[‘allow_videocode’](默认开启),那么开始解析video
相关的语法,然后是[list]标签。在488行开始,会对[url]等标签做相应的处理。
if($this->mycode_cache['callback_count'] > 0)
    {
        foreach($this->mycode_cache['callback'] as $replace)
        {
            $message = preg_replace_callback($replace['find'], $replace['replacement'], $message);
        }
    }
我们把上面的流程简单的具象化,假设我们在内容中输入了

后台会首先处理video
,
然后内容就变成了

然后会处理[url]标签,最后内容变成

乍一看好像没什么问题,每个标签内容都会被拼接到标签相应的属性内,还会被htmlspecialchars_uni处理,也没办法逃逸双引号的包裹。
但假如我们输入这样的内容呢?

首先跟入到函数/inc/class_parse.php line 1385行 mycode_parse_video中

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载