挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金

Web渗透测试中比较难的就是测试那些交互较少的应用了,当你尝试了各种 漏洞利用方法而无效之后,很可能就会放弃了。但有时候,这种花费时间的投入和研究,对白帽自身的技术提高来说,还是非常有用的。这里我就分享一下,我在对 比特币赌博网站bustabit的渗透测试中发现的两个漏洞,由此我也收获了$12,000赏金。比特币公司就是豪气。

背景

过去几周,我一直在对比特币赌博网站bustabit进行渗透测试。在该网站中,玩家自己决定要投注的金额和支付倍数,随着赔率和倍数的上升,在游戏强行终止前自行终止游戏即可胜出,但是在游戏强行终止时还未能退出比赛,所有玩家的赌注都会输掉。

bustabit网站应用中存在一些有意思的功能,但我觉得其中的用户聊天交流功能可能存在问题,所以我也花了好多时间来研究分析它。注册登录之后,点击这里的链接https://www.bustabit.com/play,在左下角的CHAT框内就可与各路玩家进行实时聊天。

挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第1张图片

漏洞1:用户客户端的拒绝服务(DoS)漏洞 – $2,000 美金

当我浏览查看聊天消息时,发现了一件有意思的事,就是当链接被粘贴进入时,聊天应用服务会自动为其创建一个超链接进行跳转。原因是由于网站采用了一个特殊且又危险的HTML实现元素,攻击者可以采取以下方式执行恶意操作:

:2

理论上,该处主要会存在以下三种恶意利用:

如果输入未做严格的安全过滤,则可以把 :1 的地方替换为 ” οnmοuseοver=alert(1) a=” 形成触发;

如果输入未做严格的安全过滤,还可以把 :1 的地方替换为  javascript:alert(1) 形成触发;

如果输入未做严格的安全过滤,则可以把 :2 的地方替换为 形成触发。

可在这里,这些地方的替换最终无法形成有效利用。聊天应用服务貌似不是直接对外部URL网站进行超链接转化,例如在聊天窗口中输入的外部URL网站是www.google.com,这里的聊天应用将会把其修改为以下样式的最终跳转链接:

https://www.bustabit.com/external?url=https://www.google.com

挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第2张图片当然,在聊天窗口中点击以上这个最终链接之后,会发生以下警告:挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第3张图片

如果聊天窗口中输入的外部URL网站是bustabit自身网站会怎样?

经测试发现,bustabit自身并不会把自己的网站链接当成外部URL网站进行转发,例如在聊天窗口中输入www.bustabit.com/a后,由于它是同一个网站,它并不会像上述那样,最终转化为www.bustabit.com/external?url=www.bustabit.com/a 这样的跳转链接。

但结合之前的 :2 HTML可利用之处,可以在其中构造加入 www.bustabit.com/a :

www.bustabit.com/a

那要是变为上述的跳转链接,在其中加入www.google.com/a又会是怎样呢?我们可以这样来构造:

https://www.google.com/a

这个构造链接中有亮点的部份是,它没有对整个域更行超链接,而仅仅是对https://www.google.com/a进行了超链接,最终点击它后,又会跳转到https://www.bustabit.com/external?url=https://www.google.com/a :

由此,攻击者可以利用双斜线功能来跳转请求类似以下的外部资源,实现攻击Payload加载:

https://www.bustabit.com//attacker.com/hacked

最终可以这样构造:

www.bustabit.com//attacker.com/hacked

经验证,这种方法是可行的:

挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第4张图片以下的HTML和上述的  //hacker.com/ 类似,请注意最终的构造效果是它会跳转到一个非  samcurry.net 网站的外部链接上。这里的技术原理与统一资源标识符(URI)相关,点此参考。

就像下图中在聊天室中输入bustabit.com//whywontyouload.com之后,这种方法看上去可以绕过HTML解析机制的 Link Filter,由于这是一个纯JavaScript的应用,需要 onclick 事件而不用自动执行刷新就能加载whywontyouload.com,但是最终效果不是太理想。挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第5张图片

即使在客户端写好了PoC脚本,它也只会悬停在指向whywontyouload.com的操作上,点击URL链接也没有任何反应。所以,我就来好好看看到底发生了什么。

经过一番研究,我反复用不同的Payload来测试跳转到外部域的机制,偶然就发现了能让网站变灰不显示任何东西的情况。原来,是我在自己的客户端中发送了以下链接:

https://www.bustabit.com/%0t

由于其中包含了 %0t, JavaScript 不知如何处理解析,所以导致了整个网站的失效响应。即使刷新了整个页面,我发现,我的客户端还处于崩溃状态。这也就是说,应用程序会自动把所有超链接发送 到某个JavaScript函数,如果其中存在像 %0t 的这种失效参数,就会造成整个程序的崩溃。

挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第6张图片

由于bustabit网站中所有下注的用户名称在网站右上角都是公开的,攻击得可以向任何下赌注的人发送此类消息,导致受害者用户客户端崩溃,无法 完成有效参赌或赌资兑现。另外,攻击者还能向网站主聊天窗口中发送恶意链接,导致所有用户无法形成有效的消息连接,最终用户形成不了交互,游戏就长时间不 可玩。PoC视频如下:

https://www.youtube.com/watch?v=jxBVZtB2z4Q

漏洞2:XSS和Click Jacking(点击劫持)- $10,000赏金

在漏洞1中,我们提过,在聊天窗口中输入www.google.com之后,聊天应用会形成以下跳转链接:

https://www.bustabit.com/external?url=https://www.google.com

挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第7张图片另外,测试发现,如果在其中输入简单的 JavaScript URI 之后,也能形成XSS,因为聊天中总会需要别人点击某些链接,所以,这种漏洞无处不在。就像在聊天窗口中输入Javascript:alert(1)之后,最终会跳转到https://www.bustabit.com/external?url=Javascript:alert(1),形成XSS攻击: 挖洞经验 | 看我如何发现比特币赌博网站漏洞并收获$12000赏金_第8张图片这 种情形下,可以深入对XSS漏洞进行利用,如其支持