1. 漏洞描述#
SSRF (Server-Side Request Forgery, 服务器端请求伪造) 是一種由攻擊者構造請求,由服務端發起請求的安全漏洞。一般情況下,SSRF 攻擊的目標是外網無法訪問的內部系統 (正因為請求是由服務端發起的,所以服務端能請求到與自身相連而與外網隔離的內部系統)
2. 漏洞原理#
SSRF 漏洞的形成原因大多是因為:
服務端提供了從其他伺服器應用獲取數據的功能且未對目標地址做過濾或限制處理
如:攻擊者操作服務端從指定 URL 地址獲取網站內容
3. 利用方式#
- 對內網或本地進行端口掃描,獲取端口服務的 banner 信息
- 攻擊運行在內網或本地的應用程序
- 對內網 web 應用進行指紋掃描,獲取企業單位內部的資產信息
- 利用 file 協議讀取敏感文件
4. SSRF 支持的協議#
1. http 協議:#
通過 HTTP 協議進行內網端口探測,通過返回的時間和長度來判斷端口是否開放
https://ip/ssrf.php?url=http://127.0.0.1:3389
2. file 協議#
通過 file 協議來讀取文件信息
https://ip/ssrf.php?url=file:///etc/passwd
3. dict 協議#
通過 dict 協議來探測服務信息
https://ip/ssrf.php?url=dict://127.0.0.1:3306
4. gopher 協議#
通過 gopher 協議探測端口,發送 get 請求和攻擊 redis 服務
https://ip/ssrf.php?url=gopher://127.0.0.1:3306
5. 漏洞防御#
- 禁止跳轉
- 過濾返回信息
- 禁止不需要的協議
- 設置 URL 白名單
- 統一錯誤信息