知了堂《web安全-上傳漏洞》課程講解文檔(下)
文章來源:知了堂馮老師

接上文
知了堂:知了堂《web安全-上傳漏洞》課程講解文檔(上)

6 文件類型繞過代碼分析
服務(wù)端處理上傳文件的代碼如下,服務(wù)端代碼判斷$_FILES[“file”][“type”]是不是圖片的格式(image/gif,image/jpeg,image/pjpeg),如果不是,則不允許上傳該文件,而$_FILES[“file”][“type”]是客戶端請求數(shù)據(jù)包中的Congent-Type,所以可以通過修改Content-Type的值繞過該代碼限制。

在php中還存在一種相似的文件上傳漏洞,PHP函數(shù)gettimagesize()可以獲取圖片的寬、高等信息,如果上傳的不是圖片文件,那么getimagesize()就獲取不到信息,則不允許上傳,代碼如下:

但是,我們可以將一個(gè)圖片何一個(gè)webshell合并為一個(gè)文件,例如使用以下命令
Cat image.png wehshell.php > image.php
此時(shí),使用getimagesize()就可以獲取圖片信息,且webshell的后綴是php,也能被apache解析為腳本文件,通過這種方式就可以繞過getimagesize()的限制。
7 文件截?cái)嗬@過攻擊
截?cái)囝愋停篜HP%00截?cái)?/p>
截?cái)嘣恚河捎?0代表結(jié)束符,所以會(huì)把00后面的所有字符刪除。
截?cái)鄺l件:PHP版本小于5.3.4,PHP的magic_quotes_gpc為OFF狀態(tài)。
在上傳文件時(shí),服務(wù)端將GET參數(shù)jieduan的內(nèi)容作為上傳后文件名的第一部分,然后將按照時(shí)間生成的圖片文件名作為上傳后文件名的第二部分。


修改參數(shù)jieduan為1.php%00.jpg,文件被保存到服務(wù)器時(shí),%00會(huì)把”.jpg”和按時(shí)間生成的圖片文件名全部截?cái)?,那么文件名就剩?.php,因此成功上傳了webshell腳本。

8 文件截?cái)嗬@過代碼分析
服務(wù)端處理上傳文件的代碼如下,程序使用substr獲取文件后綴,然后判斷后綴是否是‘flv’,‘swf’,‘mp3’,‘mp4’,‘3gp’,‘zip’,‘rar’,‘gif’,‘jpg’,‘png’,‘bmp’中的一種,如果不是,則不允許上傳該文件。但是在保存的路徑中有$_REQUEST[‘jieduan’],那么此處可以利用00截?cái)鄧L試?yán)@過服務(wù)端限制

9 文件上傳漏洞修復(fù)建議
針對文件上傳的修復(fù),建議:
? 1.通過白名單的方式判斷文件后綴是否合法,對文件格式限制,只允許某些格式上傳。
? 2.對上傳后的文件進(jìn)行重名名,例如rand(10,99).date(“YmdHis”).”.jpg”。
? 3.對文件格式進(jìn)行校驗(yàn),前端跟服務(wù)器都要進(jìn)行校驗(yàn)(前端校驗(yàn)擴(kuò)展名,服務(wù)器校驗(yàn)擴(kuò)展名、Content_Type等)。
? 4.將上傳目錄防止到項(xiàng)目工程目錄之外,當(dāng)做靜態(tài)資源文件路徑,并且對文件的權(quán)限進(jìn)行設(shè)定,禁止文件下的執(zhí)行權(quán)限。
10 練習(xí)平臺(tái)部署
Upload-labs
upload-labs是一個(gè)使用php語言編寫的,專門收集滲透測試和CTF中遇到的各種上傳漏洞的靶場。旨在幫助大家對上傳漏洞有一個(gè)全面的了解。目前一共20關(guān),每一關(guān)都包含著不同上傳方式。
靶機(jī)包含漏洞類型分類

Install
環(huán)境要求
若要自己親自搭建環(huán)境,請按照以下配置環(huán)境,方可正常運(yùn)行每個(gè)Pass

Windows快速搭建
項(xiàng)目提供了一個(gè)Windows下,按照以上配置要求配置好的集成環(huán)境
下載地址:https://github.com/c0ny1/upload-labs/releases
集成環(huán)境綠色免安裝,解壓即可使用。
Linux快速搭建
創(chuàng)建鏡像
$ cd upload-labs/docker
$ docker build -t upload-labs .
或
$ docker pull c0ny1/upload-labs
創(chuàng)建容器
$ docker run -d -p 80:80 upload-labs:latest
如何判斷上傳漏洞類型

練習(xí):DVWA
————————————————end————————————
