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 的這種失效參數,就會造成整個程序的崩潰。
由于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

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

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

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

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

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