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