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://abc.com@127.0.0.1
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://www.baidu.com@10.10.10.10 與 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,以防止對內網進行攻擊。
- 屏蔽返回的詳細信息。