文件上傳攻防解析.doc_第1頁(yè)
文件上傳攻防解析.doc_第2頁(yè)
文件上傳攻防解析.doc_第3頁(yè)
文件上傳攻防解析.doc_第4頁(yè)
文件上傳攻防解析.doc_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

Web攻防系列教程之 文件上傳攻防解析文件上傳是WEB應(yīng)用很常見(jiàn)的一種功能,本身是一項(xiàng)正常的業(yè)務(wù)需求,不存在什么問(wèn)題。但如果在上傳時(shí)沒(méi)有對(duì)文件進(jìn)行正確處理,則很可能會(huì)發(fā)生安全問(wèn)題。本文將對(duì)文件上傳的檢測(cè)方式以及如何繞過(guò)相應(yīng)檢測(cè)方式進(jìn)行詳細(xì)的分析,并提供針了對(duì)文件上傳攻擊的安全防護(hù)方法。 文件上傳攻擊是指攻擊者利用WEB應(yīng)用對(duì)上傳文件過(guò)濾不嚴(yán),導(dǎo)致可以上傳應(yīng)用程序定義類(lèi)型范圍之外的文件到Web服務(wù)器。比如可以上傳一個(gè)網(wǎng)頁(yè)木馬,如果存放上傳文件的目錄剛好有執(zhí)行腳本的權(quán)限,那么攻擊者就可以直接得到一個(gè)WebShell。文件上傳攻擊的原理 由于服務(wù)器端沒(méi)有對(duì)用戶(hù)上傳的文件進(jìn)行正確的處理,導(dǎo)致攻擊者可以向某個(gè)可通過(guò) Web 訪問(wèn)的目錄上傳惡意文件,并且該文件可以被Web服務(wù)器解析執(zhí)行。攻擊者要想成功實(shí)施文件上傳攻擊,必須要滿(mǎn)足以下三個(gè)條件:1.可以上傳任意腳本文件,且上傳的文件能夠被Web服務(wù)器解析執(zhí)行,具體來(lái)說(shuō)就是存放上傳文件的目錄要有執(zhí)行腳本的權(quán)限。2.用戶(hù)能夠通過(guò)Web訪問(wèn)這個(gè)文件。如果文件上傳后,不能通過(guò)Web訪問(wèn),那么也不能成功實(shí)施攻擊。 3.要知道文件上傳到服務(wù)器后的存放路徑和文件名稱(chēng),因?yàn)樵S多Web應(yīng)用都會(huì)修改上傳文件的文件名稱(chēng),那么這時(shí)就需要結(jié)合其他漏洞去獲取到這些信息。如果不知道上傳文件的存放路徑和文件名稱(chēng),即使你上傳了也無(wú)法訪問(wèn)。主流文件上傳檢測(cè)方式概述主流的文件上傳檢測(cè)方式有以下五種:1.客戶(hù)端javascript檢測(cè)客戶(hù)端檢測(cè)通常在上傳頁(yè)面里含有專(zhuān)門(mén)檢測(cè)文件上傳的javascript代碼,在文件被上傳之前進(jìn)行檢測(cè),最常見(jiàn)的就是檢測(cè)上傳文件的文件類(lèi)型和大小是否合法。 2.服務(wù)端MIME類(lèi)型檢測(cè)這類(lèi)檢測(cè)方法通過(guò)檢查http包的Content-Type字段中的值來(lái)判斷上傳文件是否合法。 3.服務(wù)端文件擴(kuò)展名檢測(cè)這類(lèi)檢測(cè)方法通過(guò)在服務(wù)端檢測(cè)上傳文件的擴(kuò)展名來(lái)判斷文件是否合法。 4.服務(wù)端目錄路徑檢測(cè)這類(lèi)檢測(cè)一般通過(guò)檢測(cè)路徑是否合法來(lái)判斷。 5.服務(wù)端文件內(nèi)容檢測(cè)這類(lèi)檢測(cè)方法相當(dāng)對(duì)上面四種檢測(cè)方法來(lái)說(shuō)是最為嚴(yán)格的一種。它通過(guò)檢測(cè)文件內(nèi)容來(lái)判斷上傳文件是否合法。這里,對(duì)文件內(nèi)容的檢測(cè)主要有兩種方法。 A.通過(guò)檢測(cè)上傳文件的文件頭來(lái)判斷。通常情況下,通過(guò)判斷前10個(gè)字節(jié),基本就能判斷出一個(gè)文件的真實(shí)類(lèi)型。B.文件加載檢測(cè),一般是調(diào)用API或函數(shù)對(duì)文件進(jìn)行加載測(cè)試。常見(jiàn)的是圖像渲染測(cè)試,再?lài)?yán)格點(diǎn)的甚至是進(jìn)行二次渲染。 如何繞過(guò)文件上傳檢測(cè) 上面我們分析了主流的文件上傳檢測(cè)方式,下面我們就來(lái)看下如何繞過(guò)上面提到的文件上傳檢測(cè)方式,本文只討論如何繞過(guò)前三種檢測(cè)方式。 1.繞過(guò)客戶(hù)端javascript檢測(cè)這種檢測(cè)方法是最不安全的,也是最容易被攻擊者繞過(guò)的。Web應(yīng)用不應(yīng)只采用這一種手段檢測(cè)上傳文件,但可以作為一種輔助手段。因?yàn)椴捎每蛻?hù)端javascript檢測(cè)可以增強(qiáng)應(yīng)用對(duì)用戶(hù)的友好度。由于javascript檢測(cè)是在客戶(hù)端實(shí)現(xiàn)的,所以我們完全能夠控制它??梢栽跒g覽器端禁用js腳本,比如在FireFox上安裝FireBug這一插件就可以實(shí)現(xiàn)這一功能。另外一種是通過(guò)代理工具來(lái)實(shí)現(xiàn),下面介紹利用Burp Suite來(lái)繞過(guò)客戶(hù)端javascript檢測(cè)。Burp Suite不僅僅只是一個(gè)代理工具,更是一款強(qiáng)大的網(wǎng)絡(luò)滲透利器。關(guān)于Burp Suite的詳細(xì)資料請(qǐng)自行百度。 這個(gè)站點(diǎn)(注:由于該網(wǎng)站為真實(shí)站點(diǎn),為了目標(biāo)網(wǎng)站的安全,所以用target來(lái)代替真實(shí)域名)的文件上傳功能只采用了客戶(hù)端javascript檢測(cè),所以很容易被繞過(guò)。下面我們來(lái)具體看下操作方法。首先,我們看一下正常情況下上傳一個(gè).asp文件,應(yīng)用會(huì)有什么反應(yīng)。 a. 我們?cè)L問(wèn)這個(gè)URL(/AdvHTML_Popups/upload.asp),會(huì)出現(xiàn)一個(gè)上傳文件的頁(yè)面 b. 我們先選擇一個(gè).asp文件,這時(shí)會(huì)提示不允許上傳這種類(lèi)型的文件。注意,這時(shí)我們還沒(méi)有點(diǎn)擊“件,這時(shí)會(huì)提示按鈕,就出現(xiàn)提示信息。我們可以判斷出這個(gè)網(wǎng)站是在客戶(hù)端判斷上傳文件類(lèi)型的合法性的。上面的情況證明在正常情況下是不能成功上傳.asp文件的,那么下面就來(lái)看下如何繞過(guò)這種檢測(cè)吧。 c. 我們先打開(kāi)Burp Suite代理工具,然后配置瀏覽器使用代理。 d. 我們先把剛才的那個(gè).asp文件擴(kuò)展名改為.gif,然后點(diǎn)擊“然后點(diǎn)擊“為那按鈕。這時(shí)Burp Suite中就會(huì)攔截到瀏覽器提交的HTTP數(shù)據(jù)包。我們把filename字段的值webshell.gif修改為webshell.asp,再點(diǎn)擊“再點(diǎn)擊“ell”按鈕,會(huì)發(fā)現(xiàn)文件成功上傳到服務(wù)器。 2.繞過(guò)服務(wù)端MIME類(lèi)型檢測(cè)服務(wù)端MIME類(lèi)型檢測(cè)是通過(guò)檢查http包的Content-Type字段中的值來(lái)判斷上傳文件是否合法的。我們來(lái)訪問(wèn)35/upload.html,這是一個(gè)上傳頁(yè)面,當(dāng)你選擇上傳文件,點(diǎn)擊“上傳”按鈕后,會(huì)跳轉(zhuǎn)到uploadf.php中進(jìn)行處理。先來(lái)看下uploadf.php的代碼。那么我們?nèi)绾卫@過(guò)這種檢測(cè)方式呢?下面來(lái)看具體操作,還是用Burp Suite來(lái)完成。 我準(zhǔn)備上傳webshell.php到服務(wù)器,這是個(gè)一句話(huà)木馬。選擇好文件,然后點(diǎn)擊“上傳”,這時(shí)Burp Suite攔截到發(fā)往服務(wù)器的HTTP請(qǐng)求,我們?cè)贐urp Suite修改HTTP數(shù)據(jù)包中的內(nèi)容,然后點(diǎn)擊“據(jù)包中的內(nèi)容,然按鈕把數(shù)據(jù)包再轉(zhuǎn)發(fā)給服務(wù)器。 這時(shí)會(huì)提示文件成功上傳,還會(huì)顯示文件保存路徑,說(shuō)明我們成功繞過(guò)了服務(wù)端的MIME文件類(lèi)型檢測(cè)。 現(xiàn)在我們用中國(guó)菜刀連接一下,可以成功訪問(wèn)到。 3.繞過(guò)服務(wù)端文件擴(kuò)展名檢測(cè) 現(xiàn)在我們來(lái)看下如何繞過(guò)服務(wù)端文件擴(kuò)展名檢測(cè),先來(lái)看下這兩段代碼。上面的代碼是一個(gè)上傳表單,在選擇上傳文件,點(diǎn)擊“上傳”按鈕后會(huì)跳轉(zhuǎn)到uploadfiles.asp中進(jìn)行處理。我們來(lái)看下uploadfiles.asp文件中檢測(cè)上傳文件擴(kuò)展名的代碼。 上面代碼的意思是先得到上傳文件的擴(kuò)展名,然后和允許上傳的文件類(lèi)型對(duì)比,如果不符合定義,則提示“上傳的文件格式不對(duì)!”。下面具體看下如何繞過(guò)這種檢測(cè)方式,我們先直接上傳一個(gè).asp的木馬,會(huì)提示上傳文件格式不對(duì),這和我們預(yù)期的結(jié)果一致。現(xiàn)在我們將webshell.asp改為webshell.asp;test.jpg,再次上傳,會(huì)發(fā)現(xiàn)我們的webshell被成功上傳到服務(wù)器上。 現(xiàn)在我們來(lái)訪問(wèn)下,地址為 05/bookpic/webshell.asp;test.jpg,可以正常訪問(wèn),如 注:這里利用了IIS的解析漏洞,當(dāng)文件名為1.asp;1.jpg時(shí),IIS會(huì)將此文件解析為1.asp,文件名被截?cái)啵瑢?dǎo)致腳本被執(zhí)行。而且存放上傳文件的目錄要有執(zhí)行腳本的權(quán)限,否則不能執(zhí)行成功。設(shè)計(jì)安全的文件上傳功能 上面我們介紹了主流的文件上傳檢測(cè)以及繞過(guò)檢測(cè)的方式,那么如何設(shè)計(jì)出一個(gè)安全的文件上傳功能呢?下面我們就來(lái)總結(jié)一下。 1.設(shè)置保存上傳文件的目錄為不可執(zhí)行 只要Web服務(wù)器無(wú)法解析該目錄下的文件,即使攻擊者上傳了腳本文件,服務(wù)器本身也不會(huì)受到影響,此點(diǎn)至關(guān)重要。 2.判斷文件類(lèi)型 在判斷文件類(lèi)型時(shí),可以結(jié)合使用MIME Type、后綴檢查等方式。在文件類(lèi)型檢查中,強(qiáng)烈建議采用白名單的方式。此外,對(duì)于圖片的處理可以使用壓縮函數(shù)或者resize函數(shù),在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論