第十章 物理路徑泄露的探討(1 / 1)

第十章 物理路徑泄露的探討

原理

物理路徑泄露屬於低風險等級缺陷,它的危害一般被描述為"攻擊者可以利用此漏洞得到信息,來對係統進一步地攻擊"。提供Web、FTP、SMTP等公共服務的服務器都有可能出現物理路徑泄露的問題。

我們比較常見的是Web服務器的路徑泄露。導致Web服務器路徑泄露的原因很多,可能是Web平台本身、腳本語言解釋器、引擎插件、組件、輔助程序等一些原因造成的,也有可能是腳本編寫錯誤所導致的。

很多時候,攻擊者會精心構造一個畸形、超長或不存在的文件請求,而這個請求是Web服務器沒有預料且不能正確處理的,這時往往會返回出錯信息--最直觀的就是暴露物理路徑。

譬如,對於很多CGI論壇來說,提交一個不存在的CGI文件請求,或者提交一個沒有輸出的CGI文件的請求,服務器就會將網站本身所有的物理路徑給暴露出來。筆者做過很多試驗,非常輕鬆就拿到了對方網站的物理路徑。

危害

得到物理路徑到底有什麼用?這是很多攻擊者關心的問題。有些時候它能給攻擊者帶來一些有用的信息,比如說:可以大致了解係統的文件目錄結構;可以看出係統所使用的第三方軟件;也說不定會得到一個合法的用戶名(因為很多人把自己的用戶名作為網站的目錄名)。

防範方法

漏洞雖小,但"千裏之堤,潰於蟻穴"。防範方法也是有的,這裏選用IIS來講解。首先你得保證使用最新版本並打了最新補丁,包括IIS、腳本語言解釋器(如Activeperl)、引擎插件、組件、輔助程序;其次是配置方麵的問題,一定要查看"文件是否存在"選項是否存在。

具體操作:"IIS→站點→屬性→主目錄→配置→應用程序映射→編輯→檢查文件是否存在"。這樣做不僅可避免"請求不存在文件"時泄露路徑,還可阻擋一些其它攻擊,如拒絕服務或溢出攻擊。

還記得綠盟發現的ActivePerl所帶的一個動態鏈接庫(perllS.dll)在處理超長文件名時存在的一個緩衝區溢出漏洞嗎?最簡單的解決方法就是禁止服務器檢查文件是否存在,再者便是要求程序員編寫規範腳本,這也是很重要的。

錯誤處理是各種語言編程中一個很重要的部分,雖然每種語言都提供了完善的出錯處理函數,但你也得正確使用它。如Perl中的"die"函數,如果沒有在錯誤信息後麵加上"

"的話,就很可能會導致物理路徑泄露。然而,腳本程序員卻一直忽略了這些問題,任何時候程序員都應該充分考慮,給出完整的出錯處理方案。

物理路徑泄露很危險,要徹底完整地分析它需要很多方麵的知識,可惜一直沒人來專門討論這個話題。