SSRF漏洞基础
pikachu安裝時的問題——pikachu數(shù)據(jù)庫鏈接不上以及側(cè)邊欄訪問沒有反應(yīng),只有URL加了個#原因和解決辦法_Gjqhs的博客-CSDN博客
普及SSRF漏洞原理、危害和修復(fù)方法修復(fù)
SSRF簡介
略圖
張三:有趣...
SSRF(Server-SideRequestForgery:服務(wù)器端請求偽造)是一種由攻擊者構(gòu)造惡意數(shù)據(jù),形成由服務(wù)端發(fā)起請求的一個安全漏洞。一般情況下,SSRF攻擊的目標(biāo)是從外網(wǎng)無法訪問的內(nèi)部系統(tǒng),正是因為它是由服務(wù)端發(fā)起的,所以它能夠請求到與它相連而與外網(wǎng)隔離的內(nèi)部系統(tǒng)
SSRF形成的原因大都是由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒有對目標(biāo)地址做過濾與限制,比如從指定URL地址獲取網(wǎng)頁文本內(nèi)容,加載指定地址的圖片,下載等等
SSRF常見場景
社交分享功能
獲取超鏈接的標(biāo)題等內(nèi)容進(jìn)行顯示
轉(zhuǎn)碼服務(wù)
通過URL地址把原地址的網(wǎng)頁內(nèi)容調(diào)優(yōu)使其適合手機(jī)屏幕瀏覽
在線翻譯
給網(wǎng)址翻譯對應(yīng)網(wǎng)頁的內(nèi)容
圖片加載/下載
例如富文本編輯器中的點擊下載圖片到本地;通過URL地址加載或下載圖片
編碼處理,屬性信息處理,文件處理
如ffpmg,ImageMagick,docx,pdf,xml處理器等
url中的關(guān)鍵字:
share、wap、ur link、src source、target、u、3g、display、sourceURI
imageURl、domain...
從遠(yuǎn)程服務(wù)器請求資源
(uploadfromurl如discuz!;import & expost rss feed如web blog;使用了xml
引擎對象的地方如wordpress xmlrpc.php)
Web應(yīng)用在分享功能中,為了更好的用戶體驗,,通常會獲取目標(biāo)URL地址網(wǎng)頁內(nèi)容中的<title></title>標(biāo)簽的文本內(nèi)容作為顯示。如果在此功能中沒有對目標(biāo)地址的范圍做過濾與限制就會造成SSRF漏洞
通過URL地址翻譯對應(yīng)文本的內(nèi)容
提供此功能的國內(nèi)公司有百度、有道等
圖片加載與下載
許多Web服務(wù)器都存在圖片加載遠(yuǎn)程圖片功能,但大多都是比較隱秘,比如加載本地服務(wù)器圖片用于展示。開發(fā)者為了有更好的用戶體驗通常對圖片做微小調(diào)整,例如加水印、壓縮等,這樣的做法,很大可能造成SSRF漏洞。
SSRF危害
可以對外網(wǎng)服務(wù)器所在內(nèi)網(wǎng)、本地進(jìn)行端口掃描,獲取服務(wù)端口的Banner信息
攻擊運行在內(nèi)網(wǎng)或本地的應(yīng)用程序(如Fastcgi,redis等)
對內(nèi)網(wǎng)Web應(yīng)用進(jìn)行指紋識別,通過訪問默認(rèn)文件實現(xiàn)(如Readme等文件)
攻擊內(nèi)外網(wǎng)的Web應(yīng)用,使用GET就可以實現(xiàn)的攻擊(比如Struts2,Redis等)
利用File協(xié)議讀取本地文件
SSRF漏洞產(chǎn)生
Curl命令
curl是常用的命令行工具,可以用來請求Web、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSP,cUrl中也包含了用于程序開發(fā)的libcurl。
下段為未做任何防御的cur執(zhí)行代碼
<?phpSch curl_init();Sur1 $_GET['ur1'];cur1_setopt(Sch,CURLOPT_URL,$url);echo $_GET['url'];cur1_setopt($ch,CURLOPT_FOLLOWLOCATION,1);#cur1函數(shù)可以跟隨301.302跳轉(zhuǎn)cur1_setopt($ch,CURLOPT._HEADER,1);#設(shè)置curI函數(shù)返回頭部信息cur1_setopt($ch,CURLOPT_RETURNTRANSFER,0);cur1_exec($ch);Sstatus curl_getinfo($ch);var_dump($status);cur1_close($ch);?>file_get_contents函數(shù)
通常file_get_contents在php函數(shù)中經(jīng)常和**php://input**偽協(xié)議結(jié)合利用,當(dāng)
file_get_contents函數(shù)的參數(shù)為url地址加載文件或者圖片時,也會造成遠(yuǎn)程文件包含,或者ssrf漏洞
<?phpif(isset($_POST['ur1'])){$content=file_get_contents(S_POST['url']);$filename='./images/'.rand().'.img';\file_put_contents($filename,$content);echo $_POST['ur1'];$img="<img src=\"".$filename."\"/>";}echo $img;?>fsockopen函數(shù)
打開一個網(wǎng)絡(luò)連接或者一個Unix套接字連接
<?phpShost=S_GET['ur1'];Sfp fsockopen("Shost",80,Serrno,Serrstr,30);if (!Sfp){echo "Serrstr (Serrno)<br />\n";}else}$out ="GET / HTTP/1.1\r\n";$out .="Host:$host\r\n";$out .="Connection:close\r\n\r\n";fwrite($fp,Sout);while (!feof($fp)){echo fgets($fp,128);}fclose($fp):}?>SSRF利用方式
Http和Https協(xié)議
File協(xié)議
Dict協(xié)議
Gopher協(xié)議
File協(xié)議
file協(xié)議主要用于訪問本地計算機(jī)中的文件,命令格式為:file:///文件路徑
可以利用file協(xié)議讀取目標(biāo)機(jī)有權(quán)限且確定路徑的文件
Dict協(xié)議
可以利用dict協(xié)議探測本地服務(wù)器(127.0.0.1)的端口以及內(nèi)網(wǎng)服務(wù)器存活以及開放
端口
dict://serverip:port/命令:參數(shù)
向服務(wù)器的端口請求為【命令:參數(shù)】,并在末尾自動補上\r\n(CRLF)
Gopher協(xié)議
Gopher是Internet上一個非常有名的信息查找系統(tǒng)
它將Internet上的文件組織成某種索引,很方便地將用戶從Internet的一處帶到另一處。在
WWW出現(xiàn)之前,Gopher是Internet上最主要的信息檢索工具,Gopher站點也是最主要的
站點,使用tcp70端口
gopher協(xié)議支持發(fā)出GET、POST請求
可以先截獲get請求包和post請求包,在構(gòu)成符合gopher協(xié)議的請求。gopher協(xié)議是ssrf
利用中最強大的協(xié)議
Gopher協(xié)議格式
gopher://<host>:<port>/<gopher-path>_后接TCP數(shù)據(jù)流
gopher的默認(rèn)端口是70
如果發(fā)起post請求,回車換行需要使用%0d%0a,如果多個參數(shù),參數(shù)之間的&也需要進(jìn)行
URL編碼
Gopher協(xié)議使用限制條件
| PHP | php版本>=5.3 |
| JAVA | 小于IDK1.7 |
| Curl | 低版本不支持 |
| Perl | 支持 |
| ASP.NET | 小于版本3 |
SSRF繞過技巧
攻擊本地
http://127.0.0.1:80
http://localhost:22
利用[::]
利用[::]繞過localhost
http://[::]:80/ <==>http://127.0.0.1
利用@
http://example.com@127.0.0.1/
利用短地址
https://bit.ly/2QyXEsz <==>http:/127.0.0.1
在線短地址生成工具
http://dwz.chacuo.net/bitly利用DNS解析
在域名上設(shè)置A記錄,指向127.0.0.1
利用句號
127。0。0。1<==>127.0.0.1
利用進(jìn)制轉(zhuǎn)換
可以是十六進(jìn)制,八進(jìn)制等
http://127.0.0.1<==>http://0177.0.0.1/
示范
打開picachu的SSRF(curl),點擊上方文字,更改訪問路徑,訪問百度。
?使用http協(xié)議讀info1.php詩
使用file協(xié)議讀本機(jī)文件內(nèi)容
使用http協(xié)議進(jìn)行存活ip探測
?使用http協(xié)議進(jìn)行端口探測
SSRF漏洞修復(fù)
禁止跳轉(zhuǎn)
過濾返回信息
如果web應(yīng)用是去獲取某一種類型的文件。那么在把返回結(jié)果展示給用戶之前先驗證返回的信息是否符合標(biāo)準(zhǔn)
禁用不需要的協(xié)議,僅僅允許http和https請求
可以防止類似于file://,gopher://,ftp://等引起的問題
設(shè)置URL白名單或者限制內(nèi)網(wǎng)IP
使用gethostbyname()判斷是否為內(nèi)網(wǎng)IP
限制請求的端口為http常用的端口
比如80、443、8080、8090
統(tǒng)一錯誤信息
避免用戶可以根據(jù)錯誤信息來判斷遠(yuǎn)端服務(wù)器的端口狀態(tài)
總結(jié)
- 上一篇: Vulhub 靶场安装
- 下一篇: bWAPP下载安装