【解題報告】山東省隊集訓2019 小孩召開法
https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery
簡介
原理
SSRF Server Side Request Forgery,服務端請求偽造。
通常出現在網站請求 url 資源的情況下。如果服務端對使用者傳入的 url 未適當檢查,就可以使網站伺服器請求自身敏感資源或者探測內網內其它機器(探針),或利用可以通過 url 觸發的漏洞(利用)。
即埠掃描、與漏洞利用。
實際中的限制
進行埠掃描時,受限於不同程式語言對 url 協議的支援程度與配置情況。詳見文末
例如,php 可禁用 allow_url_fopen ,以禁止對 url wrapper 的支援。
如何攻擊
主要是尋找攻擊面,然後嘗試突破防禦,最後進行利用。
-
攻擊面:留意資料包中的 url 引數。可以結合引數名和引數值根據經驗判斷。
-
突破常見程式碼防禦,見下文。
-
進行利用,見下文。
如何防禦
ssrf 屬於輸入驗證不當,可以從這點進行防禦,設定過濾規則良好的正則表示式。
此外還可以通過禁用某些引數,例如 php 中 allow_url_fopen 等。
常見防禦繞過
-
不嚴謹的 url 檢驗方式。
-
更改其它協議。
-
常見的 本地 ip 替換形式,參考。
# 本地ip 127.0.0.1 的替代形式 127.1 127.0.1 localhost 127.127.127.127 # cdir 0x7f000001 # 16 進位制 2130706433 # 10 進位制 017700000001 # 8 進位制
-
DNS 解析指向本地 ip ,參考。
# 以下域名進行解析都會返回 127.0.0.1 127.0.2.1.nip.io customer1.app.localhost.my.company.127.0.0.1.nip.io spoofed.burpcollaborator.net
-
dns 重繫結。
大致原理:當防禦機制進行檢測時,第一次請求 dns 時,返回正常ip。然後更改 dns 將其重繫結為 127.0.0.1,當代碼中第二次請求時,就會返回 127.0.0.1。
參考 完整技術細節 、可用工具:singularity 、dnsFookup
利用手法
埠掃描
因為 url 格式中有多種協議,可以利用不同的協議進行探測。不同程式語言對 url 協議的支援度不同。
scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
只要不顯式 connect refuse ,那麼就是 開放埠。
下表是利用中常見的一些協議,詳見 這篇文章
http:// #獲取敏感功能網頁(對外不開放),掃描埠
file:// #獲取伺服器本地檔案
dict:// #埠掃描
SFTP:// #埠掃描
LDAP:// #埠掃描
Gopher:// #可以構造其它協議請求 參考 https://zhuanlan.zhihu.com/p/112055947
若要探測版本資訊,需要符合應用層協議,可以參考 nmap 中 banner 指令碼
應用層協議屬於應用程式通訊語法規則,若應用程式收到非法資料包,依據應用程式的處理規則可能進行響應,也可能不會響應。
漏洞利用
因為 ssrf 本質是傳送 url 請求,所以只能利用可以通過 url 觸發的漏洞。例如 Struts2-045
可以通過 url 觸發的漏洞 。雲主機、雲伺服器的 利用方式 。
盲 ssrf ,只能碰運氣,用已知的通過 url 利用的漏洞盲打。
payload https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery
其它
關於 URL 處,可能也存在 url 重定向漏洞,用於釣魚攻擊。
不同程式語言支援的不同協議。