路徑攻擊又稱為 Directory Transversal,這是個很普遍的攻擊方式,一個正常網站都是裝在網頁伺服器裡面,而一個伺服器除了網頁會用的 html 之外,還會存著各種資料庫,管理員的帳號、密碼,若是網站存在路徑漏洞,駭客就能透過給予特定的路徑,試圖去瀏覽網站儲存帳密的檔案。
例如我們平常看的網頁 URL 是這樣
若是我們故意將 URL 改成
那麼伺服器是否會將 C:/windows/user.db 這個檔案印出來呢? 當然不是這麼簡單,目前市面上的瀏覽器以及網頁伺服器都會自動阻擋這種攻擊。
雖然伺服器已經有了基本的防護,但市面上的程式是由世界各地工程師寫的,每個工程師能力不同,有些地方仍然會存在著相關的漏洞,接下來就開始介紹網站常見的路徑漏洞。
頁面程式檔案切換漏洞
上面這個網址是很常見的程式寫法,當 page = news 時,網站就會去執行 news.php 這個檔案,若是 page = guestbook 時,網站就會去執行 guestbook.php 這個檔案。
看起來是一個很正常的邏輯,但是駭客卻可以輸入 page = ../../data/users.db,如果網站剛好有 data/users.db 這個檔案,這樣駭客就可以讀取資料庫裡的內容了。
你一定會想說,可是我的網站不會有 data/users.db 這種檔案,駭客要怎麼知道我的網站資料夾結構會是什麼呢? 其實這不是什麼大問題,因為大部分人用的網站伺服器都是 apache, IIS, nginx, appserver, xampp 等,而作業系統不是 windows 就是 Linux , Framework 有 wordpress, drupal, CodeIgniter, smarty , cakephp,只要駭客對這些軟體有足夠的認識,那麼駭客就能輕易的猜出系統重要的檔案路徑。
例如 Linux 系統會將 OS 帳號資料存在 /etc/passwd 這個檔案中,所以駭客利用下列這個路徑就能取得帳號資料。
Cookie 讀取檔案
有些網站提供了 theme 的切換功能,也就是讓 user 可以將網頁切換到不同的 style,如經典風,鄉村風等等。
有些工程師為了操作簡單,就會使用 Cookie 來記錄 User 選擇的 theme, 當 theme=classic 時,程式就會載入 classic 風格的檔案,當然這樣的寫法也有一樣漏洞。
駭客可以設定 Cookie,將 theme 這個 key 寫入 「../../etc/passwd」,就能再度 Hack 成功。
Url Encode & Decode
「/」 這個符號有可能會被程式給過瀘掉,如果說我們將 「/」 轉成 HEX 編碼 「%2f」,就能繞過某些程式檢查。
Encode 過後的結果: ../../ => ..%2f..%2f
另一個 Encode 的原因,大部分的瀏覽器會將 http://xx/a/b/../../../ 轉成 http://xx/ ,這樣就失去跳上一層目錄的功能,所以我們先對 Url 編碼,Url 就會變成 http://xx/a/b/..%2f..%2f..%2f ,若是伺服器的 Rewrite Rule 語法寫得不好,駭客就有機會能夠讀取到上一層的目錄,或是讀取 PHP 程式原始碼。
- windows 的檔案目錄結尾是使用「\」,與 Linux 系統的 「/」不同,所以 encode 過後的值也不同,「\」 => 「%5C」
- echo urlencode("/ ");
- //輸出 = %2F %5C
IIS 伺服器有額外支援 Unicode 的路徑,所以可以使用 Unicode encode 「/」 => 「%c1%1c」,「\」=> 「%c0%af」