挖洞經驗 | 印度餐飲點評網Zomato的Reflected XSS漏洞
大家好,今天要分享的是印度美食搜尋點評網站Zomato的一個反射型XSS漏洞($250),文中作者詳細描述了具體的漏洞發現過程。漏洞雖然簡單,國內廠商也可能幾乎沒啥賞金,但也可學習學習,參考借鑑。
漏洞發現
最近我在讀《Mastering Modern Web Penetration Testing》(精通流行Web滲透測試技術)這本書,書中提到了https://www.wolframalpha.com/ 這個網站,可以用它來進行子域名列舉,效果還不錯。
於是,我就想找個目標上手試試,所以我就在其搜尋欄中輸入了zomato.com,之後,列舉結果中返回了10多個子域名資訊。而且,結果中還會返回各個子域名的日均訪問量,這個選項對發現一些偏門網站還是有用的。基於此,返回結果中最後一個子域名secretx.zomato.com引起了我的注意,因為它的日均訪問量才400,是所有子域名中最少的。
我在瀏覽器中打開了secretx.zomato.com, 跳出來一個按鈕 -“sign in with Zomato”,我看了看原始碼,也沒什麼特別的。
我點選按鈕,它就跳轉到了zomato.com,隨後,又跳出來一個顯示框,它上面提示“SecretX Client wants to access you Zomato Account. Accept or Recject”。哦,有點意思。
所以,我又立即回到網站secretx.zomato.com中仔細檢視原始碼,從中我發現了以下URL連結:
當點選Sign in with Zomato的按鈕之後,以上URL連結就會被載入。接下來,我在上述URL引數中添加了一些授權驗證的填充值,看看是否能引起一些錯誤響應,果然:
填充進去的引數值竟然都能在響應頁面中有所顯示,如error=xss,error_description=xsssy,error_hint=xss等,這下我接著來檢查 < 和 > 是否被過濾掉,結果是:NO!
構造Payload
有了這些發現,我就想構造XSS攻擊,但可能由於服務端部署了WAF,所以總是不起效。在這個階段,我花了好多時間,最終也沒啥效果。之後,我就在一些漏洞報告中尋找繞過WAF的技巧,並一個個Payload地進行嘗試。
最終,終於有一個Payload可用了:
<marquee loop=1 width=0 onfinish=alert`1`>XSS</marquee>
但因為alert()、confirm()、prompt()這些形式都被服務端的WAF過濾阻攔了,所以連DOM資訊也獲取不到。後來我還試了Payload的URL編碼,但也沒成功。時間馬上就是凌晨3點半了,為了第二天上課不遲到,我想洗洗睡了。
好在我還有點精神,提提神後,我繼續找很多文章部落格進行參考,之後我突然想到Somdev之前釋出的一個XSS Cheatsheet –https://github.com/s0md3v/AwesomeXSS ,其中提到用co\u006efirm()來代替confirm(),構造Payload實現繞過:
co\u006efirm()
經過unicode字元編碼,這一試竟然可以! 可以獲取到服務端的DOM元素資訊了:
上報了漏洞之後,我就一頭睡過去了,第二天醒來手機資訊提示:“Zomato has rewarded you 250$”。
PoC
存在XSS漏洞的URL連結:
https://auth2.zomato.com/oauth2/fallbacks/error?error=xss&error_description=xss&error_hint=xss
存在漏洞的引數:所有引數
XSS Payload:
<marquee loop%3d1 width%3d0 onfinish%3dco\u006efirm(document.cookie)>XSS<%2fmarquee>
PoC URL:
https://auth2.zomato.com/oauth2/fallbacks/error?error=xss&error_description=xsssy&error_hint=%3Cmarquee%20loop%3d1%20width%3d0%20onfinish%3dco \u006efirm(document.cookie)%3EXSS%3C%2fmarquee%3E
視訊
看不到?點這裡
漏洞原因
在漏洞報送程序中,Zomato漏洞分類負責人Prateek Tiwari 告訴我,漏洞出在了Zomato採用的開放授權驗證提供商Hydra身上,為了表示感謝,Hydra還把我加入了新版本的發行致謝名單中。
*參考來源:medium ,clouds編譯,轉載請註明來自FreeBuf.COM