看我如何发现比特币赌博网站漏洞并收获$12000赏金
Web渗透测试中比较难的就是测试那些交互较少的应用了,当你尝试了各种漏洞利用方法而无效之后,很可能就会放弃了。但有时候,这种花费时间的投入和研究,对白帽自身的技术提高来说,还是非常有用的。这里我就分享一下,我在对比特币赌博网站bustabit的渗透测试中发现的两个漏洞,由此我也收获了$12,000赏金。比特币公司就是豪气。
背景
过去几周,我一直在对比特币赌博网站bustabit进行渗透测试。在该网站中,玩家自己决定要投注的金额和支付倍数,随着赔率和倍数的上升,在游戏强行终止前自行终止游戏即可胜出,但是在游戏强行终止时还未能退出比赛,所有玩家的赌注都会输掉。
bustabit网站应用中存在一些有意思的功能,但我觉得其中的用户聊天交流功能可能存在问题,所以我也花了好多时间来研究分析它。注册登录之后,点击这里的链接https://www.bustabit.com/play,在左下角的CHAT框内就可与各路玩家进行实时聊天。
漏洞1:用户客户端的拒绝服务(DoS)漏洞 – $2,000 美金
当我浏览查看聊天消息时,发现了一件有意思的事,就是当链接被粘贴进入时,聊天应用服务会自动为其创建一个超链接进行跳转。原因是由于网站采用了一个特殊且又危险的HTML实现元素,攻击者可以采取以下方式执行恶意操作:
:2
理论上,该处主要会存在以下三种恶意利用:
如果输入未做严格的安全过滤,则可以把 :1 的地方替换为 ” onmouseover=alert(1) a=” 形成触发;
如果输入未做严格的安全过滤,还可以把 :1 的地方替换为 javascript:alert(1) 形成触发;
如果输入未做严格的安全过滤,则可以把 :2 的地方替换为 alert(1) 形成触发。
可在这里,这些地方的替换最终无法形成有效利用。聊天应用服务貌似不是直接对外部URL网站进行超链接转化,例如在聊天窗口中输入的外部URL网站是www.google.com,这里的聊天应用将会把其修改为以下样式的最终跳转链接:
https://www.bustabit.com/external?url=https://www.google.com
当然,在聊天窗口中点击以上这个最终链接之后,会发生以下警告:
如果聊天窗口中输入的外部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.bustabit.com/external?url=https://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
经验证,这种方法是可行的:
以下的HTML和上述的 //hacker.com/ 类似,请注意最终的构造效果是它会跳转到一个非 samcurry.net 网站的外部链接上。这里的技术原理与统一资源标识符(URI)相关,点此参考。
就像下图中在聊天室中输入bustabit.com//whywontyouload.com之后,这种方法看上去可以绕过HTML解析机制的 Link Filter,由于这是一个纯JavaScript的应用,需要 onclick 事件而不用自动执行刷新就能加载whywontyouload.com,但是最终效果不是太理想。
即使在客户端写好了PoC脚本,它也只会悬停在指向whywontyouload.com的操作上,点击URL链接也没有任何反应。所以,我就来好好看看到底发生了什么。
经过一番研究,我反复用不同的Payload来测试跳转到外部域的机制,偶然就发现了能让网站变灰不显示任何东西的情况。原来,是我在自己的客户端中发送了以下链接:
https://www.bustabit.com/%0t
由于其中包含了 %0t, JavaScript 不知如何处理解析,所以导致了整个网站的失效响应。即使刷新了整个页面,我发现,我的客户端还处于崩溃状态。这也就是说,应用程序会自动把所有超链接发送到某个JavaScript函数,如果其中存在像 %0t 的这种失效参数,就会造成整个程序的崩溃。
Web渗透测试中比较难的就是测试那些交互较少的应用了,当你尝试了各种漏洞利用方法而无效之后,很可能就会放弃了。但有时候,这种花费时间的投入和研究,对白帽自身的技术提高来说,还是非常有用的。这里我就分享一下,我在对比特币赌博网站bustabit的渗透测试中发现的两个漏洞,由此我也收获了$12,000赏金。比特币公司就是豪气。
背景
过去几周,我一直在对比特币赌博网站bustabit进行渗透测试。在该网站中,玩家自己决定要投注的金额和支付倍数,随着赔率和倍数的上升,在游戏强行终止前自行终止游戏即可胜出,但是在游戏强行终止时还未能退出比赛,所有玩家的赌注都会输掉。
bustabit网站应用中存在一些有意思的功能,但我觉得其中的用户聊天交流功能可能存在问题,所以我也花了好多时间来研究分析它。注册登录之后,点击这里的链接https://www.bustabit.com/play,在左下角的CHAT框内就可与各路玩家进行实时聊天。
无奈人生安全网
漏洞1:用户客户端的拒绝服务(DoS)漏洞 – $2,000 美金
当我浏览查看聊天消息时,发现了一件有意思的事,就是当链接被粘贴进入时,聊天应用服务会自动为其创建一个超链接进行跳转。原因是由于网站采用了一个特殊且又危险的HTML实现元素,攻击者可以采取以下方式执行恶意操作:
:2
理论上,该处主要会存在以下三种恶意利用:
如果输入未做严格的安全过滤,则可以把 :1 的地方替换为 ” onmouseover=alert(1) a=” 形成触发;
如果输入未做严格的安全过滤,还可以把 :1 的地方替换为 javascript:alert(1) 形成触发;
如果输入未做严格的安全过滤,则可以把 :2 的地方替换为 alert(1) 形成触发。
可在这里,这些地方的替换最终无法形成有效利用。聊天应用服务貌似不是直接对外部URL网站进行超链接转化,例如在聊天窗口中输入的外部URL网站是www.google.com,这里的聊天应用将会把其修改为以下样式的最终跳转链接:
https://www.bustabit.com/external?url=https://www.google.com
内容来自无奈安全网
当然,在聊天窗口中点击以上这个最终链接之后,会发生以下警告:
如果聊天窗口中输入的外部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.bustabit.com/external?url=https://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
经验证,这种方法是可行的:
以下的HTML和上述的 //hacker.com/ 类似,请注意最终的构造效果是它会跳转到一个非 samcurry.net 网站的外部链接上。这里的技术原理与统一资源标识符(URI)相关,点此参考。
就像下图中在聊天室中输入bustabit.com//whywontyouload.com之后,这种方法看上去可以绕过HTML解析机制的 Link Filter,由于这是一个纯JavaScript的应用,需要 onclick 事件而不用自动执行刷新就能加载whywontyouload.com,但是最终效果不是太理想。
即使在客户端写好了PoC脚本,它也只会悬停在指向whywontyouload.com的操作上,点击URL链接也没有任何反应。所以,我就来好好看看到底发生了什么。
经过一番研究,我反复用不同的Payload来测试跳转到外部域的机制,偶然就发现了能让网站变灰不显示任何东西的情况。原来,是我在自己的客户端中发送了以下链接:
https://www.bustabit.com/%0t
由于其中包含了 %0t, JavaScript 不知如何处理解析,所以导致了整个网站的失效响应。即使刷新了整个页面,我发现,我的客户端还处于崩溃状态。这也就是说,应用程序会自动把所有超链接发送到某个JavaScript函数,如果其中存在像 %0t 的这种失效参数,就会造成整个程序的崩溃。