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