簡談SSRF漏洞


一、SSRF漏洞定義

SSRF(Server-Side Request Forgery:服務請求偽造)是一種由攻擊者構造請求,從而讓服務端發起請求的一種安全漏洞。它將一個可以發起網絡請求的服務當作跳板來攻擊其他內部服務。SSRF的攻擊目標一般是與外部隔離的內網資源。

 

二、SSRF漏洞原理

當服務端提供了從其他服務器獲取數據的功能(如:從指定URL地址獲取網頁文本內容、加載指定地址的圖片、下載等),但是沒有對目標地址做過濾與限制時就會出現SSRF。

 

三、主要攻擊方式

1、對外網、服務器所在內外、本地進行端口掃描,獲取一些服務的banner信息

2、測試運行在內網或本地的應用程序

3、利用file協議讀取本地文件等

4、對內網web應用進行指紋識別,識別企業內部的資產信息

5、攻擊內外網的web應用,主要是使用HTTP GET請求就可以實現的攻擊(比如struts2、SQli)

 

四、SSRF漏洞利用

1、存在SSRF漏洞的簡要代碼

<?php 
    function curl($url){                   //curl函數用來發送請求
        $ch = curl_init();                 //初始化curl
        curl_setopt($ch,CURLOPT_URL,$url); //將參數URL代入
        curl_setopt($ch,CURLOPT_HEADER,0);
        curl_exec($ch);                    //執行請求該URL
        curl_close($ch);
    }

$url = $_GET['url'];                       //用戶通過構造url來進行訪問
curl($url);
?>

頁面ssrf.php實現的功能是獲取GET參數URL,然后將URL的內容返回網頁上。當設置參數為URL為內網地址時,則會泄露內網信息。當訪問.../ssrf.php?url=file: ///C: /Windows/win.ini即可讀取本地文件。

 

2、php中可能存在SSRF漏洞的函數

1) file_get_content()

2) fsockopen()

3) curl_exec()

 ... 

 

五、漏洞繞過

部分存在漏洞,或者可能產生SSRF的功能中做了白名單或者黑名單的處理,來達到阻止對內網服務和資源的攻擊和訪問。因此想要達到SSRF的攻擊,需要對請求的參數地址做相關的繞過處理,常見的繞過方式如下:

1、限制請求IP不為內網地址

  • 采用短網址繞過。比如百度短地址https://dwz.cn/
  • 采用可以指向任意域名的xip.io。127.0.0.1.xip.io,可以解析為127.0.0.1
  • 采用進制轉換。127.0.0.1八進制:0177.0.0.1。十六進制:0x7f.0.0.1。十進制:2130706433

2、限制請求只為http協議

利用 https://tinyurl.com 生成302跳轉地址。

 

六、漏洞修復

1、屏蔽返回的詳細信息。例如請求文件時,只返回文件是否請求成功,請求不成功的文件統一返回錯誤信息。

2、對請求地址設置白名單,只允許請求白名單內的地址。

3、禁用除http和https外的協議,如:file://,gopher://,dict://等。

4、限制請求的端口為固定服務端口,如:80,443。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM