天天看點

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

文章目錄

  • 前言
  • 一、SSRF原理
  • 二、SSRF漏洞利用
    • 1、SSRF漏洞挖掘
    • 2、SSRF危害
    • 3、SSRF漏洞相關php協定
      • 3.1 file_get_contents() :
      • 3.2 fsockopen():
      • 3.3 curl_exec():
    • 4、SSRF漏洞可利用的協定
      • 4.1 http/s
      • 4.2 file協定
      • 4.3 dict協定
      • 4.4 ftp協定
      • 4.5 gopher協定
  • 三、SSRF繞過
  • 四、SSRF防禦

前言

隻要稍加不防範,網站就有可能存在SSRF漏洞!

學習連結:SSRF漏洞講解

一、SSRF原理

  • SSRF(Server-side Request Forgery):服務端請求僞造。SSRF的形成大多是由于服務端提供了從其他伺服器擷取資料的功能,但是沒有對目标位址進行過濾和限制。比如:從指定的url位址擷取網絡文本内容,加載指定位址的圖檔,或者下載下傳等。
  • 攻擊的目标是從外網無法通路的内網系統,以服務端為跳闆,攻擊内網系統。
  • 常利用的協定:http/s,dict,file,gopher,ftp等
  • 相關 PHP函數: file_get_contents(),fsockopen(),curl_exec()
  • 攻擊的内網應用:redius、mysql、smtp等
  • ssrf利⽤存在缺陷的web應用作為代理,攻擊遠端和本地的伺服器。

二、SSRF漏洞利用

1、SSRF漏洞挖掘

從Web功能上尋找(那些需要向伺服器發起請求的地方):

圖檔檢視、下載下傳
檔案加載、下載下傳
轉碼服務:通過url位址,把原網頁的内容優化為适合手機螢幕浏覽
圖檔、文章收藏功能
線上翻譯
通過url位址分享網頁内容
未公開的API實作及調用URL的功能等
           

從URL關鍵字中尋找:Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain等

漏洞探測工具:burpsite等

2、SSRF危害

1.對外網、伺服器所在内網、本地進行端口掃描,擷取一些服務的banner資訊。
2.攻擊運作在内網或者本地的應用程式。
3.對内網的web應用進行指紋識别(通過請求預設檔案得到特定的指紋),對資産資訊進行識别。
4.利用file協定讀取本地檔案。
5.攻擊内外網的web應用,主要是使用HTTP GET請求就可以實作的攻擊等。
           

3、SSRF漏洞相關php協定

3.1 file_get_contents() :

file_get_contents():把整個檔案讀入一個字元串中。
           

該函數是用于把檔案的内容讀入到一個字元串中的首選方法。如果伺服器作業系統支援,還會使用記憶體映射技術來增強性能。

文法:file_get_contents(path,include_path,context,start,max_length)

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦
SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦
SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

3.2 fsockopen():

開啟這個函數需要php.ini中的

allow_url_fopen = On

  • fsockopen是用于打開網絡的 Socket 連結。
  • 文法:fsockopen($host, $port, $errno, $errstr, $timeout)
  • 在使用本函數之後會傳回檔案指針,供檔案函數使用,包括 fgets()、fgetss()、fputs()、fclose() 與 feof()。參數 errno 及 errstr 也是可省略的,主要當做錯誤處理使用。

3.3 curl_exec():

curl_exec : 執行一個cURL會話

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

4、SSRF漏洞可利用的協定

4.1 http/s

靶場:pikachu

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

加載圖檔

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦
SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

檢視虛拟機中的檔案

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

探測端口3306

配置權限(否則會出現

'xxx' is not allowed to connect to this MySQL server1

的提示)

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦
SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

以上,我們可以利用http協定對内網進行探測,探測整個内網的存活ip,和端口。

可利用burpsite或者腳本進行快速探測,由于回顯的不同,腳本就需要按照回顯的特征來寫,那種回顯是存在,哪種回顯是不存在這樣的ip或端口。

一般私網位址的ip位址都處于10.0.0.0、172.16.0.0、192.168.0.0這樣的網段。

4.2 file協定

file協定可用于讀取本地檔案
           

通路虛拟機本地檔案

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

4.3 dict協定

dict協定與http協定可用來探測内網的主機存活與端口開放情況
SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

4.4 ftp協定

ftp(file transform protocol):檔案傳輸協定

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

這裡沒有輸入使用者和密碼,是以不顯示ftp連接配接的位址下的檔案

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

使用ftp協定檢視虛拟機裡的檔案

ftp服務的安裝可以參考這篇文章

ftp服務的搭建

這裡我設定的ftp的站點就是虛拟機的ip位址

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦
SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

4.5 gopher協定

  • Gopher是Internet上一個非常有名的資訊查找系統,它将Internet上的檔案組織成某種索引,很友善地将使用者從Internet的一處帶到另一處。在WWW出現之前,Gopher是Internet上最主要的資訊檢索工具,Gopher站點也是最主要的站點,使用tcp70端口。但在WWW出現後,Gopher失去了昔日的輝煌。現在它基本過時,人們很少再使用它;
gopher協定支援發出GET、POST請求:可以先截獲get請求包和post請求包,在構成符合gopher協定的請求。gopher協定是ssrf利用中最強大的協定

gopher在各個程式設計語言中的限制:

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

–wite-curlwrappers:使用curl工具打開url資料流

協定格式

URL:gopher://<host>:<port>/<gopher-path>_後接TCP資料流
           
  • 使用gopher協定時,回車換行輸入%0d%0a,空格輸入%20,問号輸入%3f,結束符%0d%0a
  • SSRF漏洞在真實環境常常去攻擊redis、FastCGI等服務。

(我看網上都是在使用Linux作業系統作攻擊實驗的。是以以後有時間再研究清楚這個協定吧)

三、SSRF繞過

@繞過

從@後面開始解析。

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

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

點分割号繞過

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

封閉字元符号

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

url十六進制轉換

SSRF漏洞前言一、SSRF原理二、SSRF漏洞利用三、SSRF繞過四、SSRF防禦

進制轉換繞過

有些ssrf防護措施,會對輸入的URL做正則比對,限制内網位址,比如192、127這些位址,但如果轉換成其他格式的ip位址,可能會繞過

利用30X重定向

可以使用重定向來讓伺服器通路目标位址,可用于重定向的HTTP狀态碼:300、301、302、303、305、307、308。

需要一個vps,把302轉換的代碼部署到vps上,然後去通路,就可跳轉到内網中

DNS解析

配置域名的DNS解析到指定的目标位址

DNS重綁定

在網頁浏覽過程中,使用者在位址欄中輸入包含域名的網址。浏覽器通過DNS伺服器将域名解析為IP位址,然後向對應的IP位址請求資源,最後展現給使用者。而對于域名所有者,他可以設定域名所對應的IP位址。當使用者第一次通路,解析域名擷取一個IP位址;然後,域名持有者修改對應的IP位址;使用者再次請求該域名,就會擷取一個新的IP位址。對于浏覽器來說,整個過程通路的都是同一域名,是以認為是安全的。這就造成了DNS Rebinding攻擊。

簡而言之:當我們發起域名解析請求的時候,第一次通路會傳回一個ip位址A,但是當我們發起第二次域名解析請求的時候,卻會傳回一個不同于A的ip位址B。可以通過DNS重綁定攻擊繞過同源政策,進而攻擊内網的其他裝置。

DNS重綁定

協定繞過

http/s,file,ftp,dict,gopher等協定繞過

四、SSRF防禦

SSRF漏洞的防禦主要是保證使用者請求的合法性、伺服器行為的合規性兩個方面。

1、禁止高危協定。限制請求端口隻能為web端口,隻允許通路HTTP和HTTPS的請求;

2、過濾傳回的資訊,驗證遠端伺服器對請求的傳回結果是否合法;

3、禁止不常使用的端口

4、限制不能通路内網的IP,防止對内網進行攻擊;

5、禁止302跳轉,或者每跳轉一次都進行校驗目的位址是否為内網位址或合法位址。

6、對于DNS重綁定,使用DNS緩存或者Host白名單。

7、統一錯誤資訊,避免黑客通過錯誤資訊判斷端口對應的服務

關于SSRF還有很多需要學習的地方,這裡我隻是簡單地了解了一下它的基本原理。具體的以後再做探讨。

繼續閱讀