1. 程式人生 > >SSRF(服務端請求偽造)漏洞

SSRF(服務端請求偽造)漏洞

目錄

SSRF

SSRF漏洞利用

SSRF漏洞防禦


SSRF

SSRF(Server-Side Request Forgery,伺服器端請求偽造)漏洞,是一種由攻擊者構造請求,由服務端發起請求的安全漏洞。一般情況下,SSRF攻擊的目標是外網無法訪問的內部系統(正因為請求是由伺服器端發起的,所以伺服器端能請求到與自身相連而與外網隔離的內部系統)

SSRF漏洞原理:SSRF的形成大多數是由於伺服器端提供了從其他伺服器應用獲取資料的功能且沒有對目標地址做過濾與限制。比如,黑客操作服務端從指定URL地址獲取網頁文字內容,載入指定的圖片等,利用的是伺服器端的請求偽造。SSRF利用存在缺陷的Web應用作為代理攻擊遠端和本地的伺服器。

SSRF主要攻擊方式如下:

  • 對外網、伺服器所在內網、本地進行埠掃描,獲取一些服務的banner資訊
  • 攻擊執行在內網或本地的應用程式
  • 對內網web應用進行指紋識別,識別企業內部的資產資訊
  • 攻擊內外網的web應用,主要是使用HTTP GET請求就可以實現的攻擊
  • 利用file協議讀取本地檔案

SSRF漏洞利用

現在伺服器上有一個ssrf.php的頁面,該頁面的功能是獲取URL引數,然後將URL的內容顯示到網頁頁面上。

#ssrf.php
<?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引數,通過curl_init()初始化curl元件後,將引數URL帶入curl_setopt($ch,CURLOPT_URL,$url),然後呼叫curl_exec請求該URL。由於伺服器端會將banner資訊返回給客戶端,所以可根據banner判斷主機是否存在某些服務。

我們訪問該連結:http://127.0.0.1/ssrf.php?url=http://127.0.0.1/test.php ,它會將test.php頁面顯示

如果我們把url的引數換成http://www.baidu.com ,頁面則會返回百度的頁面

於是我們可以將URL引數換成內網的地址,則會洩露伺服器內網的資訊。將URL換成file://的形式,就可以讀取本地檔案。這和檔案包含漏洞很類似!如下,我們可以讀取伺服器host檔案的資訊

SSRF漏洞防禦

  • 限制請求的埠只能為web埠,只允許訪問http和https的請求
  • 限制不能訪問內網的ip,以防止對內網進行攻擊
  • 遮蔽返回的詳細資訊