【W(wǎng)eb滲透】服務(wù)器端請(qǐng)求偽造SSRF漏洞原理解析
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
1、漏洞簡(jiǎn)介 SSRF(Server-Side Request Forgery:服務(wù)器端請(qǐng)求偽造) 是一種由攻擊者構(gòu)造形成由服務(wù)端發(fā)起請(qǐng)求的 一個(gè)安全漏洞。一般情況下,SSRF攻擊的目標(biāo)是從外網(wǎng)無(wú)法訪問(wèn)的內(nèi)部系統(tǒng)。正是因?yàn)樗怯煞?wù)端發(fā) 起的,所以它能夠請(qǐng)求到與它相連而與外網(wǎng)隔離的內(nèi)部系統(tǒng)。 1.1 漏洞原理SSRF形成的原因大都是由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒(méi)有對(duì)目標(biāo)地址做過(guò)濾與 限制。 通過(guò)控制功能中的發(fā)起請(qǐng)求的服務(wù)來(lái)當(dāng)作跳板攻擊內(nèi)網(wǎng)中其他服務(wù)。比如,通過(guò)控制前臺(tái)的請(qǐng)求遠(yuǎn)程地 址加載的響應(yīng),來(lái)讓請(qǐng)求數(shù)據(jù)由遠(yuǎn)程的URL域名修改為請(qǐng)求本地、或者內(nèi)網(wǎng)的IP地址及服務(wù),來(lái)造成對(duì) 內(nèi)網(wǎng)系統(tǒng)的攻擊。 1.2 漏洞危害1、掃描內(nèi)網(wǎng)開(kāi)放服務(wù) 2、向內(nèi)部任意主機(jī)的任意端口發(fā)送payload來(lái)攻擊內(nèi)網(wǎng)服務(wù) 3、DOS攻擊(請(qǐng)求大文件,始終保持連接Keep-Alive Always) 4、攻擊內(nèi)網(wǎng)的web應(yīng)用,例如直接SQL注入、XSS攻擊等 5、利用file、gopher、dict協(xié)議讀取本地文件、執(zhí)行命令等 2、檢測(cè)與繞過(guò)2.1 漏洞檢測(cè)假設(shè)一個(gè)漏洞場(chǎng)景:某網(wǎng)站有一個(gè)在線加載功能可以把指定的遠(yuǎn)程圖片加載到本地,功能鏈接如下:http://www.xxx.com/image.php?image=http://www.xxc.com/a.jpg 那么網(wǎng)站請(qǐng)求的大概步驟應(yīng)該是類似以下: 用戶輸入圖片地址->請(qǐng)求發(fā)送到服務(wù)端解析->服務(wù)端請(qǐng)求鏈接地址的圖片數(shù)據(jù)->獲取請(qǐng)求的數(shù)據(jù)加載到 前臺(tái)顯示。 這個(gè)過(guò)程中可能出現(xiàn)問(wèn)題的點(diǎn)就在于請(qǐng)求發(fā)送到服務(wù)端的時(shí)候,系統(tǒng)沒(méi)有效驗(yàn)前臺(tái)給定的參數(shù)是不是允 許訪問(wèn)的地址域名,例如,如上的鏈接可以修改為:http://www.xxx.com/image.php?image=http://127.0.0.1:22 如上請(qǐng)求時(shí)則可能返回請(qǐng)求的端口banner。如果協(xié)議允許,甚至可以使用其他協(xié)議來(lái)讀取和執(zhí)行相關(guān) 命令。例如 http://www.xxx.com/image.php?image=file:///etc/passwd http://www.xxx.com/image.php?image=dict://127.0.0.1:22/data:data2 (dict可以向服務(wù) 端口請(qǐng)求data data2) http://www.xxx.com/image.php?image=gopher://127.0.0.1:2233/_test (向2233端口發(fā)送數(shù) 據(jù)test,同樣可以發(fā)送POST請(qǐng)求) 對(duì)于不同語(yǔ)言實(shí)現(xiàn)的web系統(tǒng)可以使用的協(xié)議也存在不同的差異,其中:php: http、https、file、gopher、phar、dict、ftp、ssh、telnet... java: http、https、file、ftp、jar、netdoc、mailto... 判斷漏洞是否存在的重要前提是,請(qǐng)求是服務(wù)器發(fā)起的,以上鏈接即使存在并不一定代表這個(gè)請(qǐng)求是服 務(wù)器發(fā)起的。因此前提不滿足的情況下,不需要考慮SSRF。http://www.xxx.com/image.php?image=http://www.xxc.com/a.jpg 前端獲取鏈接后,是由js來(lái)獲取對(duì)應(yīng)參數(shù)交由window.location來(lái)處理相關(guān)的請(qǐng)求,或者加載到當(dāng)前的 iframe框架中,此時(shí)并不存在SSRF ,因?yàn)檎?qǐng)求是本地發(fā)起,并不能產(chǎn)生攻擊服務(wù)端內(nèi)網(wǎng)的需求。 2.2 漏洞出現(xiàn)點(diǎn)分享 通過(guò)url 地址分享文章,例如如下地址:http://share.magedu.com/index.php?url=http://127.0.0.1 通過(guò)url參數(shù)的獲取來(lái)實(shí)現(xiàn)點(diǎn)擊鏈接的時(shí)候跳到指定的分享文章。如果在此功能中沒(méi)有對(duì)目標(biāo)地址的范圍 做過(guò)濾與限制則就存在著SSRF漏洞。 圖片加載與下載 通過(guò)URL地址加載或下載圖片 http://image.magedu.com/image.php?image=http://127.0.0.1 圖片加載存在于很多的編輯器中,編輯器上傳圖片處,有的是加載本地圖片到服務(wù)器內(nèi),還有一些采用 加載遠(yuǎn)程圖片的形式,本地文章加載了設(shè)定好的遠(yuǎn)程圖片服務(wù)器上的圖片地址,如果沒(méi)對(duì)加載的參數(shù)做 限制可能造成SSRF。 圖片、文章收藏功能 http://title.magedu.com/title?title=http://title.magedu.com/as52ps63de 例如title參數(shù)是文章的標(biāo)題地址,代表了一個(gè)文章的地址鏈接,請(qǐng)求后返回文章是否保存、收藏的返回 信息。如果保存、收藏功能采用了此種形式保存文章,則在沒(méi)有限制參數(shù)的形式下可能存在SSRF。 利用參數(shù)中的關(guān)鍵字來(lái)查找 例如以下的關(guān)鍵字:share wap url link src source target u 3g display sourceURl imageURL domain ... 2.3 漏洞繞過(guò)部分存在漏洞,或者可能產(chǎn)生SSRF的功能中做了白名單或者黑名單的處理,來(lái)達(dá)到阻止對(duì)內(nèi)網(wǎng)服務(wù)和資 源的攻擊和訪問(wèn)。因此想要達(dá)到SSRF的攻擊,需要對(duì)請(qǐng)求的參數(shù)地址做相關(guān)的繞過(guò)處理,常見(jiàn)的繞過(guò)方 式如下: 場(chǎng)景1:限制為http://www.xxx.com 域名時(shí) 可以嘗試采用http基本身份認(rèn)證的方式繞過(guò),http://www.xxx.com@www.xxc.com。在對(duì)@解析域名 中,不同的處理函數(shù)存在處理差異,例如:http://www.aaa.com@www.bbb.com@www.ccc.com, 在PHP的parse_url中會(huì)識(shí)別www.ccc.com,而libcurl則識(shí)別為www.bbb.com。 場(chǎng)景2:限制請(qǐng)求IP不為內(nèi)網(wǎng)地址 即限制訪問(wèn)所有內(nèi)網(wǎng)IP,可采用短網(wǎng)址繞過(guò),短網(wǎng)址轉(zhuǎn)換。可以使用在線進(jìn)制轉(zhuǎn)換, 127轉(zhuǎn)換16進(jìn)制為7f,系統(tǒng)中表示16進(jìn)制前面要加0x,8進(jìn)制前加0 可以解析為127.0.0.1采用進(jìn)制轉(zhuǎn)換,127.0.0.1八進(jìn)制:0177.0.0.1。十六進(jìn)制:0x7f.0.0.1。十進(jìn)制:2130706433
場(chǎng)景3:限制請(qǐng)求只為http協(xié)議 采用302跳轉(zhuǎn),百度短地址,或者使用短地址生成其他 場(chǎng)景4:利用句號(hào)繞過(guò) 127。0。0。1 >>> 127.0.0.1 其他繞過(guò)形式可以查看:https://www.secpulse.com/archives/65832.html 3、查看是否存在SSRF漏洞
4、Pikachu演示4.1 SSRF(curl)首先我們大概了解一下在PHP中curl函數(shù)是用來(lái)干什么的。curl是一個(gè)庫(kù),能讓你通過(guò)URL和許多不同種 的服務(wù)器進(jìn)行交流,并且還支持許多協(xié)議,重點(diǎn)是可以用來(lái)請(qǐng)求Web服務(wù)器。curl可以支持https認(rèn)證、 http post、ftp上傳、代理、cookies、簡(jiǎn)單口令認(rèn)證等等功能。
觀察URL,發(fā)現(xiàn)它傳遞了一個(gè)URL給后 臺(tái) 我們可以把 url 中的內(nèi)容改為百度 http://127.0.0.1/vul/ssrf/ssrf_fgc.php?url=https://www.baidu.com
還可以利用file協(xié)議讀取本地文件
http://10.0.0.7:81/vul/ssrf/ssrf_curl.php?url=file:///etc/passwd 4.2 SSRF(file_get_content)file_get_contents() 函數(shù)把整個(gè)文件讀入一個(gè)字符串中,是用于將文件的內(nèi)容讀入到一個(gè)字符串中的首 選方法。如果操作系統(tǒng)支持,還會(huì)使用內(nèi)存映射技術(shù)來(lái)增強(qiáng)性能。php://filter:是一種元封裝器, 設(shè)計(jì)用于數(shù)據(jù)流打開(kāi)時(shí)的篩選過(guò)濾應(yīng)用。 對(duì)于一體式(all-in-one)的 文件函數(shù)非常有用,類似 readfile()、 file() 和 file_get_contents(),在數(shù)據(jù)流內(nèi)容讀取之前沒(méi)有機(jī)會(huì)應(yīng) 用其他過(guò)濾器。php://filter 目標(biāo)使用以下的參數(shù)作為它路徑的一部分。復(fù)合過(guò)濾鏈能夠在一個(gè)路徑上指定。詳細(xì)使用 這些參數(shù)可以參考具體范例。PHP: php:// - Manual file_get_contents里面帶有php://filter 我們用這個(gè)就可以來(lái)讀取php源碼,所以我們來(lái)構(gòu)造URL: http://127.0.0.1/vul/ssrf/ssrf_fgc.php?file=php://filter/resource=ssrf.php http://127.0.0.1:8000/vul/ssrf/ssrf_fgc.php? file=php://filter/read=convert.base64-encode/resource=ssrf.php 直接使用 resource 指定 ssrf.php 文件,可以看到訪問(wèn)成功
但是php文件被解析了,我們希望拿到網(wǎng)站的源代碼,那么我們需要對(duì)代碼做一層編碼,不讓他解析, 拿到之后我們?cè)龠M(jìn)行解碼,這樣就拿到了網(wǎng)站的源代碼;在read參數(shù)中加入 convert.base64-encode PHP: 轉(zhuǎn)換過(guò)濾器 - Manual http://127.0.0.1:8000/vul/ssrf/ssrf_fgc.php?file=php://filter/read=convert.base64-encode/resource=ssrf.php 然后網(wǎng)頁(yè)出現(xiàn)了base64編碼的代碼
利用解碼工具或hackbar:
該文章在 2023/12/7 11:47:23 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |