一、概念:
指由于程序員在對(duì)用戶文件上傳部分的控制不足或者處理缺陷,而導(dǎo)致的用戶可以越過其本身權(quán)限向服務(wù)器上上傳可執(zhí)行的動(dòng)態(tài)腳本文件。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。
“文件上傳”本身沒有問題,有問題的是文件上傳后,服務(wù)器怎么處理、解釋文件。如果服務(wù)器的處理邏輯做的不夠安全,則會(huì)導(dǎo)致嚴(yán)重的后果。
二、漏洞的成因:
該漏洞的成因大部分是由于程序員在編寫代碼時(shí)對(duì)文件上傳功能的代碼設(shè)計(jì)缺陷造成的,可以導(dǎo)致用戶上傳可執(zhí)行的腳本文件或者WebShell至服務(wù)器,并由服務(wù)器成功解析運(yùn)行造成服務(wù)器權(quán)限被控制。
三、漏洞的危害:
文件上傳漏洞與其他漏洞相比,其風(fēng)險(xiǎn)更大,利用最簡單。如果網(wǎng)站存在上傳漏洞,黑客就可以上傳一個(gè)Web腳本語言到服務(wù)器,并使服務(wù)器成功的解析和運(yùn)行了黑客上傳的腳本,導(dǎo)致代碼被執(zhí)行使得黑客全面控制服務(wù)器,從而進(jìn)一步的入侵和攻擊。
四、DVWA漏洞平臺(tái)演示:
low級(jí)
查看源代碼

basename(str,name)
函數(shù)返回路徑中的文件名部分,如果可選參數(shù)name為空,則返回的文件名包含后綴名,反之不包含后綴名。
對(duì)源碼分析可以看到,服務(wù)器對(duì)上傳文件的類型、內(nèi)容沒有做任何的檢查、過濾,存在明顯的文件上傳漏洞,生成上傳路徑后,服務(wù)器會(huì)檢查是否上傳成功并返回相應(yīng)提示信息。文件上傳沒有做任何限制,可以上傳任何文件,在上傳一句話木馬,然后通過蟻劍或者中國菜刀拿到webshell。

使用蟻劍工具直接連接,口令為hacker,然后蟻劍就會(huì)通過向服務(wù)器發(fā)送包含hacker參數(shù)的post請(qǐng)求,在服務(wù)器上執(zhí)行任意命令,獲取webshell權(quán)限,進(jìn)入網(wǎng)站后臺(tái)??梢韵螺d、修改服務(wù)器的所有文件。如下圖


Medium中級(jí)
查看源代碼

程序?qū)ι蟼鞯奈募愋偷拇笮∽隽讼拗?,文件類型必須為image/jpeg和image/png,且文件大小要小于100000b
當(dāng)上傳php文件時(shí),頁面將提示錯(cuò)誤

可使用burp suite抓包修改Content-Type類型

重放后上傳成功!

或者將上傳文件名修改為file.php .jpg [中間有空格] 抓包后選擇repeater模塊,之后點(diǎn)擊hex選擇十六進(jìn)制編碼,在該文件名對(duì)應(yīng)的行數(shù),將 20 改為 00,之后選擇send發(fā)送,也可使php文件上傳成功)
higth高級(jí)
查看源代碼

strrpos(string , find ,start): 查找find字符在string字符中的最后一次出現(xiàn)的位置,start參數(shù)可選,表示指定從哪里開始
substr(string,start,length): 返回string字符中從start開始的字符串,length參數(shù)可選,表示返回字符的長度
strtolower(string): 返回給定字符串的小寫
getimagesize(string): 函數(shù)將測定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 圖像文件的大小并返回圖像的尺寸以及文件類型和一個(gè)可以用于普通 HTML 文件中 IMG 標(biāo)記中的 height/width 文本字符串。如果不能訪問 filename 指定的圖像或者其不是有效的圖像,getimagesize() 將返回 FALSE 并產(chǎn)生一條 E_WARNING級(jí)的錯(cuò)誤。所以 getimagesize函數(shù)的作用是判斷上傳的文件是不是有效的圖片
move_uploaded_file(file,newlocal) 函數(shù)表示把給定的文件移動(dòng)到新的位置
因此,上傳文件名為file.jpg,且文件內(nèi)容為<?php @eval($_POST['hacker']);?>,此時(shí)頁面將報(bào)錯(cuò),顯示上傳失敗,因?yàn)間etimagesize()函數(shù)判斷該文件不是有效的圖片文件,所有需要在文件中加入文件頭。

Impossible高難度

imagecreatefromjpeg(filename): 從給定的文件或url中創(chuàng)建一個(gè)新的圖片
imagejpeg(image,filename,quality): 從image圖像中以 filename 文件名創(chuàng)建一個(gè)jpeg的圖片,參數(shù)quality可選,0-100 (質(zhì)量從小到大)
imagedestroy(image): 銷毀圖像文章來源:http://www.zghlxwxcb.cn/news/detail-520198.html
分析源碼可以看到,代碼中加入了token機(jī)制用于防御CSRF攻擊,并對(duì)文件名進(jìn)行了MD5加密,防止了00截?cái)嗬@過過濾規(guī)則,同時(shí)對(duì)文件后綴和文件類型做了白名單設(shè)置,并且還對(duì)文件內(nèi)容作了嚴(yán)格的檢查,不符合圖片的內(nèi)容一律舍棄,導(dǎo)致攻擊者無法將含有惡意代碼的圖片上傳成功。文章來源地址http://www.zghlxwxcb.cn/news/detail-520198.html
到了這里,關(guān)于DVWA之文件上傳漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!