# 如何解析CSRF的攻擊、防御與挖掘
## 目錄
1. [CSRF攻擊概述](#csrf攻擊概述)
2. [CSRF攻擊原理](#csrf攻擊原理)
3. [CSRF攻擊類型](#csrf攻擊類型)
4. [CSRF漏洞挖掘方法](#csrf漏洞挖掘方法)
5. [CSRF防御措施](#csrf防御措施)
6. [實戰案例分析](#實戰案例分析)
7. [總結與思考](#總結與思考)
---
## CSRF攻擊概述
跨站請求偽造(Cross-Site Request Forgery, CSRF)是一種常見的Web安全漏洞,攻擊者通過誘導受害者訪問惡意頁面,利用受害者在目標網站的已認證狀態發起非預期的操作。根據OWASP Top 10,CSRF長期位列高危漏洞之一,可導致用戶數據篡改、資金轉移等嚴重后果。
**典型場景示例**:
- 用戶登錄銀行網站A后未登出
- 訪問惡意網站B,B中隱藏表單自動向A發起轉賬請求
- 由于瀏覽器攜帶A的Cookie,請求被服務器視為合法操作
---
## CSRF攻擊原理
### 核心條件
1. **會話保持**:受害者已登錄目標網站且會話未過期
2. **參數可預測**:請求參數可被攻擊者構造(如無隨機Token)
3. **無二次驗證**:敏感操作未要求二次認證(如短信驗證碼)
### 技術實現
```html
<!-- 惡意頁面中的隱形表單 -->
<form action="https://bank.com/transfer" method="POST">
<input type="hidden" name="amount" value="10000">
<input type="hidden" name="to" value="attacker_account">
</form>
<script>document.forms[0].submit();</script>
- **特征**:利用`<img>`標簽自動發起GET請求
- **示例**:
```html
<img src="https://social.com/delete?id=123" width="0" height="0">
### 2. POST型CSRF
```markdown
- **特征**:通過表單自動提交或AJAX發送POST請求
- **防御繞過**:部分網站僅檢查Referer頭,可通過`<meta>`標簽跳轉繞過
- **觸發條件**:服務器允許任意Origin且接收Content-Type為text/plain
- **POC**:
```javascript
fetch('https://api.example/update', {
method: 'POST',
body: '{"admin":true}',
headers: {'Content-Type':'text/plain'}
})
---
## CSRF漏洞挖掘方法
### 1. 手工測試流程
1. **識別敏感操作**:修改密碼、轉賬、發表內容等
2. **檢查防御機制**:
- 是否存在隨機Token(如`CSRF-Token`)
- 是否驗證Referer頭
- 是否要求二次認證
### 2. 自動化工具
| 工具名稱 | 功能描述 |
|----------------|----------------------------|
| Burp Suite | 通過CSRF PoC生成器快速測試 |
| OWASP ZAP | 自動掃描CSRF漏洞 |
| CSRFTester | 專用于CSRF測試的開源工具 |
### 3. 高級技巧
- **Token分析**:檢查Token是否可預測(如時間戳哈希)
- **CORS測試**:修改Origin頭觀察響應是否放寬限制
- **Referer繞過**:嘗試刪除Referer或使用`data:`協議
---
## CSRF防御措施
### 1. 服務端防御
#### 同步Token模式
```python
# Django示例
from django.middleware.csrf import get_token
def transfer_view(request):
csrf_token = get_token(request) # 生成Token
if request.method == 'POST':
if request.POST.get('csrf_token') != csrf_token:
return HttpResponseForbidden()
// 前端設置自定義Header
fetch('/api/action', {
headers: {
'X-CSRF-TOKEN': getCookie('csrf_token')
}
})
Set-Cookie: sessionid=xxx; SameSite=Strict; Secure
方案 | 優點 | 缺點 |
---|---|---|
同步Token | 安全性高 | 需要前后端協作 |
SameSite Cookie | 瀏覽器原生支持 | 兼容性問題(舊版本IE) |
驗證碼 | 徹底防御CSRF | 用戶體驗下降 |
漏洞點:
- 修改收貨地址接口未校驗Referer
- 使用GET請求處理敏感操作
攻擊Payload:
<a href="https://mall.com/change_address?new_addr=attacker_home">
點擊領取優惠券
</a>
傳播鏈:
1. 惡意帖子包含自動提交的評論表單
2. 用戶訪問后自動轉發到其時間線
3. 指數級擴散
注:本文技術細節僅用于安全研究,未經授權進行測試屬于違法行為。 “`
字數統計:約2050字(含代碼塊和表格)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。