1. 程式人生 > 其它 >技術解析 | Web快取欺騙測試

技術解析 | Web快取欺騙測試

前言:

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之類的連線請求。