關於SSRF和多種繞過方式

楓子發表於2022-02-10

一、SSRF是什麼?

SSRF(Server-Side Request Forgery,伺服器端請求偽造),漏洞形成的原因主要是伺服器端所提供的介面中包含了所要請求內容的URL引數,並且未對客戶端所傳輸過來的URL引數進行過濾,導致攻擊者可以傳入任意的地址來讓後端伺服器對其發起請求,並返回對該目標地址請求的資料。因此存在SSRF漏洞的伺服器通常被作為跳板機來取得外網或內網其它應用伺服器的資訊。

image.png

圖1 SSRF的利用流程

二、SSRF的危害

主要攻擊型別:

  • 釣魚。

  • 對外網、伺服器所在內網、本地進行埠、資產發現。

  • 讀取本地檔案。

  • 配合其它漏洞攻擊內網其它機器。

舉個例子

【場景一】

如下圖以騙取使用者線上轉賬作為一個比較經典的利用SSRF攻擊流程,可以主要分為以下四個步驟:

(1)攻擊者偽造了一個資金轉帳網站的請求。

(2)將其嵌入到使用者經常訪問,存在SSRF漏洞的站點中。

(3)當訪問者登入該網站並單擊犯罪者建立的釣魚連結時,它最終將重定向到犯罪者的網站。

(4)受害者在並將金額轉移到攻擊者指定的帳戶中。

由於利用SSRF後的釣魚連結偽造程度較高,以URL前部分與正常域名一致,所以對安全知識瞭解不多的使用者是極其容易受此類漏洞製作的釣魚網站的攻擊。

image.png

圖2 利用SSRF的攻擊

【場景二】

這裡我們以‘PIKACHU’滲透測試環境來舉例,演示一下攻擊者是如何利用SSRF漏洞來獲取到伺服器內網其它主機資源的。

假設網站維護人員使用PHP函式不當(使用了危險函式:file_get_contents()、fsockopen()、curl_exec()),導致在站點目錄pikachu/pikachu/vul/ssrf/ssrf_curl.php存在SSRF漏洞利用。

image.png

圖3 “PIKACHU”SSRF實驗

發現引數以URL的格式呼叫了本地的其它資源,可以嘗試呼叫同一網段下其它伺服器的資源。

如圖,利用SSRF成功查詢了同網段172主機下7070埠的資源,導致了內部的資料暴露。

image.png

圖4 訪問內部資料

在通常情況下,對SSRF的防禦措施是對URL特徵引數進行檢測和過濾、設定可訪問URL白名單或使使用者無法控制URL的引數,一但過濾的措施不夠嚴密,就會存在多種Bypass方式。

三、繞過姿勢大全

1.“@”符號繞過

http://www.baidu.com@10.10.10.10與http://10.10.10.10請求是相同的。

該請求得到的內容都是10.10.10.10的內容,此繞過同樣在URL跳轉繞過中適用。

利用的原理:解析URL時的規則問題。

一般情況下利用URL解析導致SSRF過濾被繞過基本上都是因為後端透過不正確的正規表示式對URL進行了解析。這個原理在2017年的Blackhat大會上被提出過,是Orange Thai(蔡政達,現任臺灣資訊保安公司戴夫寇爾(Devcore)高階研究員)在Blackhat(國際黑帽大會)中發表的演講,《A New Era of SSRF - Exploiting URL Parser in Trending Programming Languages! 》該文中介紹了SSRF攻擊的一個新的角度——利用不同程式語言對URL的處理標準來繞過SSRF過濾,來實施攻擊。

image.png

圖5  A New Era of SSRF - Exploiting URL Parser in Trending Programming Languages

下圖展示了CURL請求函式與其他語言解析函式結合使用時,由於差異性造成的漏洞。

image.png

圖6 CURL請求函式與其他解析函式的差異性

從他的文章得知,NodeJS url、Perl URI、Go net/url、PHP parser_url以及Ruby addressable解析函式與cURL libcurl請求函式差異性都可能造成漏洞的產生。

如果上面的解釋並不能很好理解的話,可以看下圖的例項,我們看到上述所述程式語言的解析函式得到的IP是google.com,而CURL請求得到的卻是evil.com:80

image.png

2.點分割符號替換(釣魚郵件常用於繞過檢測)

在瀏覽器中可以使用不同的分割符號來代替域名中的.分割,可以使用。、。、.來代替:

http://www。qq。com

http://www。qq。com

http://www.qq.com

3.本地迴環地址的其他表現形式

127.0.0.1,通常被稱為本地迴環地址(Loopback Address),指本機的虛擬介面,一些表示方法如下(ipv6的地址使用http訪問需要加[]):

http://127.0.0.1 
http://localhost 
http://127.255.255.254 
127.0.0.1 - 127.255.255.254 
http://[::1] 
http://[::ffff:7f00:1] 
http://[::ffff:127.0.0.1] 
http://127.1 
http://127.0.1 
http://0:80

4.IP的進位制轉換(釣魚郵件常用於繞過檢測)

IP地址是一個32位的二進位制數,通常被分割為4個8位二進位制數。通常用“點分十進位制”表示成(a.b.c.d)的形式,所以IP地址的每一段可以用其他進位制來轉換。使用如win系統自帶的計算機(程式設計師模式)就可簡單實現IP地址的進位制轉換。

由於一些系統會直接提取郵件中內嵌的連結進行檢測,而一種此類URL混淆技術採用了URL主機名部分中使用的編碼十六進位制IP地址格式來逃避檢測。

由於IP地址可以用多種格式表示,因此可以在URL中如下所示使用:

  • 點分十進位制IP地址:http://216.58.199.78

  • 八進位制IP地址:http://0330.0072.0307.0116(將每個十進位制數字轉換為八進位制)

  • 十六進位制IP地址:http://0xD83AC74E或者http://0xD8.0x3A.0xC7.0x4E(將每個十進位制數字轉換為十六進位制)

  • 整數或DWORD IP地址:http://3627730766(將十六進位制IP轉換為整數)

5.利用短網址

網上有很多將網址轉換為短網址(短連結)的工具網站,駭客會利用短網址來繞過情報檢測。

四、SSRF的加固

  • 禁止302跳轉,或者每跳轉一次都進行校驗目的地址是否為內網地址或合法地址。

  • 過濾返回資訊,驗證遠端伺服器對請求的返回結果,是否合法。

  • 禁用高危協議,例如:gopher、dict、ftp、file等,只允許http/https。

  • 設定URL白名單或者限制內網IP。

  • 限制請求的埠為http的常用埠,或者根據業務需要開放遠端呼叫服務的埠。

  • catch錯誤資訊,做統一錯誤資訊,避免駭客透過錯誤資訊判斷埠對應的服務。


參考文章:

https://blog.csdn.net/qq_34974749/article/details/112424693

https://blog.csdn.net/blackorbird/article/details/108701342


---- END ----


尾圖1-0531.gif

相關文章