SSRF漏洞
SSRF漏洞
SSRF意為服務端請求偽造(Server-Side Request Forge)。攻擊者利用SSRF漏洞通過服務器發起偽造請求,就這樣可以訪問內網的數據,進行內網信息探測或者內網漏洞利用
SSRF漏洞形成的原因是:應用程序存在可以從其他服務器獲取數據的功能,但對服務器的地址沒有做嚴格的過濾,導致應用程序可以訪問任意的URL鏈接。攻擊者通過精心構造URL連接,可以利用SSRF漏洞進行以下攻擊:
(1) 通過服務器獲取內網主機、端口和banner信息
(2) 對內網的應用程序進行攻擊,例如Redis、JBoss等
(3) 利用file://偽協議讀取文件
(4) 可以攻擊內網程序,造成緩沖區溢出
SSRF高危觸發點:
(1)圖片加載與下載:通過URL地址加載或下載圖片
(2)從遠程服務器請求資源
(3)數據庫內置功能(Orage,MongoDB,MSSQL,Posgres,couchDB)
(4)Web Mail收取其他郵箱郵件
(5)文件處理、編碼處理、屬性信息處理(FFmpeg,docx,pdf,XML處理)
SSRF漏洞代碼分析
漏洞示例代碼:
<?php if(isset($_GET['url'])) { $link=$_GET['url']; $filename='./'.rand().'.txt'; $curlobj=curl_init($link); curl_setopt($curlobj,CURLOPT_FILE,$link); curl_setopt($curlobj,CURLOPT_HEADER,0); $result=curl_exec($curlobj); curl_exec($curlobj); curl_close($curlobj); fclose($link); file_put_contents($filename, $result); echo $result; } ?>
以上代碼通過curl_exe函數對訪問傳入的URL數據進行請求,並返回請求的結果。
1.文件讀取
通過file://偽協議讀取常見的文件,例如/etc/passwd 我的是windows環境所以簡單測試讀取windows下的win.ini文件
pyaload:
http://192.168.1.6/index.php?url=file://C:\Windows\win.ini
2.端口探測
url沒有經過嚴格的過濾,因此攻擊者就可以構造任意的URL利用SSRF漏洞。例如可以通過http://127.0.0.1:3306來探測此服務器是否開啟了3306端口
測試3306端口payload:
http://192.168.1.6/index.php?url=http://127.0.0.1:3306
測試3389端口payload:
http://192.168.1.6/index.php?url=http://127.0.0.1:3389
返回數據為空,返回延遲比較長 說明不存在此端口
3.內網應用攻擊
通過SSRF漏洞可以進行端口信息探測,也可以對內網存在遠程命令執行漏洞的應用進行攻擊
(1)信息探測
利用SSRF端口信息探測方法通過內網發現了內網有一台主機開啟了JB服務
(2)訪問jmx控制台
(3)部署木馬
(4)獲得webshell
(5)執行命令
待更新。。。。。
其他常見漏洞代碼
漏洞代碼1 file_get_contents()
<?php if(isset($_POST['url'])) { $content=file_get_contents($_POST['url']); $filename='./images/'.rand().'.img'; file_put_contents($filename,$content); echo $_GET['url']; $img="<img src=\"".$filename."\"/>"; } echo $img; ?>
通過post請求傳入我們要讀取的文件 這樣我們win.ini文件就寫入到了圖片中
打開圖片查看 得到我們需要的信息
SSRF漏洞修復
(1)過濾請求協議,只允許http或者https開頭的協議
(2)嚴格限制訪問的IP地址,只允許訪問特定的IP地址
(3)限制訪問的端口,只允許訪問特定的端口
(4)設置統一的錯誤信息,防止造成信息泄露
前言
參考學習:https://www.cnblogs.com/wangshuwin/p/7642693.html
《web安全原理分析與實踐》——SSRF漏洞