File Upload
File Upload,即文件上傳漏洞,通常是由於對上傳文件的類型、內容沒有進行嚴格的過濾、檢查,使得攻擊者可以通過上傳木馬獲取服務器的webshell權限,因此文件上傳漏洞帶來的危害常常是毀滅性的,Apache、Tomcat、Nginx等都曝出過文件上傳漏洞。

Low
查看服務器核心代碼;

basename(path,suffix)
函數返回路徑中的文件名部分,如果可選參數suffix為空,則返回的文件名包含后綴名,反之不包含后綴名。
可以看到,服務器對上傳文件的類型、內容沒有做任何的檢查、過濾,存在明顯的文件上傳漏洞,生成上傳路徑后,服務器會檢查是否上傳成功並返回相應提示信息。
文件上傳漏洞的利用是有限制條件的,首先當然是要能夠成功上傳木馬文件,其次上傳文件必須能夠被執行,最后就是上傳文件的路徑必須可知。
創建ztt1.php文件,內容輸入一句話木馬;

上傳成功,並且返回了上傳路徑;

打開中國菜刀,右鍵添加,
地址欄填入上傳文件所在路徑http://192.168.17.111/DVWA-master/hackable/uploads/ztt1.php
參數名(一句話木馬口令)為ztt。
然后菜刀就會通過向服務器發送包含gxy參數的post請求,在服務器上執行任意命令,獲取webshell權限。
可以下載、修改服務器的所有文件

Medium

可以看到,Medium級別的代碼對上傳文件的類型、大小做了限制,要求文件類型必須是jpeg或者png,大小不能超過100000B(約為97.6KB)。
方法一:文件包含+文件上傳
因為采用的是一句話木馬,所以文件大小不會有問題,至於文件類型的檢查,嘗試修改文件名為ztt1.png。

啟用中國菜刀;
http://192.168.17.111/DVWA-master/hackable/uploads/ztt1.png

不幸的是,雖然成功上傳了文件,但是並不能成功獲取webshell權限,在菜刀上無論進行什么操作都會返回如下信息

中國菜刀的原理是向上傳文件發送包含apple參數的post請求,通過控制apple參數來執行不同的命令,而這里服務器將木馬文件解析成了圖片文件,因此向其發送post請求時,服務器只會返回這個“圖片”文件,並不會執行相應命令。
那么如何讓服務器將其解析為php文件呢?我們想到文件包含漏洞。這里可以借助Medium級別的文件包含漏洞來獲取webshell權限,打開中國菜刀,右鍵添加,在地址欄中輸入
參數名為ztt,腳本語言選擇php。


方法二:抓包修改文件類型(上傳ztt1.png文件,進行抓包)

可以看到文件類型為image/png,嘗試修改filename為ztt1.php。

成功上傳。
打開菜刀,獲取webshell權限,
http://192.168.17.111/DVWA-master/hackable/uploads/ztt1.php


方法三:截斷繞過規則
在php版本小於5.3.4的服務器中,當Magic_quote_gpc選項為off時,可以在文件名中使用%00截斷,所以可以把上傳文件命名為ztt1.php%00.png。
可以看到,包中的文件類型為image/png,可以通過文件類型檢查



High
查看服務器端核心代碼;

strrpos(string,find,start)
函數返回字符串find在另一字符串string中最后一次出現的位置,如果沒有找到字符串則返回false,可選參數start規定在何處開始搜索。
getimagesize(string filename)
函數會通過讀取文件頭,返回圖片的長、寬等信息,如果沒有相關的圖片文件頭,函數會報錯。
可以看到,High級別的代碼讀取文件名中最后一個”.”后的字符串,期望通過文件名來限制文件類型,因此要求上傳文件名形式必須是”*.jpg”、”*.jpeg” 、”*.png”之一。同時,getimagesize函數更是限制了上傳文件的文件頭必須為圖像類型。
我們直接上傳一句話木馬,然后把文件名改為 ztt1.jpg
所以我們在文件頭部加上了jpg格式的 GIF89
在文件頭部加了jpg格式的 GIF89 標識后成功上傳!


