SSRF攻擊技術
1.什麼是SSRF:
SSRF(Server-Side Request Forgery:伺服器端請求偽造) 是一種由攻擊者構造形成由服務端發起請求的一個安全漏洞。一般情況下,SSRF是要目標網站的內部系統。(因為他是從內部系統訪問的,所有可以通過它攻擊外網無法訪問的內部系統,也就是把目標網站當中間人),所以也叫中間人攻擊。
2.SSRF形成原因:
SSRF 形成的原因大都是由於服務端提供了從其他伺服器應用獲取資料的功能,且沒有對目標地址做過濾與限制。比如從指定URL地址獲取網頁文字內容,載入指定地址的圖片,文件等等。
3.SSRF結構圖:
如上圖所示: A網站,是一個所有人都可以訪問的外網網站,B網站是一個他們內部的OA網站,我們普通使用者只可以訪問a網站,不能訪問b網站。但是我們可以同過a網站做中間人,訪問b網站,從而達到攻擊b網站需求。我們正常訪問A網站的時候:輸入A網站URL --> 傳送請求 --> A伺服器接受請求(沒有過濾)並處理 -->返回使用者響應,此時,有一個網站請求:www.xxx.com/xxx.php?image=URL,如果是安全的網站應接收請求後,會檢測請求的合法性,如果是一個不安全的網站,比如對請求沒有過濾或安全檢測的網站,伺服器端的驗證並沒有對其請求獲取圖片的引數(image=)做出嚴格的過濾以及限制,導致A網站可以從其他伺服器的獲取資料。
簡單的解析SSRF:SSRF漏洞就是通過篡改獲取資源的請求傳送給伺服器,但是伺服器並沒有檢測這個請求是否合法的,然後伺服器以他的身份來訪問其他伺服器的資源。
4.SSRF的用途:
4.1可以對外網、伺服器所在內網、本地進行埠掃描,獲取一些服務的banner資訊;
4.2攻擊執行在內網或本地的應用程式(比如溢位);
4.3對內網web應用進行指紋識別,通過訪問預設檔案實現;
4.4攻擊內外網的web應用,主要是使用get引數就可以實現的攻擊(比如struts2,sqli等);
4.5利用file協議讀取本地檔案等。
5.SSRF出現的位置:
個人覺得所有呼叫外部資源的引數都有可能存在SSRF漏洞,但是這裡還是要書面化總結一下:
5.1分享:通過URL地址分享網頁內容
5.2轉碼服務
5.3線上翻譯
5.4圖片載入與下載:通過URL地址載入或下載圖片
5.5圖片、文章收藏功能
5.6未公開的api實現以及其他呼叫URL的功能
5.7從URL關鍵字中尋找
5.7.1share
5.7.2wap
5.7.3url
5.7.4link
5.7.5src
5.7.6source
5.7.7target
5.7.8imageURL
5.7.9sourceURL
5.7.10domain
6.SSRF驗證:(pikachu)漏洞驗證平臺
6.1url
這個時候,如果在url後更換為www.baidu.com
頁面跳轉到百度。
6.2讀取對方檔案
成功讀取了對方碟符的txt檔案,但是php檔案在這裡請求是無法讀取的,這取決於php程式碼裡面的過濾函式,已經過濾了php的尖括號,導致這個問題出現的原因是在原始碼檔案中,將接受進來的引數直接執行返回給前端,只做了簡單的非空判斷
6.3dict獲取目標伺服器埠上執行的服務版本資訊
6.4探測對方3306埠
7.SSRF的防護方法
7.1黑名單
7.1.1過濾10.0.0.0/8 、172.16.0.0/12、192.168.0.0/16、localhost私有地址、IPv6地址
7.1.2過濾file:///、dict://、gopher://、ftp:// 、危險的schema函式
7.1.3對返回的內容進行識別
7.1.4內網服務開啟鑑權(Memcached, Redis, Elasticsearch and MongoDB)
7.2最佳防護
7.2.1使用地址白名單
7.2.2對放回內容進行識別
7.2.3需要使用網際網路資源但是又不能使用白名單的情況:首先禁用 CURLOPT_FOLLOWLOCATION,然後通過域名獲取目標ip,並過濾內部ip;最後識別返回的內容是否與假定內容一致