什麼是SSRF漏洞
SSRF(伺服器端請求偽造)是一種由攻擊者構造請求,伺服器端發起請求的安全漏洞,所以,一般情況下,SSRF攻擊的目標是外網無法訪問的內部系統。
SSRF漏洞形成原理。
SSRF的形成大多數是由於服務端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾和限制,比如操作服務端從指定URL獲取網頁文字,載入指定地址的圖片,利用的是服務端的請求偽造。所以,SSRF是利用存在缺陷的Web應用作為代理,攻擊遠端和本地的伺服器。
主要的攻擊方式:
- 對外網所在內網、本地進行埠掃描,獲取一些服務的banner資訊。
- 攻擊執行在內網或本地的應用程式。
- 對內網Web應用進行指紋識別,識別企業內部的資產資訊。
- 利用file協議讀取本地檔案等等
參考文獻:《Web安全攻防》
SSRF漏洞程式碼分析
<?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);
?>
在ssrf頁面中,程式獲取GET請求url,通過curl_init()初始化curl元件後,將引數帶入curl_setopt($ch,CURLOPT_URL,$url),然後呼叫curl_exec請求該url,服務會將banner資訊返回客戶端。功能是獲取url的內容並返回頁面上。例如,請求百度。
簡單利用
如果我們將url改為本地檔案路徑,我們可以通過file協議讀取本地檔案。例如我們在引數url後面接file:///c:/windows/win.ini
SSRF修復建議
- 限制請求的埠只能為Web埠,只允許訪問HTTP/HTTPS的請求
- 限制不能訪問內網IP
- 遮蔽返回的詳細資訊