本篇文章主要講解一下跨域攻擊:javascript
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一下試試:
漏洞證實
若是最後爆破成功的接口爲
返回的數據爲
使用下面的poc:
jsonp 填寫回調參數的名字
jsonpcallback 就是回調參數的值
alert 的地方根據須要更改取值
若是能正常取到值,就說明漏洞存在了
漏洞利用:
這裏來看一條請求:
這條請求返回的結果中有手機號(這裏我測試的帳號沒綁定手機),若是咱們想要以CSRF交互式攻擊的方式獲取這個手機號該怎麼辦?
來看看這條請求有callback,而返回結果是否是相似Javascript中的函數?
Javascript原函數定義以下:
這裏是缺乏了函數定義的關鍵詞function和花括號的函數主體部分,只有函數名和函數傳參,聰明人已經想到了,這不就至關因而自定義函數被引用了麼,而中間那段傳參就至關因而一個數組,因此咱們能夠先用JS自定義好這個函數,而後再引用這個請求,天然就能夠獲取到數據了。
這時候咱們能夠來構建一下PoC:
使用正常的帳號(綁定過手機號)來測試下:
其餘漏洞案例參照烏雲:蘇寧易購多接口問題可泄露用戶姓名、地址、訂單商品(jsonp案例)
-------------------------------------------
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跨域問題,以下內容的意思是支持全部域:
爲何會如此?具體流程是這樣的:
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使用的是 :
其餘漏洞案例:
------------------------------------------------
CORS跨域資源獲取
強烈建議先看一下 : 跨域資源共享CORS學習筆記
如上圖中我在請求的時候加上了請求頭 Origin: http://gh0st.cn
,而對應的響應包中出現了 Access-Control-Allow-Origin: http://gh0st.cn
這個響應頭其實就是訪問控制容許,在這裏是容許http://gh0st.cn的請求的,因此http://gh0st.cn是能夠跨域讀取此網址的內容的~在這裏我介紹下Origin
:
Origin
和Referer
很類似,就是將當前的請求參數刪除,僅剩下三元組(協議 主機 端口),標準的瀏覽器,會在每次請求中都帶上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的驗證沒有控制好,對其進行增強便可。