淺談跨域劫持

本篇文章主要講解一下跨域攻擊:javascript

  • Jsonp劫持
  • Flash跨域劫持
  • CORS跨域資源獲取

Jsonp劫持html

Jsonp在2016年就出現了,因爲形成危害大多就是泄露敏感信息,好比用戶信息,token等,遠不如SQL注入,命令執行這些漏洞來的完全,因此老是被人忽視。Jsonp劫持攻擊又稱爲 "JSON Hijacking",攻擊過程相似於csrf,只不過csrf只管發送http請求,可是Json-hijack的目的是獲取敏感數據。java

而Jsonp(JSON with Padding)是json的一種"使用模式",可讓網頁從別的域名(網站)那獲取資料,即跨域讀取數據。jquery

Jsonp劫持具體講解與利用git

知道創宇   : JSONP安全攻防技術程序員

Jsonp劫持漏洞挖掘github

有不少程序員在寫接口的時候都會順手寫個jsonp的接口,能夠先開着burp看一下功能點,看看是否有地方用了jsonpweb

快速尋找Jsonp的接口ajax

開着bp逛一圈,通常有jsonp的數據傳輸會在mimetype中顯示爲script,經過排序能夠快速得找到json

callback的值,就是jsonp回傳回來的函數名

而後只要查看傳輸的數據中是否有敏感信息就能夠了

尋找敏感的Json數據

若是jsonp的接口沒有敏感信息傳輸,json數據包中剛好有的話,咱們能夠嘗試一下程序員是否有開發jsonp的格式,大多數程序員喜歡把jsonp的回傳參數命名爲callback

固然還有其餘的可能,貼一份字典,直接用Intruder Fuzz一下試試:

 
callback=attack cb=attack call=attack jsonp=attack jsonpcallback=attack jsonpcb=attack json=attack jsoncallback=attack jcb=attack
 

漏洞證實

若是最後爆破成功的接口爲

http://www.xxx.com/interface?callback=attack

返回的數據爲

attack({"value":1})

使用下面的poc:

 
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jsonp劫持</title> <script src="js/jquery.min.js"></script> </head> <body> <script type="text/javascript"> $.ajax({ url:"http://xxx.com/interface", dataType:"jsonp", jsonp:"callback", jsonpCallback:"attack", success:function (data) { alert(data.value) } }) </script> </body> </html>
 

jsonp 填寫回調參數的名字

jsonpcallback 就是回調參數的值

alert 的地方根據須要更改取值

若是能正常取到值,就說明漏洞存在了

漏洞利用:

這裏來看一條請求:

這條請求返回的結果中有手機號(這裏我測試的帳號沒綁定手機),若是咱們想要以CSRF交互式攻擊的方式獲取這個手機號該怎麼辦?

來看看這條請求有callback,而返回結果是否是相似Javascript中的函數?

Javascript原函數定義以下:

function funName(){}

這裏是缺乏了函數定義的關鍵詞function和花括號的函數主體部分,只有函數名和函數傳參,聰明人已經想到了,這不就至關因而自定義函數被引用了麼,而中間那段傳參就至關因而一個數組,因此咱們能夠先用JS自定義好這個函數,而後再引用這個請求,天然就能夠獲取到數據了。

這時候咱們能夠來構建一下PoC:

<!-- 引用一段如上請求爲JS --> <script>function jsonp2(data){alert(JSON.stringify(data));}</script> <script src="http://gh0st.cn/user/center?callback=jsonp2"></script>

使用正常的帳號(綁定過手機號)來測試下:

其餘漏洞案例參照烏雲:蘇寧易購多接口問題可泄露用戶姓名、地址、訂單商品(jsonp案例)

-------------------------------------------

Flash跨域劫持

首先分享三個參考資料:

1.還有flash跨域漏洞嗎?

2.flash跨域數據劫持漏洞

3.flash安全總結

儘管flash宣佈再也不維護,可是還有許多視頻站正在使用flash做爲播放器,本爲主要來學習flash跨域讀取漏洞

flash(swf)以宿主域出發(而不是使用域)判斷 是否爲跨域請求。

A站上的flash文件 http://www.a.com/vul.swf,被B站 http://www.b.com/exp.htm 拿去使用。此時 vul.swf 請求a站上的資源是不須要提早獲取 http://www.a.com/crossdomain.xml 判斷是否有權限,反而vul.swf請求b站上的資源卻須要提早判斷是否有權限。這一點與js不一樣。
          Flash跨域比較經典了,在作web目錄資產整理的時候有時候會發現這樣的文件 crossdomain.xml ,文件內容若是是以下的,那麼就存在Flash跨域問題,以下內容的意思是支持全部域:

<?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>

爲何會如此?具體流程是這樣的:

gh0st.cn 有一個SWF文件,這個文件是想要獲取 vulkey.cn 的 userinfo 的返回響應主體,SWF首先會看在 vulkey.cn 的服務器目錄下有沒有 crossdoamin.xml 文件,若是沒有就會訪問不成功,若是有 crossdoamin.xml ,則會看crossdomain.xml 文件的內容裏面是否設置了容許 gh0st.cn 域訪問,若是設置容許了,那麼 gh0st.cn 的SWF文件就能夠成功獲取到內容。因此要使Flash能夠跨域傳輸數據,其關鍵就是crossdomain.xml 文件。

當你發現 crossdomain.xml 文件的內容爲我如上所示的內容,那麼就是存在Flash跨域劫持的。

漏洞案例

在對一個廠商進行測試的時候正好發現了這樣的文件:

在這裏我須要作兩件事:

1.找到一個能獲取敏感信息的接口

2.構建PoC

在這裏敏感的信息接口以我的中心爲例子,PoC使用的是 :

https://github.com/nccgroup/CrossSiteContentHijacking/raw/master/ContentHijacking/objects/ContentHijacking.swf

 

其餘漏洞案例:

wooyun----搜狐焦點旗下搜狐家居可劫持任意帳號

------------------------------------------------

CORS跨域資源獲取

強烈建議先看一下 : 跨域資源共享CORS學習筆記

漏洞案例

如上圖中我在請求的時候加上了請求頭 Origin: http://gh0st.cn,而對應的響應包中出現了 Access-Control-Allow-Origin: http://gh0st.cn 這個響應頭其實就是訪問控制容許,在這裏是容許http://gh0st.cn的請求的,因此http://gh0st.cn是能夠跨域讀取此網址的內容的~在這裏我介紹下Origin

OriginReferer很類似,就是將當前的請求參數刪除,僅剩下三元組(協議 主機 端口),標準的瀏覽器,會在每次請求中都帶上Origin,至少在跨域操做時確定攜帶(例如ajax的操做)。

因此要測試是否存在CORS這個問題就能夠參考我上面的操做手法了。

怎麼利用呢?在這裏我使用了github上的開源項目:https://github.com/nccgroup/CrossSiteContentHijacking,readme.md中有具體的說明,這裏我就不一一講解了,那麼已經確認問題了,那就須要進一步的驗證。

在這裏我找到了一處接口,其響應主體內容是獲取用戶的真實姓名、身份證、手機號等內容:

/daren/author/query (要注意的是這個請求在抓取的時候是POST請求方式,但並無請求正文,通過測試請求正文爲任意內容便可)

響應報文正文內容:

這裏CrossSiteContentHijacking項目我搭建在了本地(127.0.0.1) http://127.0.0.1/CrossSiteContentHijacking/ContentHijackingLoader.html

根據項目所說的操做去進行參數的配置,而後點擊 Retrieve Contents 按鈕:

測試以下,測試結果是能夠跨域讀取的:

 

案例總結

這個問題其實就是對Origin的驗證沒有控制好,對其進行增強便可。

相關文章
相關標籤/搜索