Overview
?函數(shù) fsockopen() 將使用資源 URI 的用戶控制數(shù)據(jù)啟動與第三方系統(tǒng)的網(wǎng)絡(luò)連接。攻擊者可以利用此漏洞代表應(yīng)用程序服務(wù)器發(fā)送一個(gè)請求,因?yàn)榇苏埱髮⒆詰?yīng)用程序服務(wù)器內(nèi)部 IP 地址發(fā)出。
Details
當(dāng)攻擊者可以影響應(yīng)用程序服務(wù)器建立的網(wǎng)絡(luò)連接時(shí),將會發(fā)生 Server-Side Request Forgery。網(wǎng)絡(luò)連接源自于應(yīng)用程序服務(wù)器內(nèi)部 IP 地址,因此攻擊者將可以使用此連接來避開網(wǎng)絡(luò)控制,并掃描或攻擊沒有以其他方式暴露的內(nèi)部資源。?
示例:在下列示例中,攻擊者將能夠控制服務(wù)器連接至的 URL。
$url = $_GET['url'];
$c = curl_init();
curl_setopt($c, CURLOPT_POST, 0);
curl_setopt($c,CURLOPT_URL,$url);
$response=curl_exec($c);
curl_close($c);
攻擊者能否劫持網(wǎng)絡(luò)連接取決于他可以控制的 URI 的特定部分以及用于建立連接的庫。例如,控制 URI 方案將使攻擊者可以使用不同于 http 或 https 的協(xié)議,類似于下面這樣:
- up:// - ldap:// - jar:// - gopher:// - mailto:// - ssh2:// - telnet:// - expect://
攻擊者將可以利用劫持的此網(wǎng)絡(luò)連接執(zhí)行下列攻擊: - 對內(nèi)聯(lián)網(wǎng)資源進(jìn)行端口掃描。 - 避開防火墻。 - 攻擊運(yùn)行于應(yīng)用程序服務(wù)器或內(nèi)聯(lián)網(wǎng)上易受攻擊的程序。 - 使用 Injection 攻擊或 CSRF 攻擊內(nèi)部/外部 Web 應(yīng)用程序。 - 使用 file:// 方案訪問本地文件。 - 在 Windows 系統(tǒng)上,file:// 方案和 UNC 路徑可以允許攻擊者掃描和訪問內(nèi)部共享。 - 執(zhí)行 DNS 緩存中毒攻擊。
Recommendations
請勿基于用戶控制的數(shù)據(jù)建立網(wǎng)絡(luò)連接,并要確保請求發(fā)送給預(yù)期的目的地。如果需要提供用戶數(shù)據(jù)來構(gòu)建目的地 URI,請采用間接方法:例如創(chuàng)建一份合法資源名的列表,并且規(guī)定用戶只能選擇其中的文件名。通過這種方法,用戶就不能直接由自己來指定資源的名稱了。 但在某些情況下,這種方法并不可行,因?yàn)檫@樣一份合法資源名的列表過于龐大,維護(hù)難度過大。因此,在這種情況下,程序員通常會采用執(zhí)行拒絕列表的辦法。文章來源:http://www.zghlxwxcb.cn/news/detail-812472.html
在輸入之前,拒絕列表會有選擇地拒絕或避免潛在的危險(xiǎn)字符。但是,任何這樣一個(gè)列表都不可能是完整的,而且將隨著時(shí)間的推移而過時(shí)。更好的方法是創(chuàng)建一個(gè)字符列表,允許其中的字符出現(xiàn)在資源名稱中,且只接受完全由這些被認(rèn)可的字符組成的輸入。 此外,如果需要,還要確保用戶輸入僅用于在目標(biāo)系統(tǒng)上指定資源,但 URI 方案、主機(jī)和端口由應(yīng)用程序控制。這樣就可以大大減小攻擊者能夠造成的損害。文章來源地址http://www.zghlxwxcb.cn/news/detail-812472.html
到了這里,關(guān)于開發(fā)安全之:Server-Side Request Forgery的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!