JS敏感資訊洩露:不容忽視的WEB漏洞

wyzsk發表於2020-08-19
作者: 我是小號 · 2015/07/07 11:00

0x00 前言


這段時間jsonp漏洞再一次證明了一個微小的漏洞,經過攻擊者的巧妙而持久的利用,也會對企業和使用者造成巨大的危害。而本文將要介紹的JS洩露敏感資訊問題也是如此,攻擊者不僅可以輕鬆收集使用者手機號,姓名等隱私資訊,更可以藉此攻入企業後臺甚至是getshell。本文將透過一些公開和未公開的漏洞詳細闡述此類漏洞。

0x01 漏洞成因


JavaScript作為一種相當簡單但功能強大的客戶端指令碼語言,本質是一種解釋型語言。所以,其執行原理是邊解釋邊執行。上述特性就決定了JavaScript與一些伺服器指令碼語言(如ASP、PHP)以及編譯型語言(如C、C++)不同,其原始碼可以輕鬆被任何人獲取到。一些粗心的開發者將各式敏感資訊儲存在JavaScript指令碼中,由於JS的特性,攻擊者可以對這些資訊一覽無餘,從而導致對WEB服務和使用者隱私造成不同程度的威脅。

0x02 漏洞分類及利用


根據洩露的內容、利用方式以及帶來的危害不同,大致可以將JS敏感資訊洩露分為以下三類:

1. JS檔案洩露後臺管理敏感路徑及API

此類問題主要存在於後臺登陸頁面以及類似網頁內引入的JS檔案中。在企業滲透測試時如果遇到後臺,在SQL隱碼攻擊或者是路徑爆破都試過,但是仍然無法進入後臺時。根據此類漏洞,說不定登陸頁面下引入的js檔案暴露的後臺路徑會成為突破口。如果某臺的某一個頁面沒有對是否登陸狀態做驗證,攻擊者就可以一次未授權訪問這些暴露的API,實現篡改前臺內容甚至是getshell。 下面這個某大型網際網路服務提供商的房產後臺頁面引入的js檔案洩露後臺介面資訊,就是非常典型的例子:

enter image description here

enter image description here

(資訊洩露源是房產管理登陸後臺頁面下的common.js)

enter image description here

(js檔案中的urlMap物件內容完整的洩露了後臺所有功能實現的API,因此攻擊者無需登陸就可以進行未授權操作)

早在12年gainover便在烏雲漏洞報告平臺上給出了很好的例項: WooYun: PKAV騰訊專場 - 2. 騰訊產品交流平臺的一個js檔案洩漏了一個url之後

2. 頁面內JS洩露http-only保護的cookie

因為此類問題利用方式和造成的危害與即將談論到的第三類問題不同,所以把這類問題單獨拿出來講一講。XSS常見利用手段是劫持使用者cookie並登陸其賬戶,但新增了http-only標記的cookie客戶端指令碼無法讀取,該項技術已經成為減小XSS帶來的危害的重要手段。部分廠商更是因此降低了對XSS的評級。不過千里之堤潰於蟻穴,可愛的程式設計師直接將受http-only保護的cookie寫入頁面,導致透過利用crossdoamin.xml配置不當等漏洞,攻擊者可以輕鬆跨域讀取到受保護的cookie,攻擊者登陸使用者賬戶登入的夢想得以延續。其實在烏雲Zone中WEB前端安全大牛EtherDream早已從漏洞成因檢測等方面撰文進行了闡述。

enter image description here

(知道首頁js內直接輸出受保護的BDUSS)

烏雲上也不乏良好的例項,比如下面這個由於百度知道crossdomain配置不當,再結合知道頁面內的js直接輸出使用者的BDUSS,成功繞過了http-only的保護: WooYun: 我是如何竊取到百度受http-only保護的cookie的(3)(附簡單POC)

3. 頁面內JS以及AJAX請求洩露使用者敏感資訊

經過以往測試經驗的歸納,此類漏洞常見該型別的洩露常見於網站評論功能實現處。其實該型別的漏洞比透過jsonp漏洞收集使用者敏感資訊來的更加快捷容易。由於程式設計師疏忽直接在頁面的js以及AJAX請求返回的內容中輸出參與評論使用者的敏感資訊,導致攻擊者可以輕鬆獲取使用者的手機號,真實姓名,註冊郵箱,住址甚至有可能獲取使用者手機的IMEI,和抽獎和抽中的遊戲禮包號。洩露內容千奇百怪,遇到此類問題時,看著洩露的內容時常會被雷到。從個人的測試經驗來看,涉及的廠商範圍廣泛,從某搜尋服務提供商下的訂票網站、線上掛號網站到某公司旗下的大型遊戲網站都發現過此類漏洞,其他廠商肯定也存在該類問題。不需要SQL注射脫庫,黑產哥透過編寫爬蟲就能大批次的獲取使用者的敏感資訊,利用難度小,危害卻很大。

enter image description here

(某FM類應用評論處洩露匿名評論使用者郵箱,手機號)

enter image description here

(某大型遊戲網站抽獎頁面下洩露獲獎使用者禮包兌換號碼)

enter image description here

(某應用商店獲取評論內容ajax請求中洩露使用者imei和真實ip)

烏雲上也有相關的例子(第一個告訴我們獲取音樂人明星的手機號和QQ號不是夢,第二個告訴我們網上看病,隱私會被人看光光):

WooYun: 百度某站設計缺陷2:獲取匿名使用者手機號漏洞

WooYun: 百度某站一處設計缺陷導致部分使用者手機號與郵箱等資訊洩漏

0x03 漏洞挖掘和檢測


不管是第一、二還是第三種漏洞,他們都有一個共同的檢測方式,那就是檢視原始碼然後在原始碼中搜尋 (Ctrl+F) 常見的洩露點關鍵詞”phone”,”email”,”ip”等等。當然不同情況還是需要不同對待的:

對於第一種洩露形式的檢測相對容易但是可能利用可能相對吃力,在碰到企業後臺或者是類似服務時,檢視頁面也引入的js檔案,在檔案中查詢”.html”,”.do”,”.action”等關鍵詞會幫助快速發覺此類問題,不過對於相對複雜的情況還是需要沉下心將每一個js耐心的看過去。認真,你就贏了。

對於第二、三種洩露,在檢視原始碼時搜尋頁面內指令碼是否存在洩露得同時,可能還需要檢測ajax響應的內容,所以透過Fiddler這類抓包軟體檢視伺服器響應的內容來查詢,也絕對是手動查詢該型別漏洞的最好方式。

漏洞檢測自動化絕對是我們的終極目標,對於該類問題的自動化檢測,白帽子EtherDream的文章(/tips/?id=2834)給了我們不錯的啟發,透過編寫Chrome外掛我們可以新增檢測規則,即上文提到的常見關鍵詞,在正常瀏覽頁面的同時挖掘漏洞,一舉兩得。

0x04 漏洞修復和防範


此類漏洞修復相對容易,在明白了JavaScript的特性以後,不把此類敏感資訊直接儲存進頁面內的js和ajax請求響應內容中就可以解決這類問題。不過根除此類問題之道還是需要程式設計師提高安全意識,從洩露使用者隱私資訊到威脅企業安全,再小的問題也會帶來蝴蝶效應,畢竟安全無小事。

0x05 參考資料


(1] 《WEB之困》,Zalewski,機械工業出版社 (2] 《HttpOnly 隱私嗅探器》,EtherDream,烏雲知識庫

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章