伺服器請求偽造SSRF
0x01漏洞原理
SSRF稱為服務端請求偽造,是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。
0x02危害/利用方式
(1)可以對伺服器所在內網、本地進行埠掃描,獲取一些服務的banner資訊;
(2)攻擊執行在內網或本地的應用程式(比如溢位);
(3)對內網web應用進行指紋識別,通過訪問預設檔案實現;
(4)攻擊內外網的web應用,主要是使用get引數就可以實現的攻擊(比如struts2,sqli等);
(5)利用file協議讀取本地檔案等;
0x03PHP可能引起SSRF漏洞的函式
(1)curl_exec() #執行cURL會話
(2)file_get_contents() #j將整個檔案讀入一個字串
(3)fsockopen() #開啟一個網路連線或者一個Unix套接字連線
0x04CURL其他協議
dict協議:用於搭建線上字典服務。
gopher協議:是一種 資訊查詢系統,只支援文字,不支援影象,已被HTTP替代。
0x05測試方法
從WEB功能上尋找:我們從上面的概述可以看出,SSRF是由於服務端獲取其他伺服器的相關資訊的功能中形成的,因此我們大可以列舉幾種在web 應用中常見的從服務端獲取其他伺服器資訊的的功能。
(1)通過分享功能
通過URL地址分享網頁內容:
早期分享應用中,為了更好的提供使用者體驗,WEB應用在分享功能中,通常會獲取目標URL地址網頁內容中的<tilte></title>標籤或者<meta name="description" content=“”/>標籤中content的文字內容作為顯示以提供更好的使用者體驗。例如人人網分享功能中:http://widget.renren.com/*****?resourceUrl=https://www.nsfocus.com
通過目標URL地址獲取了title標籤和相關文字內容。而如果在此功能中沒有對目標地址的範圍做過濾與限制則就存在著SSRF漏洞。
(2)轉碼服務
通過URL地址把原地址的網頁內容調優使其適合手機螢幕瀏覽:
由於手機螢幕大小的關係,直接瀏覽網頁內容的時候會造成許多不便,因此有些公司提供了轉碼功能,把網頁內容通過相關手段轉為適合手機螢幕瀏覽的樣式。例如百度、騰訊、搜狗等公司都有提供線上轉碼服務。
(3)線上翻譯
通過URL地址翻譯對應文字的內容。提供此功能的國內公司有百度、有道等。
(4)圖片載入與下載,通過URL地址載入或下載圖片
圖片載入遠端圖片地址此功能用到的地方很多,但大多都是比較隱祕,比如在有些公司中的載入自家圖片伺服器上的圖片用於展示。(此處可能會有人有疑問,為什麼載入圖片伺服器上的圖片也會有問題,直接使用img標籤不就好了? ,沒錯是這樣,但是開發者為了有更好的使用者體驗通常對圖片做些微小調整例如加水印、壓縮等,所以就可能造成SSRF問題)。
(5)圖片、文章收藏功能:此處的圖片、文章收藏中的文章收藏就類似於功能一、分享功能中獲取URL地址中title以及文字的內容作為顯示,目的還是為了更好的使用者體驗,而圖片收藏就類似於功能四、圖片載入。
(6)未公開的api實現以及其他呼叫URL的功能
此處類似的功能有360提供的網站評分,以及有些網站通過api獲取遠端地址xml檔案來載入內容。
0x06修復方案
(1)過濾內網伺服器對公網伺服器請求的響應。如果Web應用是獲取某一型別的檔案,在把返回結果展示給使用者之前應先驗證返回的資訊是否符合檔案型別標準,比如返回資訊應為圖片,如果返回資訊是HTML,則停止將返回資訊返回客戶端。
(2)統一錯誤提示資訊,避免使用者可以根據錯誤資訊來判斷遠端伺服器的埠狀態。
(3)在內網伺服器的防火牆上限制公網伺服器的請求埠為HTTP等協議常用埠,如:80、443、8080、8090。
(4)若公網伺服器的內網IP與內網無業務通訊,建議將公網伺服器對應的內網IP列入黑名單,避免應用被用來獲取內網資料。
(5)內網伺服器禁用不必要的協議,僅允許HTTP和HTTPS請求,防止類似於file:///、gopher://、ftp:// 等協議引起的安全問題。
0x07實際案例
(1)Wordpress 3.5.1以下版本xmlrpc.php、pingback的缺陷與SSRF
(2)discuz!的SSRF(利用php的header函式來繞過,其實就是302跳轉實現協議轉換)
(3)weblogic的SSRF漏洞