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