SSRF (Server-Side Request Forgery:服務器端請求偽造) 是一種由攻擊者構造形成,由服務端發起請求的一個安全漏洞。
很多Web應用都提供了從其他服務器上獲取數據的功能。使用用戶指定的URL,Web應用可以獲取url中的圖片,下文件,讀文件等。
攻擊者可以利用存在缺陷的web應用作為代理攻擊遠程和本地服務器。一般SSRF攻擊的目標是從外網無法訪問的內部系統。
## 一、成因、用途、點位
### SSRF形成原因:
SSRF漏洞形成的原因大多是因為服務端提供了從其他[服務器/應用]獲取數據的功能,且沒有對目標地址作過濾和限制。
比如從指定URL地址獲取網頁文本內容,加載指定地址的圖片,文檔等等。
>比如 :
>A 網站是所有人都可以訪問的外網網站,B 網站是一個他們內部的網站
>我們普通用戶只可以訪問 a 網站,不能訪問 b 網站。
>但是我們可以同過a網站做中間人,訪問 b網站,從而達到攻擊 b 網站需求
所以一般攻擊是選擇一臺可以由我們訪問的存在漏洞的外網服務器(作為跳板機)
正常用戶訪問網站的流程是
輸入 A 網站 URL --> 發送請求 --> A 服務器接受請求(沒有過濾),并處理 -->返回用戶響應
產生的原因:服務器端的驗證并沒有對其請求獲取圖片的參數(image=)做出嚴格的過濾以 及限制,導致 A 網站可以從其他服務器的獲取數據
### SSRF的用途:
攻擊者利用ssrf可以實現的攻擊主要有5種
1. 可以對外網、服務器所在內網、本地進行端口掃描
獲取一些服務的banner信息
2. 攻擊運行在內網或本地的應用程序
比如溢出
3. 對內網web應用進行指紋識別
通過訪問默認文件實現
4. 攻擊內外網的web應用
主要是使用get參數就可以實現的攻擊(比如struts2,sqli等)
5. 利用file協議讀取本地文件等
### SSRF漏洞出沒位置
注:個人覺得**所有調外部資源的參數都有可能存在ssrf漏洞**
1. 分享:通過URL地址分享網頁內容
2. 轉碼服務
3. 在線翻譯
4. 圖片加載與下載:通過URL地址加載或下載圖片
5. 圖片、文章收藏功能
6. 未公開的api實現以及其他調用URL的功能
7. 從URL關鍵字中尋找
share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain等
例如: www.xxx.com/xxx.php?image=www.lucity.com/1.jpg
如果我們將 www.lucity.com/1.jpg 換為與該服務器相連的內網服務器地址會產生什么
在存在漏洞的情況想,如果存在該內網地址就會返回 1xx 2xx 之類的狀態碼,不存在就會其他的狀態碼
## 二、SSRF繞過與防護
### SSRF常用的后端實現
ssrf 攻擊可能存在任何語言編寫的應用,代碼審計中要注意以下函數
1. file_get_contents
從用戶指定的 url 獲取圖片,然后把它用一個隨機文 件名保存在硬盤上,并展示給用戶
2. fsockopen()
實現獲取用戶制定 url 的數據(文件或者 html)。這個函數會 使用 socket 跟服務器建立 tcp 連接,傳輸原始數據
3. curl_exec()
用來獲取數據
### 繞過手法
**更改 IP 地址寫法**
一些開發者會通過對傳過來的 URL 參數進行正則匹配的方式來過濾掉內網 IP,如采用如下正則表達式:
```
^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}$
```
對于這種過濾我們可以采用改編 IP 的寫法的方式進行繞過,例如 192.168.0.1 這個 IP 地址
我們可以改寫成:
(1)、8 進制格式:0300.0250.0.1
(2)、16 進制格式:0xC0.0xA8.0.1
(3)、10 進制整數格式:3232235521
(4)、16 進制整數格式:0xC0A80001
**利用解析 URL 所出現的問題**
在某些情況下,后端程序可能會對訪問的 URL 進行解析,對解析出來的 host 地址進行過濾。這時候可能會出現對 URL 參數解析不當,導致可以繞過過濾。
隨意地址+攻擊地址:`http://www.baidu.com@192.168.0.1/`
當后端程序通過不正確的正則表達式(比如將 http 之后到 com 為止的字符內容,也就是 www.baidu.com,認為是訪問請求的 host 地址時)對上述 URL 的內容進行解析的時候, 很有可能會認為訪問 URL 的 host 為 www.baidu.com,而實際上這個 URL 所請求的內容是192.168.0.1 上的內容。
### SSRF 防護方法
1、防護措施
(黑名單)
(1)過濾 10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost 私有地址、IPv6 地址
(2)過濾 file:///、dict://、gopher://、ftp:// 危險 schema
(3)對返回的內容進行識別
(4)內網服務開啟鑒權(Memcached, Redis, Elasticsearch and MongoDB)
2、最佳防護
1. 使用地址白名單
2. 對返回內容進行識別
3. 需要使用互聯網資源(比如貼吧使用網絡圖片)而無法使用白名單的情況:
首先禁用`CURLOPT_FOLLOWLOCATION`;
然后通過域名獲取目標ip,并過濾內部 ip;
最后識別返回的內容是否與假定內容一致
- src導航站
- kali和msf
- 信息收集
- 收集域名信息
- Whois 查詢
- 備案信息查詢
- 信用信息查詢
- IP反查站點的站
- 瀏覽器插件
- 收集子域名信息
- 在線平臺
- 工具枚舉
- ssl與證書透明度
- DNS歷史解析
- DNS域傳送漏洞
- C段探測
- JS文件域名&ip探測
- 搜索引擎&情報社區
- google黑客
- 威脅情報
- 鐘馗之眼
- 收集相關應用信息
- 微信公眾號&微博
- APP收集&反編譯
- 收集常用端口信息
- 常見端口&解析&總結
- 掃描工具
- 網絡空間引擎搜索
- 瀏覽器插件
- nmap掃描
- 收集敏感信息
- 源碼泄露
- 郵箱信息收集
- 備份文件泄露
- 目錄&后臺掃描
- 公網網盤
- 歷史資產
- 指紋&WAF&CDN識別
- 指紋識別
- CDN識別
- 繞過CDN查找真實IP
- WAF識別
- 漏洞資源和社工
- 漏洞公共資源庫
- 社會工程
- 資產梳理
- 各種對滲透有幫助的平臺
- 掃描器
- 掃描器對比
- AppScan(IBM)_web和系統
- AWVS_web掃描
- X-Scan_系統掃描
- WebInspect_HP_WEB
- Netsparker_web
- WVSS_綠盟_web
- 安恒明鑒
- Nessus_系統
- nexpose_系統
- 啟明天鏡_web_系統
- SQL注入
- 常用函數
- sql注入步驟
- union注入和information_schema庫
- 函數和報錯注入
- SQL盲注
- 其他注入方式
- 防止SQL注入解決方案
- Access數據庫注入
- MSSQL數據庫注入
- MYSQL數據庫注入
- 神器SQLmap
- xss跨站腳本攻擊
- xss原理和分類
- xss案例和修復
- xss繞過技巧
- xss案例
- 文件上傳下載包含
- 常有用文件路徑
- 文件上傳漏洞
- 文件下載漏洞
- 文件包含漏洞
- upload-labs上傳漏洞練習
- XXE、SSRF、CSRF
- SSRF原理基礎
- SSRF案例實戰
- CSRF原理基礎
- CSRF案例及防范
- XXE之XML_DTD基礎
- XXE之payload與修復
- XXE結合SSRF
- 遠程命令執行與反序列化
- 遠程命令和代碼執行漏洞
- 反序列化漏洞
- 驗證碼與暴力破解
- 爆破與驗證碼原理
- CS架構暴力破解
- BS架構暴力破解
- WEB編輯器漏洞
- 編輯器漏洞基礎
- Ewebeditor編輯器
- FCKeditor編輯器
- 其他編輯器
- web中間件漏洞
- 中間件解析漏洞
- Tomcat常見的漏洞總結
- Jboss漏洞利用總結
- Weblogic漏洞利用總結
- WEB具體步驟
- 旁注和越權
- CDN繞過
- 越權與邏輯漏洞
- WEB應用常見其他漏洞
- WEB登陸頁面滲透思路
- 獲取WEBshell思路
- 社工、釣魚、apt
- 社工和信息收集
- 域名欺騙
- 釣魚郵件
- 一些釣魚用的掛馬工具
- 代碼審計
- 代碼審計工具
- WAF繞過
- WAF基礎及云WAF
- 各種WAF繞過方法
- 繞過WAF上傳文件
- 系統提權
- windows系統提權
- linux系統提權
- 數據庫提權操作系統
- 內網橫向滲透
- 內網穿透方式
- 一些內網第三方應用提權
- ARP與DOS
- ARP欺騙
- DOS與DDOS
- 一些DOS工具