SSRF漏洞(原理、挖掘點、漏洞利用、修復建議)
1.介紹SSRF漏洞
SSRF (Server-Side Request Forgery,伺服器端請求偽造)是一種由攻擊者構造請求,由服務端發起請求的安全漏洞。一般情況下,SSRF攻擊的目標是外網無法訪問的內部系統(正因為請求是由服務端發起的,所以服務端能請求到與自身相連而與外網隔離的內部系統)。
2.SSRF漏洞原理
SSRF的形成大多是由於服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾與限制。例如,黑客操作服務端從指定URL地址獲取網頁文字內容,載入指定地址的圖片等,利用的是服務端的請求偽造。SSRF利用存在缺陷的Web
應用作為代理攻擊遠端和本地的伺服器。
主要攻擊方式如下所示。
- 對外網、伺服器所在內網、本地進行埠掃描,獲取一些服務的banner資訊。
- 攻擊執行在內網或本地的應用程式。
- 對內網Web應用進行指紋識別,識別企業內部的資產資訊。
- 攻擊內外網的Web應用,主要是使用HTTP GET請求就可以實現的攻擊(比如struts2、SQli等)。
- 利用file協議讀取本地檔案等。
http://www.xingkonglangzi.com/ssrf.php?url=192.168.1.10:3306
http://www.xingkonglangzi.com/ssrf.php?url=file:///c:/windows/win.ini
3.SSRF漏洞點挖掘
1.分享:通過URL地址分享網頁內容
2.轉碼服務(通過URL地址把原地址的網頁內容調優,使其適合手機螢幕的瀏覽)
3.線上翻譯
4.圖片載入與下載:通過URL地址載入或下載圖片
5.圖片、文章收藏功能
6.未公開的api實現及呼叫URL的功能
7.從URL關鍵字中尋找
關鍵字:
- Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain
Demo:
<?php function curl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER,0); curl_exec($ch); curl_close($ch); } $url = $_GET['url']; curl($url); ?>
這裡的構成可以通過 url引數接收,去嘗試請求內網資源
http://localhost/?url=file:///c:\\AppleBcInstaller.log
file協議利用
其餘協議後面更新
gopher,SSRF攻擊Redis等
簡單列兩種方式
通過分享點來查詢
右鍵圖片新視窗開啟
4.SSRF漏洞繞過方法
1.@ http://[email protected]
2.新增埠號 http://127.0.0.1:8080
3.短地址 https://0x9.me/cuGfD
4.可以指向任意ip的域名 xip.io
5.ip地址轉換成進位制來訪問 192.168.0.1=3232235521(十進位制)
6.非HTTP協議
7.DNS Rebinding
@:
http://[email protected] 與 http?/10.10.10.10 請求是相同的
過濾繞過
IP地址轉換成十進位制:
127.0.0.1 先轉換為十六進位制 7F000001 兩位起步所以 1就是01
7F000001轉換為二進位制
127.0.0.1=2130706433 最終結果
還有根據域名判斷的,比如xip.io域名,就嘗試如下方法
xip.io
xip.io127.0.0.1.xip.io-->127.0.0.1
www.127.0.0.1.xip.io-->127.0.0.1
Haha.127.0.0.1.xip.io-->127.0.0.1
Haha.xixi.127.0.0.1.xip.io-->127.0.0.1
5.SSRF修復建議
- 限制請求的埠只能為Web埠,只允許訪問HTTP和HTTPS的請求。
- 限制不能訪問內網的IP,以防止對內網進行攻擊。
- 遮蔽返回的詳細資訊。