歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

印尼電商平臺Tokopedia的反射型XSS漏洞

來源:本站整理 作者:佚名 時間:2019-07-03 TAG: 我要投稿

本文分享的Writeup是關于印尼電商平臺Tokopedia的火車票票務系統反射型XSS漏洞(Reflected XSS),作者在測試該系統時,通過參數分離構造繞過了系統的XSS過濾防護機制,實現了反射型XSS,獲得了3,000,000印尼盾(IDR)的賞金。
漏洞說明
對于一般的網站系統而言,通常情況下其XSS過濾防護機制,當GET請求中包含有左尖和右尖括號時( ),一般就會對該GET請求進行編碼。本文中,作者通過把分隔成了兩部份,巧妙地繞過了目標系統的XSS過濾機制。
早在2018年5月,我就在Tokopedia火車票票務系統(Tokopedia Train Ticket)中發現了一個反射型XSS漏洞,當時來看這只是一個簡單的XSS,并且我把漏洞上報給Tokopedia后,他們告訴我這是一個重復報,之后我就放在一邊再沒檢查過了。
但今年3月,我在翻舊郵件的過程中偶然看到了該漏洞,好奇心驅使,我重新進行了測試,發現該漏洞依然存在,從未修復。
標簽過濾
如果在Tokopedia火車票票務系統中查票時,會被執行一個重定向跳轉,會被跳轉到以下鏈接:
https://tiket.tokopedia.com/kereta-api/search/Jakarta-Gambir-GMR/Bandung-Bandung-BD?adult=1&infant=0&trip=departure&dep_date=16-09-2019&ori=GMR&dest=BD
請求中所有的GET參數都會被存儲在一個名為dataJs.query的JS變量中。

由于上下文環境為JS,所以如果要想觸發XSS必須實現實現以下方法之一:
(1)突破JS環境限制,在其中一個GET參數中插入alert(1) ,這樣構造的目的在于使HTML解析用結束一個標簽語境,導致JS運行出錯,同時執行攻擊者控制的腳本alert(1);
(2)突破JS變量dataJs.query的限制,在其中一個GET參數中插入”}; alert(1); //,這樣也會使JS解析提前關閉變量語境,同時執行我們控制的腳本alert(1),并在//作用下忽略其它語義。
在我第一次漏洞上報中我就用了第(1)種方法。由于目標系統不會把一些危險字符編碼,如不會把
發現端倪
但后來我發現了個異常行為,ori和dest參數值的編碼機制和其它參數存在不同,如以下實例中,其它參數值的“都會被編碼為%22,而ori和dest不會:

之后,我又ori和dest嘗試了>,發現它們都未對>做編碼:

好吧,那我嘗試同時在dest中插入呢?最后發現,>

做了編碼:

很顯然,目標系統未對參數ori和dest進行完全過濾,只對其中的樣式串實現了過濾。
繞過過濾
到了這步,我一開始覺得沒什么可利用的了。但是,我通過谷歌搜索發現了一個經典的XSS漏洞利用庫 – https://github.com/s0md3v/AwesomeXSS#awesome-tips–tricks,其中提到:可以利用//來代替>關閉一個標簽(You can use // to close a tag instead of >)。
試試看:

這樣之后,瀏覽器拋出了“Uncaught SyntaxError: Invalid or unexpected token”的錯誤,看似有點進步了,再來試試這樣的:

還是不行,JS解析不把它識別為關閉標簽,我又重新研究了上述AwesomeXSS庫中的”Bypass tag blacklisting”介紹部份的應用,從上述分析來看,同時在一個參數中插入是會經編碼過濾的,但如果我們把分散成在ori和dest兩個參數中來實現會如何?這里也就是樣式,那么能繞過嗎?

[1] [2]  下一頁

【聲明】:黑吧安全網(http://www.zjtpzs.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        神秘东方电子游艺