1. 程式人生 > >文件上傳漏洞

文件上傳漏洞

exist ons 認識 可靠 多語 rip 上傳 解釋執行 利用

文件上傳漏洞

用戶上傳了一個可執行的腳本文件,並通過此腳本文件獲得了執行服務器端命令的能力。

文件上傳可能存在的安全問題:

(1)上傳文件為 Web 腳本,服務器的 Web 容器解釋並執行了該腳本,導致代碼執行——webshell

(2)上傳文件是 Flash 的策略文件 crossdomain.xml,攻擊者可以控制 Flash 在該域下的行為;

(3)上傳文件是病毒、木馬文件,攻擊者用以誘騙用戶或者管理員下載執行;

(4)上傳文件是釣魚圖片或包含了腳本的圖片,在某些版本的瀏覽器中被作為腳本執行,進而被用於欺詐。

webshell 形成的條件:

(1)上傳的文件位於 Web 容器能夠覆蓋的目錄,從而能夠被 Web 容器解釋執行;

(2)用戶能夠從 Web 上訪問這個文件,從而觸發 Web 容器解釋執行上傳的腳本;

另外,上傳的文件內容不被破壞,比如安全檢查、格式化、圖片壓縮等,確保上傳的腳本可用。

在防禦文件上傳漏洞的時候切忌使用黑名單機制,因為該方法不全面、不可靠。

文件上傳中的防與攻:

(1)防:上傳時檢測文件名後綴;攻:① 構造文件名 “filename.php.合法後綴”(原理:有些服務器端從左至右檢測文件,將遇到的第一個 “.???” 作為文件後綴;有些 Web Server 對文件名的解析時從右往左解析的,直到遇見一個它認識的文件類型為止,比如 Apache);② 構造文件名 “filename.php[\0].合法後綴”(原理:在大多語言中 “0x00” 或 “\0” 是終止符(0字節截斷)

,這種形式的文件名可以繞過應用的上傳文件類型判斷,但對於服務器端,此文件會因為 0字節截斷的問題,最終變成 filename.php);③ 在 IIS 提供 web 服務的站點中,構造文件名 “filename1.php;filename2.合法後綴”(原理:在 IIS 和 Windows 環境下,字符 “;” 常被用作截斷字符);

(2)防:上傳時檢測文件頭;攻:偽造合法的文件頭,當 Web Server 將該文件當做腳本文件解析時攻擊成功。

(3)用戶配置未妥當配置 Web 服務系統的一些功能帶來的安全隱患:① IIS 的 WebDav 中定義的 PUT、MOVE 方法。攻擊者可以通過 OPTIONS 方法探測服務器支持的 HTTP 方法類型,如果支持 PUT,則使用 PUT 上傳一個指定的文本文件,最後通過 MOVE 改寫為腳本文件。② PHP 的 CGI 路勁解析問題:當訪問 http://www.xxx.com/path/test.jpg/notexist.php 時,會將 test.jpg 當做 PHP 進行解析,其中 notexist.php 是不存在的文件。原因是,當 PHP 的配置選項 cgi.fix_pathinfo=1

時,在映射 URI 的時候將遞歸查詢路徑確認文件的合法性。notexist.php 是不存在的,所以將往前遞歸查詢路徑,直到檢測到存在的 test.jpg 文件。此時 SCRIPT_FILENAME 為 /path/test.jpg,而 PATH_INFO 為 notexist.php,最終 test.jpg 被當做 PHP 文件進行解析。

(4)利用上傳文件釣魚:低版本的 IE 瀏覽器(IE6/7)會將圖片文件當做 HTML 進行解析,不懷好意者可以將網頁跳轉的代碼藏在圖片裏,然後將圖片上傳,然後傳播該圖片。查看該圖片的用戶將被跳轉到一個惡意站點,掉進壞人的陷阱。

避免文件上傳功能帶來的安全問題

(1)文件上傳的目錄設置為不可執行;

(2)用白名單機制判斷文件類型(文件後綴、文件頭);

(3)對上傳的文件做更改文件名、壓縮、格式化等預處理;

(4)單獨設置文件服務器的域名。

文件上傳漏洞