CSRF
跨站請求偽造(Cross-Site Request Forgery)
CSRF經常配合XSS一起進行攻擊!(同XSS類似,都屬于跨站攻擊,不攻擊服務器端而攻擊正常訪問網站的用戶!)
XSS利用站點內的信任用戶,CSRF偽造成受信任用戶!

CSRF原理
攻擊者偽造目標用戶的身份,以目標用戶的名義執行非法操作!
如:發送郵件、發送消息、盜取目標用戶的賬戶進行購買,轉賬等威脅目標用戶的財產安全!
注意:具體實例,請參考之前的文章!
CSRF的利用
之前文章的利用手段截圖:


CSRF的防御
- 使用POST請求代替GET請求
CSRF一般觸發的時候,都是通過用戶點擊鏈接,比如美女圖片,吸引眼球的信息,這種請求方式都是GET請求,所以使用POST在一定程度上會避免通過GET方式請求CSRF!
- HTTP Referer
HTTP頭信息中,包含Referer字段,記錄了請求的來源地址(上一個訪問地址),通過檢查此字段,可以了解來源是站內還是外部的惡意連接!
- 驗證碼
每次請求,都需要填寫驗證碼!(盡管也可以繞過驗證碼,今后講解業務安全時,會提到如果繞過驗證碼漏洞!)
注意:驗證碼,用戶體驗不好!
- Token(請求令牌!)
CSRF之所以能成功的重要原因是:攻擊者能夠預知和偽造請求中的關鍵字段,因此,如果在請求中放入攻擊者不能偽造的信息就能起到防范CSRF的作用!
在HTTP請求中以參數的形式加入一個隨機產生的請求令牌(Token),并在服務器端進行驗證。如果請求中沒有Token或者Token內容不正確,則拒絕該請求!
Cookie Token:Token值放進Cookie中(所有表單都包含同一個偽隨機值)
把Token放入HTTP頭部自定義的屬性中
一次性Token:每一個表單包含一個不同的偽隨機值!
SSRF
SSRF:Server-Side Request Forgery(服務端請求偽造)
攻擊者利用SSRF漏洞通過服務器端發起偽造請求!
一般情況下,SSRF攻擊的目標是外網無法訪問的內部系統!
(由于請求是服務器端發起的,所以服務器能請求到與自身相連而與外網隔絕的內網!)
SSRF漏洞形成原因
服務器提供了從其他服務器應用獲取數據的功能,并且對目標地址沒有做嚴格的過濾!
SSRF漏洞利用
- 通過服務器獲取內網主機、本地端口掃描、獲取一些服務的banner信息!
banner:會獲取到一些敏感信息!
banner 信息中,可以獲取到軟件開發商、軟件名稱、服務類型、版本號等。
而版本號有時候就會存在公開的 CVE 問題,可以直接進行利用。
banner 信息獲取的基礎是在和目標建立鏈接后的,只有建立的鏈接,才可以獲取到相應的 banner 信息,
當目標對 banner 信息進行隱藏或者配置了禁止讀取時,這時的 banner 則獲取不到!
- 對內網的應用程序進行攻擊,如redis,JBoss等!
- 對內網的Web應用進行指紋識別,識別內部的資產信息
- 攻擊內網程序,造成緩沖區溢出。
- 利用file偽協議讀取文件
舉例:
端口探測:
http://www.tony.com/index.php?url=http://127.0.0.1:3306
讀取文件:
http://www.tony.com/index.php?url=file:///etc/passwd
內網的JBoss攻擊:
http://www.tony.com/index.php?url=http://192.168.1.88:8080
http://www.tony.com/index.php?url=http://192.168.1.88:8080/jmx-console/
// 發現存在jmx控制臺未授權訪問漏洞
通過jboss.deployment接口部署Web木馬應用
獲取Webshell
執行命令
SSRF防御
- 過濾請求協議,只允許http或https的協議
- 限制訪問的IP地址
- 限制訪問的端口
- 設置統一的錯誤處理頁面,防止信息泄漏!