Web滲透測試中比較難的就是測試那些交互較少的應(yīng)用了,當(dāng)你嘗試了各種漏洞利用方法而無效之后,很可能就會放棄了。但有時候,這種花費(fèi)時間的投入和研究,對白帽自身的技術(shù)提高來說,還是非常有用的。這里我就分享一下,我在對比特幣賭博網(wǎng)站bustabit的滲透測試中發(fā)現(xiàn)的兩個漏洞,由此我也收獲了$12,000賞金。比特幣公司就是豪氣。
背景
過去幾周,我一直在對比特幣賭博網(wǎng)站bustabit進(jìn)行滲透測試。在該網(wǎng)站中,玩家自己決定要投注的金額和支付倍數(shù),隨著賠率和倍數(shù)的上升,在游戲強(qiáng)行終止前自行終止游戲即可勝出,但是在游戲強(qiáng)行終止時還未能退出比賽,所有玩家的賭注都會輸?shù)簟?/span>
bustabit網(wǎng)站應(yīng)用中存在一些有意思的功能,但我覺得其中的用戶聊天交流功能可能存在問題,所以我也花了好多時間來研究分析它。注冊登錄之后,點擊這里的鏈接https://www.bustabit.com/play,在左下角的CHAT框內(nèi)就可與各路玩家進(jìn)行實時聊天。

漏洞1:用戶客戶端的拒絕服務(wù)(DoS)漏洞 – $2,000 美金
當(dāng)我瀏覽查看聊天消息時,發(fā)現(xiàn)了一件有意思的事,就是當(dāng)鏈接被粘貼進(jìn)入時,聊天應(yīng)用服務(wù)會自動為其創(chuàng)建一個超鏈接進(jìn)行跳轉(zhuǎn)。原因是由于網(wǎng)站采用了一個特殊且又危險的HTML實現(xiàn)元素,攻擊者可以采取以下方式執(zhí)行惡意操作:
:2
理論上,該處主要會存在以下三種惡意利用:
如果輸入未做嚴(yán)格的安全過濾,則可以把 :1 的地方替換為 ” onmouseover=alert(1) a=” 形成觸發(fā);
如果輸入未做嚴(yán)格的安全過濾,還可以把 :1 的地方替換為 javascript:alert(1) 形成觸發(fā);
如果輸入未做嚴(yán)格的安全過濾,則可以把 :2 的地方替換為 alert(1) 形成觸發(fā)。
可在這里,這些地方的替換最終無法形成有效利用。聊天應(yīng)用服務(wù)貌似不是直接對外部URL網(wǎng)站進(jìn)行超鏈接轉(zhuǎn)化,例如在聊天窗口中輸入的外部URL網(wǎng)站是www.google.com,這里的聊天應(yīng)用將會把其修改為以下樣式的最終跳轉(zhuǎn)鏈接:
https://www.bustabit.com/external?url=https://www.google.com

當(dāng)然,在聊天窗口中點擊以上這個最終鏈接之后,會發(fā)生以下警告:

如果聊天窗口中輸入的外部URL網(wǎng)站是bustabit自身網(wǎng)站會怎樣?
經(jīng)測試發(fā)現(xiàn),bustabit自身并不會把自己的網(wǎng)站鏈接當(dāng)成外部URL網(wǎng)站進(jìn)行轉(zhuǎn)發(fā),例如在聊天窗口中輸入www.bustabit.com/a后,由于它是同一個網(wǎng)站,它并不會像上述那樣,最終轉(zhuǎn)化為www.bustabit.com/external?url=www.bustabit.com/a 這樣的跳轉(zhuǎn)鏈接。
但結(jié)合之前的 :2 HTML可利用之處,可以在其中構(gòu)造加入 www.bustabit.com/a :
www.bustabit.com/a
那要是變?yōu)樯鲜龅奶D(zhuǎn)鏈接,在其中加入www.google.com/a又會是怎樣呢?我們可以這樣來構(gòu)造:
https://www.bustabit.com/external?url=https://www.google.com/a“>https://www.google.com/a
這個構(gòu)造鏈接中有亮點的部份是,它沒有對整個域更行超鏈接,而僅僅是對https://www.google.com/a進(jìn)行了超鏈接,最終點擊它后,又會跳轉(zhuǎn)到https://www.bustabit.com/external?url=https://www.google.com/a :
由此,攻擊者可以利用雙斜線功能來跳轉(zhuǎn)請求類似以下的外部資源,實現(xiàn)攻擊Payload加載:
https://www.bustabit.com//attacker.com/hacked
最終可以這樣構(gòu)造:
www.bustabit.com//attacker.com/hacked
經(jīng)驗證,這種方法是可行的:

以下的HTML和上述的 //hacker.com/ 類似,請注意最終的構(gòu)造效果是它會跳轉(zhuǎn)到一個非 samcurry.net 網(wǎng)站的外部鏈接上。這里的技術(shù)原理與統(tǒng)一資源標(biāo)識符(URI)相關(guān),點此參考。
就像下圖中在聊天室中輸入bustabit.com//whywontyouload.com之后,這種方法看上去可以繞過HTML解析機(jī)制的 Link Filter,由于這是一個純JavaScript的應(yīng)用,需要 onclick 事件而不用自動執(zhí)行刷新就能加載whywontyouload.com,但是最終效果不是太理想。

即使在客戶端寫好了PoC腳本,它也只會懸停在指向whywontyouload.com的操作上,點擊URL鏈接也沒有任何反應(yīng)。所以,我就來好好看看到底發(fā)生了什么。
經(jīng)過一番研究,我反復(fù)用不同的Payload來測試跳轉(zhuǎn)到外部域的機(jī)制,偶然就發(fā)現(xiàn)了能讓網(wǎng)站變灰不顯示任何東西的情況。原來,是我在自己的客戶端中發(fā)送了以下鏈接:
https://www.bustabit.com/%0t
由于其中包含了 %0t, JavaScript 不知如何處理解析,所以導(dǎo)致了整個網(wǎng)站的失效響應(yīng)。即使刷新了整個頁面,我發(fā)現(xiàn),我的客戶端還處于崩潰狀態(tài)。這也就是說,應(yīng)用程序會自動把所有超鏈接發(fā)送到某個JavaScript函數(shù),如果其中存在像 %0t 的這種失效參數(shù),就會造成整個程序的崩潰。
由于bustabit網(wǎng)站中所有下注的用戶名稱在網(wǎng)站右上角都是公開的,攻擊得可以向任何下賭注的人發(fā)送此類消息,導(dǎo)致受害者用戶客戶端崩潰,無法完成有效參賭或賭資兌現(xiàn)。另外,攻擊者還能向網(wǎng)站主聊天窗口中發(fā)送惡意鏈接,導(dǎo)致所有用戶無法形成有效的消息連接,最終用戶形成不了交互,游戲就長時間不可玩。PoC視頻如下:
https://www.youtube.com/watch?v=jxBVZtB2z4Q
漏洞2:XSS和Click Jacking(點擊劫持)- $10,000賞金
在漏洞1中,我們提過,在聊天窗口中輸入www.google.com之后,聊天應(yīng)用會形成以下跳轉(zhuǎn)鏈接:
https://www.bustabit.com/external?url=https://www.google.com

另外,測試發(fā)現(xiàn),如果在其中輸入簡單的 JavaScript URI 之后,也能形成XSS,因為聊天中總會需要別人點擊某些鏈接,所以,這種漏洞無處不在。就像在聊天窗口中輸入Javascript:alert(1)之后,最終會跳轉(zhuǎn)到https://www.bustabit.com/external?url=Javascript:alert(1),形成XSS攻擊:

這種情形下,可以深入對XSS漏洞進(jìn)行利用,如其支持標(biāo)記插入,那么,可以利用 Samy Kamkar的工具,形成點擊劫持攻擊。經(jīng)測試發(fā)現(xiàn),確實可以向聊天應(yīng)用中插入標(biāo)記,就此,我能用 Click here to continue 字段形成一個點擊劫持頁面:

而且,在現(xiàn)實利用場景中,我們還可配合以下這種用戶登錄頁面形成深入的漏洞利用:

那么, 這種XSS能做什么呢?當(dāng)然是Session竊取了。Web接口中的會話會被存儲在用戶的本地瀏覽器中,攻擊者可以配合該XSS漏洞迷惑用戶登錄請求某個惡意外部鏈接,由此間接竊取到用戶cookie和session等信息,攻擊者利用用戶cookie信息就能登錄用戶賬戶。

總結(jié)
很多人在做漏洞眾測項目時,總會用一些面面俱到或淺嘗輒止的方式來進(jìn)行測試,雖然從攻擊廣度上來說可能會取得一些實質(zhì)性效果,但是有一點要清楚,像 aquatone 或 dirsearch這些你能用的開源工具別人一樣能下載利用。所以,如果你想在競爭激烈的眾多白帽中脫穎而出,最好的方法就是去深入挖掘發(fā)現(xiàn)目標(biāo)網(wǎng)站的某些功能應(yīng)用缺陷漏洞。
|