網站如何防止CSRF攻擊
VSole2021-11-12 07:20:53
### CSRF(跨站請求偽造)概述 – Cross-site request forgery 簡稱為“CSRF”,在CSRF的攻擊場景 中攻擊者會偽造一個請求(這個請求一般是一個鏈接),然后欺騙目標 用戶進行點擊,用戶一旦點擊了這個請求,整個攻擊就完成了。所以CSRF 攻擊也稱為"one click"攻擊。很多人搞不清楚CSRF的概念,甚至有時候 會將其和XSS混淆,更有甚者會將其和越權問題混為一談,這都是對原理沒 搞清楚導致的。 – CSRF與XSS的區別:CSRF是借用戶的權限完成攻擊,攻擊者并沒有拿到用戶的權限,而XSS是直接盜取到了用戶的權限,然后實施破壞。 – 因此,網站如果要防止CSRF攻擊,則需要對敏感信息的操作實施對 應的安全措施,防止這些操作出現被偽造的情況,從而導致CSRF。比如: 1. 對敏感信息的操作增加安全的token; 2. 對敏感信息的操作增加安全的驗證碼; 3. 對敏感信息的操作實施安全的邏輯流程,比如修改密碼時需要 先校驗舊密碼等。
CSRF的實現過程:

接下來實際在靶場當中實踐一下:
CSRF(get)
1.先點一下提示

找到有哪些用戶
2.登錄vince

3.修改個人信息,burp抓包

4.生成csrf poc

copy html放到網站目錄下(先建txt,粘貼后改后綴為html)

5.登錄kevin用戶,然后訪問csrf poc

訪問后點擊,發現kevin用戶信息已經被更改

到這就實際體驗了文章開頭的csrf 流程
順帶提一下滲透測試中兩個常見的名詞:
POC:全稱 ' Proof of Concept ',中文 ' 概念驗證 ' ,常指一段漏洞證明的代碼。 EXP:全稱 ' Exploit ',中文 ' 利用 ',指利用系統漏洞進行攻擊的動作。
CSRF(post)
先對比著看一下get和post的數據包區別:
get:

post:
可以看到:
GET請求參數是通過URL傳遞的,多個參數以&連接,POST請求放在request body中。
1.接著上面抓到的post數據包,生成csrf poc

2.copy html放到網站目錄下

3.登錄lili用戶

初始用戶信息

4.不退出用戶,直接訪問csrf poc

點擊后發現用戶信息已被修改

CSRF(token)
先抓包看看數據包有何不同

試試csrf能否實現
1.登錄lili

原始用戶信息

2.訪問csrf poc



不能實現csrf,增加了token驗證機制,無法繞過
總結:
CSRF廣義上存在于任何增刪改操作中,根據經驗常見的有: 1)冒充身份:訂閱/關注/轉發/投票操作,刪除文件,更改配置等 2)帳戶接管:密碼修改,郵箱綁定,第三方帳戶關聯 3)其他:登錄/注冊/注銷/注冊 4)安全設計原則:CSRF登錄后令牌未更新、登出后未注銷等
漏洞防御:
1) 驗證header字段
常見的是Referer和Origin,Referer容易繞過,且會包含有一些敏感信息,可能會侵犯用戶的隱私,而Origin字段代表最初請求,更建議使用。
2) Token令牌機制
當前最成熟的防御機制,但若存在驗證邏輯及配置問題則存在繞過風險。Token的生成機制通常和session標識符掛鉤,將用戶的token與session標識符在服務端進行匹配當下已經有很多開源庫和中間件都可以實現token生成。
3) 驗證自定義header
如基于cookie的csrf保護,驗證cookie中的某些值和參數必須相等
VSole
網絡安全專家