路徑遍歷攻擊(也稱做目錄遍歷)的目標是訪問web根目錄外存儲的文件和目錄。經過操縱使用「點-斜線(../)」序列及其變體引用文件的變量或使用絕對文件路徑,能夠訪問存儲在文件系統上的任意文件和目錄,包括應用程序源代碼或配置和關鍵的系統文件。應該注意的是,對文件的訪問受到系統操做訪問控制的限制(例如在Microsoft Windows操做系統上鎖定或使用中的文件)。這種攻擊也被稱爲「點點斜線」,「目錄遍歷」,「目錄爬升」和「回溯」。nginx
Unix類 OS:web
根目錄: "/" 目錄分割符: "/"
Windows OS:shell
根目錄: "<驅動器盤符>:\" 目錄分割符: "\" or "/"
經典 Mac OS:瀏覽器
根目錄: "<驅動器盤符>:" 目錄分割符: ":"
接下來的示例展示了應用是如何處理使用的資源的安全
http://example.com/getUserProfile.jsp?item=../../../../etc/
又好比這個Cookie的例子:服務器
Cookie: USER=1826cc8f:PSTYLE=../../../../etc/passwd
在這些示例中,能夠插入惡意字符串做爲變量參數來訪問位於Web發佈目錄以外的文件。jsp
http://some_site.com.br/get-files?file=../../../../some dir/some file http://some_site.com.br/../../../../some dir/some file
接下來的URL展顯了 *NIX 密碼文件泄露ide
http://some_site.com.br/../../../../etc/shadow http://some_site.com.br/get-files?file=/etc/passwd
注意:在Windows系統中,攻擊者只能訪問Web根目錄位於的分區中,而在Linux中,他能夠訪問整個磁盤。學習
<?php $dir_path=$_REQUEST['path']; $page=scandir($dir_path); var_dump($page); ?>
<?php $template = ""; $template = $_COOKIE['TEMPLATE']; include ( $template ); ?>
Site: xx.com intext:Index OF
有些Web應用程序是經過限定目錄權限來分離的。可使用一些特殊的符號~
來繞過。好比提交這樣的xxx.php?page=~/../boot
。就能夠直接跳轉到硬盤目錄下。
一些Web應用程序在讀取文件前,會對提交的文件後綴進行檢測,攻擊者能夠在文件名後放一個空字節的編碼,來繞過這樣的文件類型的檢查。
好比:../../../../boot.ini%00.jpg
,Web應用程序使用的Api會容許字符串中包含空字符,當實際獲取文件名時,則由系統的Api會直接截短,而解析爲../../../../boot.ini
。
在類Unix的系統中也可使用Url編碼的換行符,例如:../../../etc/passwd%0a.jpg
若是文件系統在獲取含有換行符的文件名,會截短爲文件名。也能夠嘗試%20,例如: ../../../index.php%20
Http Referer : HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的
在一些Web應用程序中,會有對提交參數的來路進行判斷的方法,而繞過的方法能夠嘗試經過在網站留言或者交互的地方提交Url再點擊或者直接修改Http Referer便可,這主要是緣由Http Referer是由客戶端瀏覽器發送的,服務器是沒法控制的,而將此變量看成一個值得信任源是錯誤的。
一、系統開發階段的防護
在系統開發階段應充分考慮系統的安全性,對目錄遍歷漏洞來講,需對用戶提交的內容進行嚴格的過濾,這裏主要指過濾目錄跳轉符,字符截斷符,dir命令等。
二、系統運行階段的防護
nginx配置open_basedir=/home/wwwroot/blog.evalshell.com:/tmp/:/proc/