Web渗透测试中比较难的就是测试那些交互较少的应用了,当你尝试了各种 漏洞利用方法而无效之后,很可能就会放弃了。但有时候,这种花费时间的投入和研究,对白帽自身的技术提高来说,还是非常有用的。这里我就分享一下,我在对 比特币赌博网站bustabit的渗透测试中发现的两个漏洞,由此我也收获了$12,000赏金。比特币公司就是豪气。
过去几周,我一直在对比特币赌博网站bustabit进行渗透测试。在该网站中,玩家自己决定要投注的金额和支付倍数,随着赔率和倍数的上升,在游戏强行终止前自行终止游戏即可胜出,但是在游戏强行终止时还未能退出比赛,所有玩家的赌注都会输掉。
bustabit网站应用中存在一些有意思的功能,但我觉得其中的用户聊天交流功能可能存在问题,所以我也花了好多时间来研究分析它。注册登录之后,点击这里的链接https://www.bustabit.com/play,在左下角的CHAT框内就可与各路玩家进行实时聊天。
当我浏览查看聊天消息时,发现了一件有意思的事,就是当链接被粘贴进入时,聊天应用服务会自动为其创建一个超链接进行跳转。原因是由于网站采用了一个特殊且又危险的HTML实现元素,攻击者可以采取以下方式执行恶意操作:
理论上,该处主要会存在以下三种恶意利用:
如果输入未做严格的安全过滤,则可以把 :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
当然,在聊天窗口中点击以上这个最终链接之后,会发生以下警告:
如果聊天窗口中输入的外部URL网站是bustabit自身网站会怎样?
经测试发现,bustabit自身并不会把自己的网站链接当成外部URL网站进行转发,例如在聊天窗口中输入www.bustabit.com/a后,由于它是同一个网站,它并不会像上述那样,最终转化为www.bustabit.com/external?url=www.bustabit.com/a 这样的跳转链接。
但结合之前的 :2 HTML可利用之处,可以在其中构造加入 www.bustabit.com/a :
那要是变为上述的跳转链接,在其中加入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
最终可以这样构造:
经验证,这种方法是可行的:
以下的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 的这种失效参数,就会造成整个程序的崩溃。
由于bustabit网站中所有下注的用户名称在网站右上角都是公开的,攻击得可以向任何下赌注的人发送此类消息,导致受害者用户客户端崩溃,无法 完成有效参赌或赌资兑现。另外,攻击者还能向网站主聊天窗口中发送恶意链接,导致所有用户无法形成有效的消息连接,最终用户形成不了交互,游戏就长时间不 可玩。PoC视频如下:
https://www.youtube.com/watch?v=jxBVZtB2z4Q
在漏洞1中,我们提过,在聊天窗口中输入www.google.com之后,聊天应用会形成以下跳转链接:
https://www.bustabit.com/external?url=https://www.google.com
另外,测试发现,如果在其中输入简单的 JavaScript URI 之后,也能形成XSS,因为聊天中总会需要别人点击某些链接,所以,这种漏洞无处不在。就像在聊天窗口中输入Javascript:alert(1)之后,最终会跳转到https://www.bustabit.com/external?url=Javascript:alert(1),形成XSS攻击: 这 种情形下,可以深入对XSS漏洞进行利用,如其支持
而且,在现实利用场景中,我们还可配合以下这种用户登录页面形成深入的漏洞利用:那 么, 这种XSS能做什么呢?当然是Session窃取了。Web接口中的会话会被存储在用户的本地浏览器中,攻击者可以配合该XSS漏洞迷惑用户登录请求某个 恶意外部链接,由此间接窃取到用户cookie和session等信息,攻击者利用用户cookie信息就能登录用户账户。
很多人在做漏洞众测项目时,总会用一些面面俱到或浅尝辄止的方式来进行测试,虽然从攻击广度上来说可能会取得一些实质性效果,但是有一点要清楚,像 aquatone 或 dirsearch这些你能用的开源工具别人一样能下载利用。所以,如果你想在竞争激烈的众多白帽中脱颖而出,最好的方法就是去深入挖掘发现目标网站的某 些功能应用缺陷漏洞。
*参考来源:samcurry,clouds 编译,转载请注明来自 FreeBuf.COM