SSRF安全漏洞以及防御實(shí)現(xiàn)

簡(jiǎn)介

SSRF即服務(wù)端請(qǐng)求偽造,利用漏洞偽造服務(wù)端發(fā)起請(qǐng)求,從而突破客戶(hù)端獲取不到數(shù)據(jù)的限制

形成的原因

服務(wù)端提供了從其他服務(wù)器獲取數(shù)據(jù)的功能且沒(méi)有對(duì)目標(biāo)地址做過(guò)濾和限制

場(chǎng)景

當(dāng)我們向一臺(tái)服務(wù)器發(fā)起請(qǐng)求的時(shí)候,我們把請(qǐng)求的地址改成了獲取與該服務(wù)器相連的內(nèi)網(wǎng)服務(wù)器資源的地址,從而可以獲取另一臺(tái)服務(wù)器上的數(shù)據(jù)

解決方案

協(xié)議的限制

當(dāng)請(qǐng)求方法允許其他協(xié)議的時(shí)候,可能利用file,ftp等協(xié)議進(jìn)行第三方服務(wù)利用來(lái)獲取權(quán)限
對(duì)URL的協(xié)議默認(rèn)只能允許http和https,當(dāng)然用戶(hù)可以根據(jù)自己的實(shí)際情況再補(bǔ)充一些允許訪(fǎng)問(wèn)的協(xié)議

IP限制

  1. 當(dāng)IP為內(nèi)網(wǎng)IP時(shí),默認(rèn)情況下是不允許訪(fǎng)問(wèn)的,通常將以下四個(gè)段設(shè)置為內(nèi)網(wǎng)IP段:
192.168.0.0 ~ 192.168.255.255
10.0.0.0 ~ 10.255.255.255
127.0.0.0 ~ 127.255.255.255
172.16.0.0 ~ 172.31.255.255

如何判斷一個(gè)IP地址是否屬于內(nèi)網(wǎng)IP段呢?眾所周知,IP地址是可以轉(zhuǎn)換成一個(gè)整數(shù)的,而且IP地址是和整數(shù)一一對(duì)應(yīng)的,我們判斷一個(gè)IP是否在一個(gè)IP段里面,只需將Ip段的起始值,目標(biāo)IP值全部轉(zhuǎn)換為整數(shù),然后比較大小即可。

  1. 利用這個(gè)理論還能解決另外一個(gè)問(wèn)題,假設(shè)此時(shí)有一個(gè)ip:10.0.0.1,它的八進(jìn)制形式為012.0.0.1,相應(yīng)的還有它的十六進(jìn)制,十進(jìn)制以及省略寫(xiě)法,請(qǐng)求012.0.0.1將相當(dāng)于請(qǐng)求10.0.0.1,所以?xún)H僅憑借IP字符串是否相同是不能做到有效的過(guò)濾的,為了解決這個(gè)問(wèn)題,采用了和上面一樣的解決辦法,將IP的各個(gè)形式轉(zhuǎn)換成一個(gè)整數(shù),比較整數(shù)是否相等判斷是否是同一個(gè)IP
    在這里我調(diào)用了一個(gè)第三方的庫(kù)來(lái)實(shí)現(xiàn)這個(gè)功能。
  2. 設(shè)置白名單和黑名單驗(yàn)證:首先判斷該IP是否在黑名單中,不在直接訪(fǎng)問(wèn);在的話(huà)接著判斷是否在白名單中,在則允許訪(fǎng)問(wèn),否則不允許訪(fǎng)問(wèn)

域名限制

不能通過(guò)簡(jiǎn)單的將域名放到白名單黑名單中對(duì)比來(lái)判斷是不是允許訪(fǎng)問(wèn),我們需要首先將域名解析成ip,因?yàn)樵撚蛎壎ǖ腎P可能是一個(gè)惡意IP,然后再對(duì)IP進(jìn)行上述的判斷

URL跳轉(zhuǎn)

當(dāng)我們請(qǐng)求的目標(biāo)返回3xx狀態(tài)的時(shí)候,如果沒(méi)有禁止跳轉(zhuǎn)的設(shè)置,如果跳轉(zhuǎn)的地址是內(nèi)網(wǎng)地址,將會(huì)造成SSRF漏洞
對(duì)此有兩種解決辦法:

  • 不允許目標(biāo)進(jìn)行跳轉(zhuǎn)
  • 每跳轉(zhuǎn)一次就檢查新的HOST是否符合上面的驗(yàn)證規(guī)范

實(shí)現(xiàn)過(guò)程:

  • 創(chuàng)建一個(gè)HttpURLConnection連接對(duì)象
  • 使用這個(gè)對(duì)象創(chuàng)建一個(gè)URL連接,如果返回的狀態(tài)碼為3xx,說(shuō)明發(fā)生了重定向,再去返回的頭信息的location字段中找到要重定向的url
  • 接著重復(fù)上述過(guò)程
最后編輯于
?著作權(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)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,697評(píng)論 18 399
  • 0x00原理 一般的請(qǐng)求:客戶(hù)端發(fā)起請(qǐng)求,服務(wù)器響應(yīng)。 另外一種請(qǐng)求:客戶(hù)端發(fā)起請(qǐng)求(向服務(wù)端提供一個(gè)URL),服...
    0x525c閱讀 2,659評(píng)論 0 1
  • 期中考試成績(jī)出來(lái)了,閨女的成績(jī)?cè)谖乙饬现袥](méi)考好,離我對(duì)她的要求差很多,她自己也覺(jué)著很難過(guò),中午吃飯時(shí)我一提...
    若塵_27ac閱讀 142評(píng)論 0 0
  • 昔日年少愁思卻, 瀲滟低眉累絲斜。 須臾春秋幾多載, 已教清淺渡寒劫。 半盞風(fēng)存花色舊, 折枝驚雀入殘穴。 莫欺稚...
    男神是浩森吖閱讀 354評(píng)論 0 0
  • 回看QQ相冊(cè)里的老照片,沒(méi)有美顏,沒(méi)有高清像素,但是笑的像個(gè)孩子,畢竟那時(shí)候我就是個(gè)孩子! 長(zhǎng)大了,老媽還記得我的...
    李紫澀閱讀 1,133評(píng)論 0 1

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