【W(wǎng)EB開發(fā)】文件上傳常見防御與突破總結(jié)
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
一、簡介 文件上傳是指用戶上傳了一個(gè)可執(zhí)行腳本,并通過此腳本文件獲得了執(zhí)行服務(wù)器端命令的能力。通過就是上傳一句話木馬,然后通過菜刀來連接服務(wù)器。要完成這個(gè)攻擊,需要下面的三個(gè)條件: 1.上傳的文件能夠被web容器解釋執(zhí)行,所以文件上傳后所在的目錄要是web容器所覆蓋到的路徑。 2.用戶能夠從web上訪問這個(gè)文件,如果文件上傳了,但用戶無法通過web訪問,或者無法使得web容器解釋這個(gè)腳本,那也不能稱之為漏洞、 3.用戶上傳的文件沒有被安全檢查,格式化,圖片壓縮等功能改變了內(nèi)容;如果改變了內(nèi)容則可能導(dǎo)致攻擊不成功。 PS:文件上傳功能在大多數(shù)的web應(yīng)用中都存在,比如用戶頭像上傳,文章內(nèi)容的圖片,視頻,音頻,附件上傳,一些cms系統(tǒng)上傳模板文件,數(shù)據(jù)庫備份文件,插件文件等地方 二、防御 在實(shí)際的測試過程中,我們總是發(fā)現(xiàn)程序?qū)ι蟼髁宋募隽烁鞣N限制,導(dǎo)致文件上傳不成功。常用的限制文件上傳的方式有: 1.黑名單過濾(根據(jù)文件擴(kuò)展名) 2.白名單過濾(根據(jù)文件擴(kuò)展名) 3.檢測上傳文件的文件頭(服務(wù)器端MIME類型檢測) 4.服務(wù)器內(nèi)容檢測,檢測是否有惡意代碼 5.服務(wù)端目錄路徑檢測(檢測和path相關(guān)的參數(shù)) 三、繞過限制上傳 找到了下面的一個(gè)圖片,總結(jié)的挺全的。 1.黑名單方式 1)文件大小寫繞過:嘗試使用大小寫來進(jìn)行上傳,如ASP,PHp等文件名2)名單列表繞過:用名單里沒有的名單進(jìn)行攻擊,例如可以上傳php2,php3,php4,inc,pwml,asa,cer等文件。
3)特殊文件名繞過:在windows中空格是不允許的,上傳文件以后會自動去掉空格,如上傳test.asp_(下劃線代替空格)4)0x00截?cái)嗬@過:假如這時(shí)候獲取到的文件名是 test.asp[\0].jpg(asp后面為 0x00) 而在 gettype()函數(shù)里處理方式是從后往前掃描擴(kuò)展名,所以判斷為jpg;在很多語言的函數(shù)中,比如在c,PHP等語言的常用字符串處理函數(shù)中,0x00被認(rèn)為是終止符。 5).htaccess文件攻擊 但是Apache版本高于2.3.9上傳.htaccess就不在生效。(實(shí)際測試生效) 配合名單列表繞過,上傳一個(gè)自定義的.htaccess,就可以輕松繞過各種檢測 該文件僅在Apache平臺上存在,IIS平臺上不存在該文件,該文件默認(rèn)開啟,啟用和關(guān)閉在httpd.conf文件中配置。該文件的寫法如下:
保存為.htaccess文件。該文件的意思是,只要遇到文件名中包含有”_php.gif”字符串的,統(tǒng)一按照php文件來執(zhí)行。該文件在Apache里默認(rèn)是啟用的,如果沒啟用,啟用方法見:http://www.jb51.net/article/25476.htm 然后就可以上傳一個(gè)帶一句話木馬的文件,例如a_php.gif,會被當(dāng)成php執(zhí)行。該方法其實(shí)不是漏洞,是Apache的特性。該方法常用于黑客入侵網(wǎng)站之后,不想被發(fā)現(xiàn),留一個(gè)隱蔽的后門。在PHP手冊中提到一句話,move_uploaded_filesection,there is awarning which states‘If the destination file already exists,it will be overwritten.’服務(wù)器端如果采用了黑名單的形式限制上傳,但是黑名單中卻沒有.htaccess文件,那么我們可以上傳.htaccess文件覆蓋掉原來的文件。 6)解析調(diào)用/漏洞繞過 這類漏洞直接配合上傳一個(gè)代碼注入過的非黑名單文件即可,再利用解析調(diào)用/漏洞。如下面的解析漏洞 Apache解析漏洞:Apache對于文件名的解析是后往前解析的,直到遇到一個(gè)Apache認(rèn)識的文件類型。比如:phpshell.php.rar.rar.rar.rar,Apache不認(rèn)識rar這個(gè)文件類型,所有會一直遍歷到php。Apache認(rèn)識的文件類型定義在Apache的mime.type文件中。(Apache 1.x,2.x) nginx和iis7.5/7.0解析漏洞 此解析漏洞其實(shí)是php的配置錯(cuò)誤導(dǎo)致。 php為了支持path info模式創(chuàng)造了fix_pathinfo這個(gè)選項(xiàng),當(dāng)它被打開時(shí),fpm就會判斷請求的文件是否存在,如果不存在就去掉最后一個(gè)\開始的內(nèi)容,再次查看文件是否存在,不存在再去掉從\開的內(nèi)容,循環(huán)往復(fù)。所以當(dāng)請求http://192.168.1.100/admin/upload/shell.jpg/.php這么個(gè)文件時(shí),fpm會把/.php去掉把shell.jpg當(dāng)作php執(zhí)行。 后來出現(xiàn)了seccurity.limit_extensions選項(xiàng),這個(gè)選項(xiàng)默認(rèn)配置.php文件才能被fpm執(zhí)行。
ISS文件解析漏洞:
7)PHP CGI路徑解析問題:nginx配置fastcgi使用PHP時(shí),會存在文件解析漏洞。 2.白名單檢測 1).htaccess文件攻擊 白名單檢測可以通過.htaccess的文件方式來進(jìn)行利用 四、文件頭檢測 1)偽造一個(gè)合法的文件頭,而將真實(shí)的php代碼附在合法的文件頭以后。圖像文件相關(guān)信息檢測常用的就是 getimagesize()函數(shù) 2)我們可以通過抓包,將content-type字段改為image/gif
3) 在木馬內(nèi)容基礎(chǔ)上再加了一些文件信息,有點(diǎn)像下面的結(jié)構(gòu)
五、文件加載檢測 繞過方法: 針對渲染加載測試:代碼注入繞過 針對二次渲染測試:攻擊文件加載器 六、配合操作系統(tǒng)文件命令規(guī)則 (1)上傳不符合windows文件命名規(guī)則的文件名
(2)linux下后綴名大小寫
七、zip數(shù)據(jù)包可能導(dǎo)致的問題 1.未處理解壓文件 2.為遞歸檢測上傳目錄導(dǎo)致繞過 3.條件競爭繞過 4.解壓產(chǎn)生異常退出實(shí)現(xiàn)逃過 5.解壓特殊文件實(shí)現(xiàn)繞過(../) 繞過方式做一個(gè)總結(jié) 八、防止文件上傳的方式 在做實(shí)際項(xiàng)目的時(shí)候,一般我們只會關(guān)注7,8,9。 文件權(quán)限做控制,上傳文件做控制,訪問權(quán)限做控制。
九、總結(jié) 本篇文章總結(jié)了常見的文件上傳方式,以及在一些過濾情況下的繞過方式,最后還說了如何通過正確的方式去防止文件上傳漏洞。 閱讀原文:原文鏈接 該文章在 2025/5/14 9:29:03 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |