蜜罐居然當著黑客的面做這種動作!
0x00 前言
蜜罐,憑借特有的設備指紋等技術描繪出攻擊者畫像,幫助防守者捕獲大量攻擊者的網絡身份、姓名、電話、照片等真人信息,很大程度地扭轉了攻防不對稱的局面,各種蜜罐的流行讓各位師傅苦不堪言,每次擼站都小心翼翼,稍有不慎,藍隊可能順著網線就來捶你。此篇文章主要分析了蜜罐中使用的jsonp劫持技術的原理。

0x01 同源策略
瀏覽器沙盒、同源策略是瀏覽器中的兩個安全機制。瀏覽器沙盒是一種按照安全策略限制程序行為的執行環境,惡意代碼在沙盒中運行也無法破壞我們的主機,如hw那段時間沸沸揚揚的ChromeRCE,如果受害者沒有關閉沙盒,你只能執行個寂寞。同源策略就是指同協議、同域名、同端口,必須三同才能通信,比如https://www.666.cn下的js想去訪問https://api.666.cn下的資源,瀏覽器就會覺得這是不安全的不會允許該請求。如圖1與圖2所示。

圖1.同源策略說明

圖2.同源策略說明
不同源也意味著不能通信,瀏覽器使用了同源策略之后,好處就是能確保用戶正在查看的頁面確實是來自于正在瀏覽的域,壞處是一些業務就是需要進行跨域操作,同源策略顯然就阻擋了業務需求。這就比較蛋疼了,比如騰訊有很多個事業部,不同事業部使用不同的子域,你使用不同的服務的時候,可能會去獲取其他事業部的數據這樣的話就需要跨域進行訪問了。那么如何進行跨域訪問呢?這就要說到JSONP跨域請求了。
0x02 JSONP劫持原理
JSONP就是為了跨域獲取資源 而產生的一種非官方的技術手段(官方的有 CORS 和 postMessage),它利用的是 script 標簽的 src 屬性不受同源策略影響的特性。該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。
JSONP漏洞利用過程如下:
1.用戶在網站A注冊并登錄,網站A包含了用戶的id,name等信息;
2.用戶通過瀏覽器向網站B發出URL請求;
3.網站B向瀏覽器返回響應頁面響應頁面中注冊了JavaScript的回調函數(如圖3所示)和向網站A請求的script標簽;

圖3.響應的回調函數
4.瀏覽器收到響應,解析js代碼,將回調函數作為參數傳給A網站,A網站接收到請求,解析url,然后將用戶的信息封裝成json格式作為回調函數的值返回給瀏覽器。

圖4.封裝的json格式的用戶信息
5.這里的代碼僅將用戶信息通過alert函數展示出來,攻擊者也可以直接將用戶數據直接上傳至B網站服務器,這樣就完成了對敏感信息的獲取。

圖5.jsonp劫持流程
0x03 JSONP劫持漏洞的危害
JSONP劫持是一種敏感信息泄露的漏洞,經過攻擊者巧妙而持久地利用,會對企業和用戶造成巨大的危害。JSONP 漏洞主要被攻擊者用來在受害者不知不覺中竊取他們的隱私數據,APT 組織采用JSONP進行信息收集和水坑攻擊;詐騙組織可以通過JSONP劫持獲取受害者大量個人信息,之后進行“精準詐騙”(畢竟來個電話能說出你姓名身份證號有幾套房幾輛車有幾個男/女朋友你肯定很慌對吧);而蜜罐通過收集各類公司存在JSONP劫持漏洞的接口,來獲取攻擊者的真實信息;如圖6是github上大佬收集的某商業蜜罐使用的各公司存在JSONP劫持漏洞的接口。

圖6.某商業蜜罐使用JSONP接口
0x04 JSONP劫持與CSRF的相同與不同
相同:
1.需要用戶點擊惡意鏈接。
2.用戶必須登陸該站點,在本地存儲了Cookie。
不同:
1.JSONP劫持必須找到跨站請求資源的接口來實施攻擊,需要傳回回調函數。
2.Jsonp劫持的目的是獲取敏感數據,CSRF的目的根據接口不同目的更加多樣。
0x05 JSONP劫持漏洞的防御
對于JSONP劫持的防御,其實類似于csrf的防御,如下總結了幾個JSONP劫持漏洞的防御方案:
1.嚴格定義Content-Type:application/json
在早期JSON出現時候,大家都沒有合格的編碼習慣。再輸出JSON時,沒有嚴格定義好Content-Type(Content-Type:application/json)然后加上callback這個輸出點沒有進行過濾直接導致了一個典型的XSS漏洞,嚴格定義Content-Type:application/json后,這樣的防御機制導致了瀏覽器不解析惡意插入的XSS代碼(直接訪問提示文件下載)。
2.嚴格安全的實現CSRF方式調用JSON文件:限制Referer、部署一次性Token等,這個就類似csrf的解決方案了。
3.嚴格過濾callback函數名及JSON里數據的輸出。
4.其他一些比較“猥瑣”的方法:如在Callback輸出之前加入其他字符(如:/**/、回車換行)這樣不影響JSON文件加載,又能一定程度預防其他文件格式的輸出。還比如Gmail使用AJAX的方式獲取JSON,通過在輸出JSON之前加入while(1);這樣的代碼來防止JS遠程調用。
0x06 結尾
Jsonp在跨域讀取數據的場景中用起來是十分舒服,但也不能忽視它的安全問題。最后我也想不出什么騷話了,就祝各位師傅早日實現財富自由吧。

參考文獻
[1]黃瑋,崔寶江,胡正名.Web應用程序客戶端惡意代碼技術研究與進展[J].電信科學,2009,25(02):72-79.
[2]陳鐵明. 網絡空間安全實戰基礎[M].人民郵電出版社:, 201802.360.
[3]閆璽璽. 開放網絡環境下敏感數據安全與防泄密關鍵技術研究[D].北京郵電大學,2012.
[4]童瀛,姚煥章,梁劍,王璽罡,周宇.基于跨瀏覽器指紋識別技術的應用研究[J].網絡安全技術與應用,2020(11):64-67.
[5]劉雅輝,張鐵贏,靳小龍,程學旗.大數據時代的個人隱私保護[J].計算機研究與發展,2015,52(01):229-247.
[6]潘志崗.互聯網企業Web系統易忽視漏洞分析[J].信息安全研究,2020,6(02):181-187.
[7]羅武,沈晴霓,吳中海,吳鵬飛,董春濤,夏玉堂.瀏覽器同源策略安全研究綜述[J].軟件學報,2021,32(08):2469-2504.DOI:10.13328/j.cnki.jos.006153.