目錄
1. 文件上傳漏洞概述
1.1 FCKEditor文件上傳漏洞
1.2 繞過(guò)文件上傳檢查功能
2. 功能還是漏洞
2.1 Apache文件解析
2.2 IIS文件解析
2.3 PHP CGI路徑解析
2.4 利用上傳文件釣魚
?3. 設(shè)計(jì)安全的文件上傳功能
1. 文件上傳漏洞概述
文件上傳漏洞是指用戶上傳了一個(gè)可執(zhí)行的腳本文件,并通過(guò)此腳本文件獲得了執(zhí)行服務(wù)端命令的能力。
應(yīng)用:例如上傳一張圖片、分享一段視頻、論壇發(fā)帖時(shí)附帶附件、發(fā)郵件時(shí)附帶附件……
文件上傳后導(dǎo)致的安全問(wèn)題一般有:
- 上傳文件是Web腳本語(yǔ)言,服務(wù)器的Web容器解釋并執(zhí)行了用戶上傳的腳本,導(dǎo)致代碼執(zhí)行
- 上傳文件時(shí)Flash的策略文件crossdomain.xml,黑客用以控制Flash在該域下的行為
- 上傳文件時(shí)病毒、木馬文件,黑客誘騙用戶下載執(zhí)行
- 上傳文件是釣魚圖片或?yàn)榘四_本的圖片,在某些版本的瀏覽器中會(huì)被作為腳本執(zhí)行,被用于釣魚和欺詐
- 將上傳文件作為一個(gè)入口,溢出服務(wù)器的后臺(tái)處理程序,如圖片解析模塊
- 上傳一個(gè)合法的文本文件,其內(nèi)容包含PHP腳本,再通過(guò)本地文件包含漏洞執(zhí)行該腳本
- ……
要實(shí)現(xiàn)webshell,要滿足以下幾個(gè)條件:
- 上傳的文件能被Web容器解釋執(zhí)行,文件上傳后的目錄是Web容器所覆蓋到的路徑
- 用戶能從Web上訪問(wèn)這個(gè)文件
- 文件不會(huì)被安全檢查、格式化、圖片壓縮等功能改變內(nèi)容而導(dǎo)致攻擊不成功
1.1 FCKEditor文件上傳漏洞
FCKEditor是一款非常流行的富文本編輯器,其上傳文件的功能能將用戶上傳的文件保存在/UserFiles/all/目錄下
在有漏洞的版本中,通過(guò)黑名單來(lái)確認(rèn)文件的安全性
以上述黑名單為例,當(dāng)我們上傳后綴為php2、php4、inc、pwml、asa、cer等文件時(shí)就能繞過(guò)
1.2 繞過(guò)文件上傳檢查功能
- %00截?cái)?/li>
在?C、PHP等語(yǔ)言的常用字符串處理函數(shù)中,0x00被認(rèn)為是終止符,因此在文件名后添加一個(gè)%00字節(jié),可以截?cái)嗄承┖瘮?shù)對(duì)文件名的判斷
例如只允許上傳JPG圖片,可以構(gòu)造文件名xxx.php[\0].JPG,其中[\0]為十六進(jìn)制的0x00字符,.JPG繞過(guò)了應(yīng)用的上傳文件類型判斷,但對(duì)于服務(wù)器端來(lái)說(shuō),此文件因?yàn)?x00字符截?cái)?,?huì)變成xxx.php
- 偽造文件頭
有的應(yīng)用會(huì)通過(guò)文件頭驗(yàn)證文件類型
?常見(jiàn)的攻擊技巧是偽造一個(gè)合法的文件頭,將真實(shí)的PHP等腳本代碼附在文件頭之后
但仍需要通過(guò)PHP來(lái)解釋此圖片文件才行,若上傳的文件后綴是JPG,則Web Server可能會(huì)將此文件當(dāng)作靜態(tài)文件解析,不會(huì)調(diào)用PHP解釋器,也就無(wú)法進(jìn)行攻擊?
2. 功能還是漏洞
2.1 Apache文件解析
Apache對(duì)于文件名的解析是從后往前解析的,直至遇見(jiàn)一個(gè)Apache認(rèn)識(shí)的文件類型為止
例如:
phpshell.php.rar.rar.rar.rar.rar
Apache不認(rèn)識(shí).rar文件類型,會(huì)一直遍歷到.php,認(rèn)為這是一個(gè)PHP類型的文件
黑客就可以利用該特性繞過(guò)對(duì)后綴名的限制,實(shí)現(xiàn)php腳本的執(zhí)行
(在Apache的mime.types文件中定義了它所認(rèn)識(shí)的文件)
2.2 IIS文件解析
- 分號(hào)“;”是截?cái)嘧址?/li>
當(dāng)文件名為abc.asp;xx.jpg時(shí),IIS 6 會(huì)將此文件解析為abc.asp,從而導(dǎo)致腳本被執(zhí)行
- 曾經(jīng)出現(xiàn)過(guò)因處理文件夾擴(kuò)展名出錯(cuò),導(dǎo)致將/*.asp/目錄下的所有文件都作為ASP文件進(jìn)行解析
- PUT方法允許用戶上傳文件到指定目錄下,結(jié)合MOVE方法可以將原本只允許上傳文本文件改寫為腳本文件,從而執(zhí)行webshell
2.3 PHP CGI路徑解析
Nginx作為代理把請(qǐng)求轉(zhuǎn)發(fā)給fastcgi Server,PHP在后端處理。(使用Nginx作為Web Server時(shí),一般使用fastcgi的方式調(diào)用腳本解釋器。)
當(dāng)訪問(wèn)
http://www.xxx.com/path/test.jpg/notexist.php
時(shí),會(huì)將test.jpg當(dāng)作PHP解析。notexist.php是不存在的文件。
如果在任何配置為?fastcgi的PHP應(yīng)用里上傳文件,其內(nèi)容是PHP文件,則將導(dǎo)致代碼執(zhí)行。
原因:
PHP的配置文件中 cgi.fix_pathinfo=1默認(rèn)開(kāi)啟
在上面的例子中,PATH_INFO=notexist.php,因?yàn)閚otexist.php不存在,會(huì)往前遞歸查詢路徑確認(rèn)文件的合法性。此時(shí)SCRIPT_FILENAME檢查文件是否存在,其值為/path/test.jpg,而此時(shí)PATH_INFO還是notexist.php,在最終執(zhí)行時(shí),test.jpg會(huì)被當(dāng)作PHP解析。
2.4 利用上傳文件釣魚
利用文件上傳功能,釣魚者可以先將包含了HTML的文件(例如一張圖片)上傳到目標(biāo)網(wǎng)站,然后通過(guò)傳播這個(gè)文件的URL進(jìn)行釣魚,該URL中不會(huì)出現(xiàn)釣魚地址。
?png是偽造的文件頭繞過(guò)上傳時(shí)的文件類型檢查,后面的腳本控制瀏覽器跳向指定的釣魚網(wǎng)站,騙子在傳播釣魚網(wǎng)站時(shí),只需要傳播合法圖片的URL文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-483208.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-483208.html
?3. 設(shè)計(jì)安全的文件上傳功能
- 文件上傳的目錄設(shè)置為不可執(zhí)行
- 判斷文件類型時(shí)可以結(jié)合MIME Type、后綴檢查等方式,使用白名單
- 對(duì)于圖片的處理使用壓縮函數(shù)或resize函數(shù),在處理圖片的同時(shí)破壞其中可能包含的HTML代碼
- 使用隨機(jī)數(shù)改寫文件名和文件路徑
- 單獨(dú)設(shè)置文件服務(wù)器的域名
到了這里,關(guān)于【W(wǎng)eb安全】文件上傳漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!