SSRF

0x00原理

一般的請(qǐng)求:客戶端發(fā)起請(qǐng)求,服務(wù)器響應(yīng)。

另外一種請(qǐng)求:客戶端發(fā)起請(qǐng)求(向服務(wù)端提供一個(gè)URL),服務(wù)端向客戶端提供的URL發(fā)起請(qǐng)求,然后把獲得的響應(yīng)內(nèi)容返回給客戶端。如:


服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒有對(duì)目標(biāo)地址做過濾與限制。比如從指定URL地址獲取網(wǎng)頁(yè)文本內(nèi)容,加載指定地址的圖片,下載等等,就可能存在這種服務(wù)端請(qǐng)求偽造的缺陷。Google,Facebook,Adobe,baidu,tencent等知名公司都被發(fā)現(xiàn)過這種漏洞。

0x01危害

攻擊者利用ssrf可以實(shí)現(xiàn)的攻擊主要有5種:

1.可以對(duì)外網(wǎng)、服務(wù)器所在內(nèi)網(wǎng)、本地進(jìn)行端口掃描,獲取一些服務(wù)的banner信息;

2.攻擊運(yùn)行在內(nèi)網(wǎng)或本地的應(yīng)用程序(比如溢出);

3.對(duì)內(nèi)網(wǎng)web應(yīng)用進(jìn)行指紋識(shí)別,通過訪問默認(rèn)文件實(shí)現(xiàn);

4.攻擊內(nèi)外網(wǎng)的web應(yīng)用,主要是使用get參數(shù)就可以實(shí)現(xiàn)的攻擊(比如struts2,sqli等);

5.利用file協(xié)議讀取本地文件等。


常用的利用思路:

內(nèi)網(wǎng)探測(cè)->應(yīng)用識(shí)別->攻擊Payload->Payload Result

1.內(nèi)網(wǎng)探測(cè): 內(nèi)網(wǎng)主機(jī)信息收集

2.應(yīng)用識(shí)別: 主機(jī)應(yīng)用識(shí)別(可以通過Barner和應(yīng)用指紋進(jìn)行識(shí)別)

3.攻擊Payload: 根據(jù)應(yīng)用識(shí)別的應(yīng)用,加載不同的攻擊Payload(最常用莫屬于Struts2)

4.Payload Result: 返回相應(yīng)Payload的執(zhí)行信息


為什么通過http協(xié)議訪問可以同其它協(xié)議的端口進(jìn)行數(shù)據(jù)交互呢?

跨協(xié)議通信技術(shù)利用:http://www.freebuf.com/articles/web/19622.html

0x02漏洞挖掘

一切從客戶端提交的含有URL的參數(shù)都可能存在SSRF漏洞。

常見存在漏洞的場(chǎng)景如下:

1、分享功能:通過URL地址分享網(wǎng)頁(yè)內(nèi)容。

2、在線轉(zhuǎn)碼服務(wù):把網(wǎng)頁(yè)內(nèi)容(URL)在線轉(zhuǎn)碼為適合手機(jī)瀏覽的樣式。

3、在線翻譯:通過URL地址翻譯對(duì)應(yīng)文本內(nèi)容。

4、遠(yuǎn)程圖片加載、下載:通過URL加載圖片或者下載圖片。如:http://www.example.com/picture?url=http://image.example.com/1.jpg

5、圖片、文章收藏功能:類似于場(chǎng)景1,通過URL收藏到在線收藏夾

6、未公開的api實(shí)現(xiàn)以及其他調(diào)用URL的功能:此處類似的功能有360提供的網(wǎng)站評(píng)分,以及有些網(wǎng)站通過api獲取遠(yuǎn)程地址xml文件來加載內(nèi)容。

常見的存在漏洞的參數(shù):

share、wap、url、link、、src、source、target、u、3g、display、sourceURl、imageURL、domain...

可以結(jié)合google語(yǔ)法及上述關(guān)鍵字進(jìn)行搜索驗(yàn)證。

常見的容易出問題的函數(shù):

PHP : file_get_contents()、fsockopen()、curl_exec()

JAVA : Request類,URL類的openStream,HttpClient類,URLConnection和HttpURLConnection類

漏洞驗(yàn)證

1、排除法

確認(rèn)目標(biāo)參數(shù)中的URL請(qǐng)求是從客戶端發(fā)起還是從服務(wù)端發(fā)起的。

如:http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png

排除法一:

你可以直接右鍵圖片,在新窗口打開圖片,如果是瀏覽器上URL地址欄是http://www.baidu.com/img/bd_logo1.png,說明不存在SSRF漏洞。

排除法二:

你可以使用burpsuite等抓包工具來判斷是否不是SSRF,首先SSRF是由服務(wù)端發(fā)起的請(qǐng)求,因此在加載圖片的時(shí)候,是由服務(wù)端發(fā)起的,所以在我們本地瀏覽器的請(qǐng)求中就不應(yīng)該存在圖片的請(qǐng)求,在此例子中,如果刷新當(dāng)前頁(yè)面,有如下請(qǐng)求,則可判斷不是SSRF。(前提設(shè)置burpsuite截?cái)鄨D片的請(qǐng)求,默認(rèn)是放行的)


2、實(shí)例驗(yàn)證

首先要進(jìn)行信息收集,以獲得目標(biāo)內(nèi)網(wǎng)地址,收集途徑:

a.敏感信息泄露

b.漏洞平臺(tái)歷史信息中存在目標(biāo)內(nèi)網(wǎng)信息

c.通過二級(jí)域名等暴力猜解工具模糊猜測(cè)內(nèi)網(wǎng)地址

收集到內(nèi)網(wǎng)地址后,就可以進(jìn)行實(shí)例驗(yàn)證,是否可以請(qǐng)求內(nèi)網(wǎng)地址、端口、資源等。

批量驗(yàn)證某個(gè)ip地址段端口開放情況可以用burp的爆破功能或者自己寫py腳本。

0x03繞過方法

下文出現(xiàn)的192.168.0.1,10.0.0.1全部為服務(wù)器端的內(nèi)網(wǎng)地址。

1、更改IP地址寫法

一些開發(fā)者會(huì)通過對(duì)傳過來的URL參數(shù)進(jìn)行正則匹配的方式來過濾掉內(nèi)網(wǎng)IP,如采用如下正則表達(dá)式:

^10(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){3}$

^172\.([1][6-9]|[2]\d|3[01])(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

^192\.168(\.([2][0-4]\d|[2][5][0-5]|[01]?\d?\d)){2}$

對(duì)于這種過濾我們可以采用改編IP的寫法的方式進(jìn)行繞過,例如192.168.0.1這個(gè)IP地址我們可以改寫成:

(1)、8進(jìn)制格式:0300.0250.0.1

(2)、16進(jìn)制格式:0xC0.0xA8.0.1

(3)、10進(jìn)制整數(shù)格式:3232235521

(4)、16進(jìn)制整數(shù)格式:0xC0A80001

還有一種特殊的省略模式,例如10.0.0.1這個(gè)IP可以寫成10.1

2、利用解析URL所出現(xiàn)的問題

在某些情況下,后端程序可能會(huì)對(duì)訪問的URL進(jìn)行解析,對(duì)解析出來的host地址進(jìn)行過濾。這時(shí)候可能會(huì)出現(xiàn)對(duì)URL參數(shù)解析不當(dāng),導(dǎo)致可以繞過過濾。

http://www.baidu.com@192.168.0.1/

當(dāng)后端程序通過不正確的正則表達(dá)式(比如將http之后到com為止的字符內(nèi)容,也就是www.baidu.com,認(rèn)為是訪問請(qǐng)求的host地址時(shí))對(duì)上述URL的內(nèi)容進(jìn)行解析的時(shí)候,很有可能會(huì)認(rèn)為訪問URL的host為www.baidu.com,而實(shí)際上這個(gè)URL所請(qǐng)求的內(nèi)容都是192.168.0.1上的內(nèi)容。

3、利用302跳轉(zhuǎn)

如果后端服務(wù)器在接收到參數(shù)后,正確的解析了URL的host,并且進(jìn)行了過濾,我們這個(gè)時(shí)候可以使用302跳轉(zhuǎn)的方式來進(jìn)行繞過。

(1)、在網(wǎng)絡(luò)上存在一個(gè)很神奇的服務(wù),http://xip.io當(dāng)我們?cè)L問這個(gè)網(wǎng)站的子域名的時(shí)候,例如192.168.0.1.xip.io,就會(huì)自動(dòng)重定向到192.168.0.1。

(2)、由于上述方法中包含了192.168.0.1這種內(nèi)網(wǎng)IP地址,可能會(huì)被正則表達(dá)式過濾掉,我們可以通過短地址的方式來繞過。經(jīng)過測(cè)試發(fā)現(xiàn)新浪,百度的短地址服務(wù)并不支持IP模式,所以這里使用的是http://tinyurl.com所提供的短地址服務(wù),如下圖所示:

同樣的,我們也可以自行寫一個(gè)跳轉(zhuǎn)的服務(wù)接口來實(shí)現(xiàn)類似的功能。

4、通過各種非HTTP協(xié)議:

如果服務(wù)器端程序?qū)υL問URL所采用的協(xié)議進(jìn)行驗(yàn)證的話,可以通過非HTTP協(xié)議來進(jìn)行利用。

(1)、GOPHER協(xié)議:通過GOPHER我們?cè)谝粋€(gè)URL參數(shù)中構(gòu)造Post或者Get請(qǐng)求,從而達(dá)到攻擊內(nèi)網(wǎng)應(yīng)用的目的。例如我們可以使用GOPHER協(xié)議對(duì)與內(nèi)網(wǎng)的Redis服務(wù)進(jìn)行攻擊,可以使用如下的URL:

(2)、File協(xié)議:File協(xié)議主要用于訪問本地計(jì)算機(jī)中的文件,我們可以通過類似file:///文件路徑這種格式來訪問計(jì)算機(jī)本地文件。使用file協(xié)議可以避免服務(wù)端程序?qū)τ谒L問的IP進(jìn)行的過濾。例如我們可以通過file:///d:/1.txt 來訪問D盤中1.txt的內(nèi)容

(3)、DICT協(xié)議

5、DNS Rebinding

對(duì)于常見的IP限制,后端服務(wù)器可能通過下圖的流程進(jìn)行IP過濾:

對(duì)于用戶請(qǐng)求的URL參數(shù),首先服務(wù)器端會(huì)對(duì)其進(jìn)行DNS解析,然后對(duì)于DNS服務(wù)器返回的IP地址進(jìn)行判斷,如果在黑名單中,就pass掉。

但是在整個(gè)過程中,第一次去請(qǐng)求DNS服務(wù)進(jìn)行域名解析到第二次服務(wù)端去請(qǐng)求URL之間存在一個(gè)時(shí)間查,利用這個(gè)時(shí)間差,我們可以進(jìn)行DNS 重綁定攻擊。

要完成DNS重綁定攻擊,我們需要一個(gè)域名,并且將這個(gè)域名的解析指定到我們自己的DNS Server,在我們的可控的DNS Server上編寫解析服務(wù),設(shè)置TTL時(shí)間為0。這樣就可以進(jìn)行攻擊了,完整的攻擊流程為:

(1)、服務(wù)器端獲得URL參數(shù),進(jìn)行第一次DNS解析,獲得了一個(gè)非內(nèi)網(wǎng)的IP

(2)、對(duì)于獲得的IP進(jìn)行判斷,發(fā)現(xiàn)為非黑名單IP,則通過驗(yàn)證

(3)、服務(wù)器端對(duì)于URL進(jìn)行訪問,由于DNS服務(wù)器設(shè)置的TTL為0,所以再次進(jìn)行DNS解析,這一次DNS服務(wù)器返回的是內(nèi)網(wǎng)地址。

(4)、由于已經(jīng)繞過驗(yàn)證,所以服務(wù)器端返回訪問內(nèi)網(wǎng)資源的結(jié)果。

0x04實(shí)戰(zhàn)案例

wooyun漏洞庫(kù)案例

weblogic的uddiexplorer,這個(gè)好像比較常見一些

其它待收集補(bǔ)充

0x05防御思路

通常有以下5個(gè)思路:

1,過濾返回信息,驗(yàn)證遠(yuǎn)程服務(wù)器對(duì)請(qǐng)求的響應(yīng)是比較容易的方法。如果web應(yīng)用是去獲取某一種類型的文件。那么在把返回結(jié)果展示給用戶之前先驗(yàn)證返回的信息是否符合標(biāo)準(zhǔn)。

2, 統(tǒng)一錯(cuò)誤信息,避免用戶可以根據(jù)錯(cuò)誤信息來判斷遠(yuǎn)端服務(wù)器的端口狀態(tài)。

3,限制請(qǐng)求的端口為http常用的端口,比如,80,443,8080,8090。

4,黑名單內(nèi)網(wǎng)ip。避免應(yīng)用被用來獲取獲取內(nèi)網(wǎng)數(shù)據(jù),攻擊內(nèi)網(wǎng)。

5,禁用不需要的協(xié)議。僅僅允許http和https請(qǐng)求。可以防止類似于file:///,gopher://,ftp:// 等引起的問題。

6、禁止302跳轉(zhuǎn)

7、使用gethostbyname()判斷請(qǐng)求是否為內(nèi)網(wǎng)ip。 要結(jié)合6來使用

其中3、4、5可以通過網(wǎng)絡(luò)防火墻或者主機(jī)防火墻來實(shí)現(xiàn)。

0x06參考

SSRF攻擊實(shí)例解析:http://www.freebuf.com/articles/web/20407.html

SSRF漏洞的挖掘經(jīng)驗(yàn):http://bobao.#/learning/detail/240.html

跨協(xié)議通信技術(shù)利用:http://www.freebuf.com/articles/web/19622.html

關(guān)于SSRF攻擊:http://evilcos.me/?p=221

SSRF的新紀(jì)元:在編程語(yǔ)言中利用URL解析器:http://bobao.#/learning/detail/4183.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容