天天看點

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

我們隻熟悉寫入型csrf,像修改使用者資訊……今天介紹一下讀取型CSRF,使用DoraBox這個靶場來示範一波!

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

位址:https://github.com/Acmesec/DoraBox

JSONP劫持

現在所有支援JavaScript的浏覽器都使用同源政策,才誕生了JSONP(JSON with padding),遠端調用json檔案來實作資料傳遞的技術,它的特點是可以跨域讀取資料。

以DoraBox中JSONP劫持子產品為例子:

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

觀察代碼:

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

如果callback為空,則輸出json格式的info;

如果callback值不為空,則對這個值做一個過濾後輸出json格式的info。

構造如下jsonp.html:

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

打開連結,擷取到json值,即擷取到使用者敏感資訊。

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

修複建議

對refer進行限制;

打亂響應主體内容;

使用token;

CORS跨域資源讀取

CORS允許浏覽器向跨域伺服器發出XmlHttpRequest請求,CORS與JSONP的差別:是JSONP的更新版,JSONP隻能通過get方式請求,CORS支援get和post請求。

CORS跨域原理:向header中注入Access-Control-Allow-Origin服務端過判斷請求頭中的參數是否被允許的域來決定請求源是否有權限擷取資料。

以DoraBox中CORS跨域資源讀取為例子:

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

檢視響應頭:

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

*表示所有的請求源的所有形式的請求,都被允許通路資料,這樣也就造成了一個跨域讀取敏感資訊的漏洞。

構造如下cors.html,建立XMLHttpRequest對象為xhr,通過ajax的onreadystatechange判斷請求狀态,如果請求已完成,且相應已就緒,則彈出傳回文本。

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

通路cors.html,觸發cors漏洞,如下:

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

修複建議:

加強對access-control-allow-orign的控制;

Flash跨域劫持

假設a.com有一個SWF檔案,這個檔案是想要擷取 b.com 的 userinfo 的傳回響應主體,SWF首先會看在 b.com 的伺服器目錄下有沒有 crossdomain.xml 檔案,如果沒有就會通路不成功,如果有 crossdomain.xml ,則會看crossdomain.xml 檔案的内容裡面是否設定了允許 a.com 域通路,如果設定允許了,那麼 a.com 的SWF檔案就可以成功擷取到内容。是以要使Flash可以跨域傳輸資料。

其中,b.com下的crossdomain.xml檔案内容如果是如下的,那麼就存在Flash跨域問題。

php csrf jsonp,讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)

修複建議:

加強對access-access-from的控制;

到這裡,大家是不是對讀取型CSRF(JSONP劫持、CORS跨域資源讀取、Flash跨域劫持)有更深的了解呢?請各位師傅多多指教!