目錄遍歷漏洞詳解
Web伺服器主要提供兩個級別的安全機制:
- 訪問控制列表——就是我們常說的ACL
- 根目錄訪問
訪問控制列表是用於授權過程的,它是一個Web伺服器的管理員用來說明什麼使用者或使用者組能夠在伺服器上訪問、修改和執行某些檔案的列表,同時也包含了其他的一些訪問許可權內容。
根目錄是伺服器檔案系統中一個特定目錄,它往往是一個限制,使用者無法訪問位於這個目錄之上的任何內容。
例如:在Windows
根目錄的存在能夠防止使用者訪問伺服器上的一些關鍵性檔案,譬如在Windows平臺上的cmd.exe或是Linux/Unix平臺上的口令檔案。
這個漏洞可能存在於Web伺服器軟體本身,也可能存在於Web應用程式的程式碼之中。
要執行一個目錄遍歷攻擊,攻擊者所需要的只是一個web瀏覽器,並且有一些關於系統的一些預設檔案和目錄所存在的位置的知識即可。
如果你的站點存在這個漏洞,攻擊者可以用它來做些什麼?
利用這個漏洞,攻擊者能夠走出伺服器的根目錄,從而訪問到檔案系統的其他部分,譬如攻擊者就能夠看到一些受限制的檔案,或者更危險的,攻擊者能夠執行一些造成整個系統崩潰的指令。
依賴於web站點的訪問是如何設定的,攻擊者能夠仿冒成站點的其他使用者來執行操作,而這就依賴系統對Web站點的使用者是如何授權的。
(1)利用Web應用程式碼進行目錄遍歷攻擊的例項
在包含動態頁面的Web應用中,輸入往往是通過GET或是POST的請求方法從瀏覽器獲得,以下是一個GET的Http URL請求示例:
http://test.webarticles.com/show.asp?view=oldarchive.html
利用這個URL,瀏覽器向伺服器傳送了對動態頁面show.asp的請求,並且伴有值為oldarchive.html的view引數,當請求 在Web伺服器端執行時,show.asp會從伺服器的檔案系統中取得oldarchive.html檔案,並將其返回給客戶端的瀏覽器,那麼攻擊者就可 以假定show.asp能夠從檔案系統中獲取檔案並編制如下的URL:
http://test.webarticles.com/show.asp?view=../../../../../Windows/system.ini
那麼,這就能夠從檔案系統中獲取system.ini檔案並返回給使用者,../的含義這裡就不用多說了,相信大家都會明白。攻擊者不得不去猜測需要往上多少層才能找到Windows目錄,但可想而知,這其實並不困難,經過若干次的嘗試後總會找到的。
除了Web應用的程式碼以外,Web伺服器本身也有可能無法抵禦目錄遍歷攻擊。這有可能存在於Web伺服器軟體或是一些存放在伺服器上的示例指令碼中。
在最近的Web伺服器軟體中,這個問題已經得到了解決,但是在網上的很多Web伺服器仍然使用著老版本的IIS和Apache,而它們則可能仍然無法抵禦這類攻擊。即使你使用了已經解決了這個漏洞的版本的Web伺服器軟體,你仍然可能會有一些對黑客來說是很明顯的存有敏感預設指令碼的目錄。
例如,如下的一個URL請求,它使用了IIS的指令碼目錄來移動目錄並執行指令:http://server.com/scripts/..%5c../Windows/System32/cmd.exe?/c+dir+c:\
這個請求會返回C:\目錄下所有檔案的列表,它使通過呼叫cmd.exe然後再用dir c:\來實現的,%5c是web伺服器的轉換符,用來代表一些常見字元,這裡表示的是“\”
新版本的Web伺服器軟體會檢查這些轉換符並限制它們通過,但對於一些老版本的伺服器軟體仍然存在這個問題。
如何判斷是否存在目錄遍歷漏洞?
最好的方式就是使用Web漏洞掃描器,Web漏洞掃描器能夠遍歷你Web站點的所有目錄以判斷是否存在目錄遍歷漏洞,如果有它會報告該漏洞並給出解決的方法,除了目錄遍歷漏洞以外,Web應用掃描還能檢查SQL注入、跨站點指令碼攻擊以及其他的漏洞。
“遍歷目錄”其實並不能算是漏洞,因為它是IIS的一個功能項。在IIS中將該選項勾上後,使用者就可以通過目錄的形式訪問網站中的檔案,通常這項功能被用於共享檔案。但由於管理員的疏忽或經驗不足,在網站中開啟了這項功能,這就是一個不折不扣的大漏洞了。