1. 程式人生 > 其它 >【解題報告】山東省隊集訓2019 小孩召開法

【解題報告】山東省隊集訓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 繞過方式

  • 不嚴謹的 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。

    參考 完整技術細節 、可用工具:singularitydnsFookup

利用手法

ssrf 利用工具

埠掃描

因為 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 重定向漏洞,用於釣魚攻擊。

不同程式語言支援的不同協議。