您好,登錄后才能下訂單哦!
這篇“SSRF保護(hù)機(jī)制是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“SSRF保護(hù)機(jī)制是什么”文章吧。
當(dāng)在Web應(yīng)用程序中找到一個(gè)可以獲取的外部資源的功能。你可以從各種外部站點(diǎn)讀取內(nèi)容,并且可以請(qǐng)求的文件類(lèi)型不會(huì)有任何限制,應(yīng)用程序會(huì)立即顯示所有內(nèi)容。這個(gè)現(xiàn)象告訴你,接下來(lái)該嘗試一下是否存在SSRF漏洞了。所以你開(kāi)始輸入:127.0.0.1。但是僅過(guò)了一秒鐘,服務(wù)器返回了一個(gè)意想不到的響應(yīng):
Error. Requests to this address are not allowed. Please try again.
所以現(xiàn)在該做什么?
企業(yè)確實(shí)意識(shí)到了SSRF攻擊的風(fēng)險(xiǎn)。所以大多數(shù)人已經(jīng)在他們的Web應(yīng)用程序中實(shí)現(xiàn)了某種形式的SSRF保護(hù)。SSRF保護(hù)機(jī)制基本上分兩種:黑名單和白名單。
黑名單指的是如果接收到的輸入為列在黑名單上的地址,那么不允許這些地址且阻止請(qǐng)求的處理。大多數(shù)SSRF是采用的黑名單來(lái)保護(hù)不允許探測(cè)內(nèi)網(wǎng)IP地址段。
另一方面,白名單指的是服務(wù)器只允許接收處理在預(yù)先設(shè)定好的白名單列表里包含的URL的請(qǐng)求,并使得其他請(qǐng)求處理失敗。
白名單通常更難繞過(guò),因?yàn)槟J(rèn)情況下相對(duì)于黑名單而言,白名單更加嚴(yán)格。但是如果白名單中的域中存在開(kāi)放的重定向漏洞,則可能存在SSRF漏洞。
如果您可以找到可利用的重定向漏洞,則可以請(qǐng)求重定向到內(nèi)部IP地址段的白名單中的域。
如果沒(méi)有正確利用白名單(例如,使用了設(shè)計(jì)不好的正則表達(dá)式),那么也可以通過(guò)使用子域名或目錄的形式作為列入白名單的域名來(lái)繞過(guò)(例如,victime.com.attacker.com或attacker.com/victim.com )。
但是由于應(yīng)用程序本身的需要(獲取外部資源),大多數(shù)SSRF保護(hù)機(jī)制都是以黑名單形式出現(xiàn)。如果遇到黑名單,有很多種方法可以欺騙服務(wù)器:
使服務(wù)器請(qǐng)求你所控制的URL重定向到黑名單地址。例如可以在自己可控的Web服務(wù)器上托管如下內(nèi)容的文件:
<?php header(“l(fā)ocation:http://127.0.0.1”);?>
假設(shè)此文件位于http://attakcer.com/redirect.php ,這樣當(dāng)你的目標(biāo)服務(wù)器請(qǐng)求http://attakcer.com/redirect.php ,目標(biāo)服務(wù)器實(shí)際上被重定向到http://127.0.0.1 ,這是一個(gè)受限制的內(nèi)部地址。
修改可控的域的A記錄或者AAAA記錄,并使其指向受害者網(wǎng)絡(luò)的內(nèi)部地址。例如,假設(shè)http://attacker.com 是你可控的子域名。你可以創(chuàng)建自定義主機(jī)名到IP地址映射,使得http://subdomain.attacker.com 解析到127.0.0.1?,F(xiàn)在當(dāng)目標(biāo)服務(wù)器請(qǐng)求http://attacker.com ,它會(huì)認(rèn)為你的域位于127.0.0.1,并從改地址請(qǐng)求數(shù)據(jù)。
嘗試使用IPv6地址而不是IPv4地址,因?yàn)榉?wù)器可能尚未針對(duì)IPv6實(shí)施而實(shí)施了針對(duì)IPv4的保護(hù)機(jī)制。
有很多不同的編碼URL或地址可以使服務(wù)器正常解析,但是可以繞過(guò)黑名單的限制。這些編碼包括十六進(jìn)制編碼,八進(jìn)制編碼,雙字編碼,URL編碼和混合編碼。
十六進(jìn)制編碼
十六進(jìn)制編碼是一種表示通過(guò)以16為基底的字符表現(xiàn)形式(字符從0到F),而不是以10為基底(字符從0到9)。說(shuō)明服務(wù)器可以理解hex編碼后的IP地址。將10進(jìn)制IP地址轉(zhuǎn)為16進(jìn)制的IP地址,你需要計(jì)算每個(gè)段,例如
127.0.0.1 -> 0x7f.0x0.0x0.0x1
以0x開(kāi)始說(shuō)明這是一個(gè)hex編碼后的數(shù)字。
八進(jìn)制編碼
八進(jìn)制編碼是一種以8為基底表現(xiàn)字符的形式。和轉(zhuǎn)hex編碼差不多,你可以將IP地址轉(zhuǎn)為8進(jìn)制的IP地址形式。例如
127.0.0.1 -> 0177.0.0.01
這樣的情況下,0開(kāi)頭的數(shù)字基本就是8進(jìn)制格式下的數(shù)字。
雙字符編碼
dword代表雙字符,是一個(gè)32位整數(shù)。IP地址基本上是32位數(shù),分為4個(gè)八位字節(jié),并以10進(jìn)制寫(xiě)入。例如127.0.0.1實(shí)際上就是01111111.00000000.00000000.00000001。所以當(dāng)我們01111111000000000000000000000001轉(zhuǎn)為一個(gè)10進(jìn)制數(shù)時(shí),也就是得到了雙字符形式下的IP地址。
那么如果將127.0.0.1轉(zhuǎn)為雙字符形式?即127*2563+0*2562+0*2561+1*256?,計(jì)算得到2130706433。意味著如果輸入為http://2130706433 而不是http://127.0.0.1 ,仍然可以正常解析。
URL編碼
URL中的每個(gè)單獨(dú)字符可以用其指定的十六進(jìn)制數(shù)表示,如果它們前面帶有%符號(hào)。例如,單詞“l(fā)ocalhost”可以用其URL編碼來(lái)表示,“%6c%6f%63%61%6c%68%6f%73%74”。因此,當(dāng)服務(wù)器阻止對(duì)內(nèi)部主機(jī)名(例如“l(fā)ocalhost”)的請(qǐng)求時(shí),請(qǐng)嘗試使用URL編碼的等效命令。
混合編碼
這是混搭時(shí)間!你也可以使用編碼技術(shù)的組合來(lái)試圖欺騙服務(wù)器:也許這會(huì)起作用?
127.0.0.1 -> 0177.0.0.0x1
以上就是關(guān)于“SSRF保護(hù)機(jī)制是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。