??博客主頁(yè):舉杯同慶 – 生命不息,折騰不止
??訂閱專(zhuān)欄:『Web安全』
??如覺(jué)得博主文章寫(xiě)的不錯(cuò),或?qū)δ阌兴鶐椭脑?,?qǐng)多多支持呀! ??關(guān)注?、點(diǎn)贊??、收藏??、評(píng)論。
話題討論中國(guó)經(jīng)濟(jì)周刊-2022-07-08 新聞 萬(wàn)豪國(guó)際集團(tuán)證實(shí)了近期一起數(shù)據(jù)泄露事件,一個(gè)月前黑客進(jìn)入了馬里蘭州一家萬(wàn)豪酒店的服務(wù)器,在獲得約20GB數(shù)據(jù)后試圖敲詐萬(wàn)豪,但萬(wàn)豪拒絕付款。被泄漏的數(shù)據(jù)包括客人的信用卡信息及客人和員工的機(jī)密信息
對(duì)此,網(wǎng)友們?cè)趺纯??可以留言討論?/p>
一 概述
文件上傳漏洞是指用戶(hù)上傳了一個(gè)可執(zhí)行的腳本文件,并通過(guò)此腳本文件獲得了執(zhí)行服務(wù)器端命令的能力。常見(jiàn)場(chǎng)景是web服務(wù)器允許用戶(hù)上傳圖片或者普通文本文件保存,而用戶(hù)繞過(guò)上傳機(jī)制上傳惡意代碼并執(zhí)行從而控制服務(wù)器。
需要說(shuō)明的是上傳文件操作本身是沒(méi)有問(wèn)題的,問(wèn)題在于文件上傳到服務(wù)器后,服務(wù)器怎么處理和解釋文件。
這種攻擊方式是最為直接和有效的,如果服務(wù)器的處理邏輯做的不夠安全,則會(huì)導(dǎo)致嚴(yán)重的后果。
二 文件上傳后導(dǎo)致的常見(jiàn)安全問(wèn)題
- 上傳文件是Web腳本語(yǔ)言,服務(wù)器的Web容器解釋并執(zhí)行了用戶(hù)上傳的腳本,導(dǎo)致代碼執(zhí)行。
- 上傳文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在該域下的行為
(其他通過(guò)類(lèi)似方式控制策略文件的情況類(lèi)似); - 上傳文件是病毒、木馬文件,黑客用以誘騙用戶(hù)或者管理員下載執(zhí)行。
- 上傳文件是釣魚(yú)圖片或?yàn)榘四_本的圖片,在某些版本的瀏覽器中會(huì)被作為腳本執(zhí)行,被用于釣魚(yú)和欺詐。
要完成這個(gè)攻擊,要滿(mǎn)足以下幾個(gè)條件:
- 首先,上傳的文件能夠被Web容器解釋執(zhí)行。所以文件上傳后所在的目錄要是Web容器所覆蓋到的路徑。
- 其次,用戶(hù)能夠從Web上訪問(wèn)這個(gè)文件。如果文件上傳了,但用戶(hù)無(wú)法通過(guò)Web訪問(wèn),或者無(wú)法得到Web容器解釋這個(gè)腳本,那么也不能稱(chēng)之為漏洞。
- 最后,用戶(hù)上傳的文件若被安全檢查、格式化、圖片壓縮等功能改變了內(nèi)容,則也可能導(dǎo)致攻擊不成功。
三 舉兩個(gè)例子
前面說(shuō)過(guò)web安全攻防的測(cè)試靶場(chǎng)很多都是基于php服務(wù)器的,所以舉例也是依.php文件為例,這個(gè)漏洞與開(kāi)發(fā)語(yǔ)言無(wú)關(guān)。
1. nginx解析漏洞
漏洞原理:
Nginx默認(rèn)是以CGI(服務(wù)器運(yùn)行php文件的接口協(xié)議common gateway interface)的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通過(guò)正則匹配設(shè)置SCRIPT_FILENAME。當(dāng)訪問(wèn)www.xx.com/info.jpg/test.php這個(gè)URL時(shí),$fastcgi_script_name會(huì)被設(shè)置為“info.jpg/test.php”,然后構(gòu)造成SCRIPT_FILENAME傳遞給PHP CGI,最終PHP會(huì)將info.jpg作為PHP文件解析,為什么呢?
這就要說(shuō)到fix_pathinfo這個(gè)選項(xiàng)了,這是php配置文件中的一個(gè)關(guān)鍵選項(xiàng),默認(rèn)是開(kāi)啟的, 如果開(kāi)啟了這個(gè)選項(xiàng),那么就會(huì)觸發(fā)在PHP中的如下邏輯:PHP會(huì)認(rèn)為SCRIPT_FILENAME是info.jpg,而test.php是PATH_INFO,所以就會(huì)將info.jpg作為PHP文件來(lái)解析了
PHP官方給出的建議是將fix_pathinfo參數(shù)設(shè)置為0,對(duì)此bug態(tài)度消極。
漏洞文件形如:
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
另外一種手法:上傳一個(gè)名字為test.jpg,然后訪問(wèn)test.jpg/.php,在這個(gè)目錄下就會(huì)生成一句話木馬shell.php。
2. apache解析漏洞
漏洞原理
Apache2.x以前版本 解析文件的規(guī)則是從右到左開(kāi)始判斷解析,如果后綴名為不可識(shí)別文件解析,就再往左判斷,直到遇見(jiàn)一個(gè)Apache認(rèn)識(shí)的文件類(lèi)型為止。比如test.php.rar,這里”.rar” 這兩種后綴是apache不可識(shí)別解析,apache就會(huì)把wooyun.php.rar解析成php,然后認(rèn)為這是一個(gè).php類(lèi)型的文件。至于Apache都能識(shí)別哪些文件呢?這些文件類(lèi)型定義在apache的mime.types配置文件中找到。
漏洞文件名形如 www.xxxx.xxx.com/test.php.php123
Apache的這個(gè)特性,很多工程師在寫(xiě)應(yīng)用時(shí)并不知道,寫(xiě)出的安全檢查就可能存在缺陷,比如.rar文件是一個(gè)合法的上傳請(qǐng)求,在應(yīng)用里值判斷文件的后綴是否.rar,而用戶(hù)上傳的文件是xxxx.php.rar.rar,從而導(dǎo)致腳本執(zhí)行。
3. 攻擊測(cè)試步驟
這個(gè)場(chǎng)景非常巧妙,首先假設(shè)有個(gè)一句話木馬文件,上傳的時(shí)候可能會(huì)被和諧掉,所以要把此木馬文件轉(zhuǎn)換為圖片馬(比如cmd命令生成、二進(jìn)制文本打開(kāi)后加上木馬命令等好幾種方式都很簡(jiǎn)單),圖片馬是圖片格式所以很容易上傳成功。另外,需要攻擊的服務(wù)器包含文件上傳漏洞,這里用中國(guó)菜刀或者蟻劍(webshell管理工具)測(cè)試即可。
四 常見(jiàn)防御方法
1.文件上傳目錄設(shè)置為不可執(zhí)行
只要web容器無(wú)法解析該目錄下的文件,即使攻擊者上傳了腳本文件,服務(wù)器本身也不會(huì)受到影響。在實(shí)際應(yīng)用中,很多大型網(wǎng)站或系統(tǒng)文件上傳后會(huì)放在一個(gè)獨(dú)立的存儲(chǔ)服務(wù)器,做靜態(tài)文件處理,一方面方便使用緩存加速,降低性能損耗,另一個(gè)方面也杜絕了腳本執(zhí)行的可能。對(duì)于一些小應(yīng)用,文件上傳問(wèn)題還是需要多加關(guān)注。
2.判斷文件類(lèi)型
在判斷文件類(lèi)型時(shí),可以結(jié)合使用MIME Type、后綴檢查等方式。通過(guò)javascript來(lái)校驗(yàn)上傳文件的后綴是否合法,在瀏覽加載文件,但還未點(diǎn)擊上傳按鈕時(shí)便彈出對(duì)話框,推薦采用白名單方法,內(nèi)容如:只允許上傳.jpg/.jpeg/.png后綴名的文件。
注意:校驗(yàn)文件后綴時(shí)黑名單方法不是一種好的設(shè)計(jì)方法,容易被跳過(guò)。
此外
此外,對(duì)于圖片的處理,可以使用壓縮函數(shù)或者resize函數(shù)破壞圖片中可能包含的HTML代碼。
3.使用隨機(jī)數(shù)改寫(xiě)文件名
文件上傳如果要執(zhí)行代碼,則需要用戶(hù)能夠訪問(wèn)到這個(gè)文件。如果應(yīng)用中使用隨機(jī)數(shù)改寫(xiě)了文件名和路徑,將極大的增加攻擊的成本。同時(shí),向上面的xxxx.php.rar.rar這種文件將會(huì)因文件名被改寫(xiě)而無(wú)法成功實(shí)施攻擊。
4.單獨(dú)設(shè)置文件服務(wù)器的域名
由于瀏覽器的同源策略,一系列客戶(hù)端攻擊將失效,比如上傳包含JavaScript的XSS利用等問(wèn)題將得到解決,但是能否單獨(dú)設(shè)置域名,還要看具體的業(yè)務(wù)環(huán)境。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-780887.html
五 小結(jié)
文件上傳往往與代碼執(zhí)行聯(lián)系在一起,因此對(duì)于業(yè)務(wù)中用到的上傳功能,都應(yīng)該由安全工程師進(jìn)行嚴(yán)格的檢查。
文件上傳問(wèn)題看似簡(jiǎn)單,但是要實(shí)現(xiàn)一個(gè)安全的上傳功能要考慮很多問(wèn)題,不斷的發(fā)現(xiàn)問(wèn)題,結(jié)合業(yè)務(wù)需求改進(jìn),才能設(shè)計(jì)出最合理的上傳功能。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-780887.html
到了這里,關(guān)于Web安全漏洞介紹及防御-文件上傳漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!