一、什么是SSRF
SSRF(Server-Side Request Forgery:服務器端請求偽造)它與CSRF有些類似,不過不同的是,CSRF是讓客戶端去發出請求,而SSRF是借用服務器發出請求,它利用了服務器沒有對接收到的客戶端請求做出過濾而盲目信任這個漏洞。
比如www.123.com/image.php?image=http://333.com/555.jpg 123.com會根據用戶提供的image參數的鏈接去請求對應的jpg文件,如果它沒有對請求的鏈接過濾限制的話,黑客完全可以構造一個其他的請求鏈接,讓服務器在不知情的情況下去請求一些其他的鏈接,就可以發動對內網的攻擊,或者讓服務器請求大文件造成盪機等等。
二、SSRF經常出現的地方
1)分享:通過URL地址分享網頁內容
2)轉碼服務
3)在線翻譯
4)圖片加載與下載:通過URL地址加載或下載圖片
5)圖片、文章收藏功能
6)未公開的api實現以及其他調用URL的功能
7)從URL關鍵字中尋找
三、SSRF漏洞檢測方式
1.排除法:瀏覽器f12查看源代碼看是否是在本地進行了請求
比如:該資源地址類型為 http://www.xxx.com/a.php?image=(地址)的就可能存在SSRF漏洞
2.dnslog等工具進行測試,看是否被訪問
--可以在盲打后台用例中將當前准備請求的uri 和參數編碼成base64,這樣盲打后台解碼后就知道是哪台機器哪個cgi觸發的請求。
3.抓包分析發送的請求是不是由服務器的發送的,如果不是客戶端發出的請求,則有可能是,接着找存在HTTP服務的內網地址
--從漏洞平台中的歷史漏洞尋找泄漏的存在web應用內網地址
--通過二級域名暴力猜解工具模糊猜測內網地址
4.直接返回的Banner、title、content等信息
5.留意bool型SSRF
四、SSRF漏洞利用方式
1.讓服務端去訪問相應的網址
2.讓服務端去訪問自己所處內網的一些指紋文件來判斷是否存在相應的cms
3.可以使用file、dict、gopher[11]、ftp協議進行請求訪問相應的文件
4.攻擊內網web應用(可以向內部任意主機的任意端口發送精心構造的數據包{payload})
5.攻擊內網應用程序(利用跨協議通信技術)
6.判斷內網主機是否存活:方法是訪問看是否有端口開放
7.DoS攻擊(請求大文件,始終保持連接keep-alive always)
五、漏洞修復方式
1.禁止跳轉
2.過濾返回信息,驗證遠程服務器對請求的響應是比較容易的方法。如果web應用是去獲取某一種類型的文件。那么在把返回結果展示給用戶之前先驗證返回的信息是否符合標准。
3.禁用不需要的協議,僅僅允許http和https請求。可以防止類似於file://, gopher://, ftp:// 等引起的問題
4.設置URL白名單或者限制內網IP(使用gethostbyname()判斷是否為內網IP)
5.限制請求的端口為http常用的端口,比如 80、443、8080、8090
6.統一錯誤信息,避免用戶可以根據錯誤信息來判斷遠端服務器的端口狀態。