导语:web应用程序渗透测试中最具挑战性的任务之一就是处理一个具有有限交互的应用程序。当尝试了每一种常见的方法来进行一些程序开发之后,难免会很容易就放弃了,但是作为一个黑客,花时间去了解一个应用程序通常是有收获的,并且对个人能力
web应用程序渗透测试中最具挑战性的任务之一就是处理一个具有有限交互的应用程序。当尝试了每一种常见的方法来进行一些程序开发之后,难免会很容易就放弃了,但是作为一个黑客,花时间去了解一个应用程序通常是有收获的,并且对个人能力的成长也是有好处的。
介绍
过去几周我一直在关注的一个具体应用是个比特币赌博网站,在该网站上一支股票会随着时间的推移逐渐上涨。赌客自己决定他们想要投入的金额和支付的乘数。随着乘数的增加,可以选择点击一个按钮,并获得他们所想要获得的回报量。乘数每次增加,股票就有可能“破产”,所有的投资将会损失。
这个应用程序有一些非常有趣的功能,但我要研究的是该程序与其他用户聊天的功能。
“深入挖掘”聊天功能:用户客户端的拒绝服务——2000美元赏金
浏览聊天消息后发现,当链接被粘贴时,服务会自动创建超链接。这很有趣,因为该网站制作了一个非常特殊的HTML元素,在实现该元素时经常是冒着危险,因此攻击者可以执行以下操作之一……
<a href=":1">:2</a>
“onmouseover=alert(1) a=”——如果不正确处理,其将会在:1触发
javascript:alert(1)——如果没有正确处理,其将会在:1触发
<script>alert(1)</script> ——如果未正确处理,其将会在:2触发
遗憾的是,这些方法都没有奏效。
似乎该服务没有直接超链接外部端点,而是将其修改为以下端点,其中www.google.com就是一个已发布URL的示例……
https://www.bustabit.com/external?url=https://www.google.com
发布一个URL的结果……
单击上述URL后跳转到的页面。
将链接粘贴到相同的域结果如何?
我们将很快回到上面的端点,但是外部转发服务的有趣之处在于它没有为相同的域转发URL。
有某种检测机制可以确定URL是否来自同一站点,例如www.bustabit.com/a不会触发要修改为www.bustabit.com/external?url=www.bustabit.com/a的域,因为它位于同一个域中。
下面是生成的www.bustabit.com/a的HTML。
<a href="/a">www.bustabit.com/a</a>
与生成的www.google.com/a的HTML相比较…
<a href="https://www.bustabit.com/external?url=https://www.google.com/a">https://www.google.com/a</a>
上述URL的真正炫酷之处在于,它不是对整个域进行超链接,而是简单地对端点进行超链接。攻击者在这里可能做的是使用有效负载滥用外部资源的双斜杠的功能。
https://www.bustabit.com//attacker.com/hacked
创建…
<a href="//attacker.com/hacked">www.bustabit.com//attacker.com/hacked</a>
起作用了!
下面的HTML与//hacker.com/上面的超链接完全相同。注意它是如何将你带到外部资源而不是samcurry.net上的端点。有关这方面的更多信息可以在这里找到:http://www.ietf.org/rfc/rfc2396.txt。
WOULD’VE WORKED可以作为链接过滤器的旁路,但这是一个全javascript的应用程序,它执行onclick事件来加载同一选项卡中的端点,因为域是完全相同的,而且它不需要刷新任何东西。
将PoC HTML写入客户端,加入一个超链接whywontyouload.com,点击该链接,结果什么都没有。进行一番调查,并确定点击URL时出现的结果之后…
一段时间之后…
长时间无休止地发送垃圾邮件并试图找到将用户诱导带到外部域名之后,网站变灰。
事实证明,通过发送https://www.bustabit.com/%0t确实可以破坏客户端。
JavaScript不能对这个问题进行处理,因为%0t的URL编码没有对任何东西进行解码,只是使整个应用程序失败(有关正确的URL编码的更多信息请参见这里)。
刷新页面之后,客户端仍然处于崩溃状态。
应用程序自动地将所有超链接加到JavaScript函数中,如果出现一个失败的URL(例如有%0t),应用程序就会崩溃。
如何将其武器化?
攻击者可以向任何投注者发送信息(信息是公开的——所有的现场投注和下注都在右上角),这将使受害者的客户端崩溃,使他们无法兑现其投注。此外,攻击者可以简单的将一个坏链接发布到主聊天通道并断开每个人的连接,使游戏在很长一段时间内不能玩,或者撤销与所有用户交互的功能。
“深入挖掘”聊天:XSS以及点击劫持——$10,000赏金
还记得我在上面发布的那个外部端点吗?
事实证明,你可以简单地向其传递一个JavaScript URI,并且攻击者可以在应用程序的上下文中执行JavaScript。
这些bug要求你说服别人去点击某些东西。
要使这些PoC变得更好,你可以做的一件事是检查网站是否可以放在<iframe>标签中。如果可以,那么就能使用Samy Kamkar的快速打包PoC生成工具创建一个点击劫持PoC。
事实证明,该服务可以放在<iframe>中。因此,使用Click here to continue这个很棒的代码小片段,生成了一个示例PoC。
在现实世界中,scenario可以看起来像这样。
那么,可以用XSS做什么呢?
会话接管!事实证明,web套接字会话存储在浏览器的本地存储中。攻击者可能会滥用XSS,迫使受害者使用会话信息对外部服务进行调用。攻击者可以通修改受害者的机密以及对服务进行身份验证来对应用程序进行身份验证。
总结
通常情况下,人们可能会使用一种非常“随意喷洒”的方法获取漏洞赏金。也许这种方法可能会有作用,但是,别忘了自动工具,如aquatone或dirsearch。如果想在有成千上万的研究人员中脱颖而出,发现漏洞,最好对某些功能进行深入挖掘。