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