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;最后識別返回的內容是否與假定內容一致
