當前位置:
首頁 > 新聞 > 技術解析 | Web緩存欺騙測試

技術解析 | Web緩存欺騙測試

*本文原創作者:m09046105,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


前言:


Omer Gil在BlackHat USA 2017 和BSides Tel-Aviv 2017 上,對Web 緩存欺騙技術這種攻擊技術進行了演示,在他發布的「Web 緩存欺騙技術白皮書」中也做了詳細的介紹。在特定情況下,web緩存欺騙攻擊可以導致攻擊者獲得受害者的敏感信息。

Web緩存是指Web資源以副本的形式介於Web伺服器和客戶端之間,當下一個相同請求來到的時候,會根據緩存機制決定是直接使用副本響應訪問請求,還是向源伺服器再次發送請求。在實際應用中,web緩存十分常見,主要是Web緩存有著如下的優點:產生極小的網路流量,減少對源伺服器的請求,降低伺服器的壓力, 同時能夠明顯加快頁面打開速度。緩存分為以下幾種類型:(1)資料庫緩存,當web應用的資料庫表繁多,為了提供查詢的性能,會將查詢後的數據放到內存中進行緩存,下次從內存緩存直接返回,比如memcached(2)瀏覽器緩存,瀏覽器會將一些頁面緩存到客戶端 ,不同的瀏覽器有著自己的緩存機制。(3) 服務端緩存:常見的服務端緩存比如:CND、Squid、Nginx反向代理等。


0x00漏洞原理


假設我們要訪問的某個網站使用了伺服器緩存技術,架構如下:



當註冊的用戶成功登入了該網站,會跳轉到自己的賬戶頁面my.php,該Nginx反向代理伺服器會將css、js、jpg等靜態資源緩存到nginx設定的目錄下。受害者不小心在瀏覽器中輸入了如下的url:http://victim.com/my.php/favicon.ico , favicon.ico 並不存在,此時會發什麼神奇的事情呢?


Nginx反向代理伺服器發現url以靜態文件的擴展名(.ico)結尾,由於favicon.ico 不存在,它的緩存機制會將 my.php 緩存到緩存目錄中,這時攻擊者訪問了:http://victim.com/my.php/favicon.ico ,之前 緩存的帳戶頁面便成功返回給了攻擊者。


0x01利用條件:


經過上一步的分析,我們知道該漏洞要想成功利用需要滿足三個條件:



1.訪問http://victim.com/my.php/favicon.ico 頁面時, Web伺服器返回了該my.php的內容


2. 伺服器的緩存機制通過url中的擴展名來判斷是否進行緩存文件,並且忽略任何緩存頭。

3.受害者必須訪問過了http://victim.com/my.php/favicon.ico 這種頁面,也就是說受害者已經將my.php的內容緩存到了緩存伺服器上。


要想滿足以上幾個條件,需要考慮到不同的web伺服器、代理機制以及瀏覽器著各自的特性。比如:我們在tomcat伺服器上訪問http://victim.com/my.jsp/1.css,伺服器無法返回my.jsp的內容,因此這種攻擊無法利用在tomcat+java上面。


0x02漏洞演示:

test.php<?phpecho "123";?>



通過以上的實驗,我們知道apache+ php,滿足第一個條件:訪問http://victim.com/my.php/favicon.ico 頁面時,Web伺服器返回了該my.php的內容。我們的緩存功能使用的是nginx反向代理中的緩存功能,nginx的緩存機制是根據url中的擴展名來判斷是否進行緩存文件,同時我們設置其忽略任何緩存頭,因此也滿足了第二個條件。


Web伺服器的登入頁面和賬戶頁面:

Login.php<html><head><title>login</title></head><body><form   action="my.php" method="post"><input name="name" type="text" value="<?php echo $_COOKIE["name"]; ?>" /><input type="submit" name="submit" value="Login" /></form></body></html>My.php<?php  $name = $_POST["name"];$cookie = $_COOKIE["name"];if($name=="admin"){echo "Welcome ".$_POST["name"] ;setcookie("name",$name,time()+600);}else{if($cookie=="admin"){echo "Welcome ".$_COOKIE["name"] ;}else{echo "<script>window.location.href = "./login.php";</script>";}}?>

當用戶成功登入之後,跳轉到自己的賬戶頁面my.php


此時我們通過社工的方法誘使管理員訪問了my.php/靜態資源 的url,便在nginx 緩存目錄中發現了緩存的管理員的my.php頁面。




當我換一個瀏覽器firefox訪問 /my.php/1.css地址的時候,成功返回來之前admin用戶緩存到nginx緩存目錄裡面的內容,即admin的賬戶信息!



0x03漏洞危害及利用


正如前文所說的漏洞利用條件,此外還需要結合社工的方法,誘使登入網站的用戶特別是有許可權的用戶(管理員)等,訪問http://victim.com/my.php/靜態資源 這種形式的鏈接。


攻擊者通過這種攻擊,可以獲取到受害者的賬戶等敏感信息。


0x04預防措施


預防該類攻擊,只要保證以上的攻擊條件中有任何一個不滿足即可實現,通過以下三個方面來預防:

(1)合理配置web伺服器


通過配置伺服器對於http://victim.com/my.php/favicon.ico 這類的請求頁面,不返回my.php頁面的內容,可以返回404或302.


(2)合理設置緩存機制


將緩存文件的緩存機制配置為僅當緩存文件的HTTP緩存標頭允許時才進行緩存。


(3)提高管理員等的安全意識


作為網站的用戶,禁止訪問http://victim.com/my.php/favicon.ico之類的連接請求。


*本文原創作者:m09046105,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

FreeBuf街采 | 新年第一彈!FB小姐姐的信息安全小調查
駐場工程師眼中的政務雲安全

TAG:FreeBuf |