Upload-labs是一個幫你總結所有類型的上傳漏洞的靶場,包括常見的文件上傳漏洞:
項目地址:https://github.com/c0ny1/upload-labs
運行環境
操作系統:windows、Linux
php版本:推薦5.2.17(其他版本可能會導致部分Pass無法突破)
php組件:php_gd2,php_exif(部分Pass需要開啓這兩個組件)
apache:以moudel方式連接
第一關
直接上傳php木馬,發現前端報錯:
嘗試前端繞過,在前端js判斷函數中加上可以上傳php文件:
即可上傳成功:
第二關
查看源代碼:
發現僅僅判斷content-type,於是修改content-type繞過:
第三關
查看源代碼:
成功上傳:
第四關
查看源代碼:
雖然還是黑名單,但幾乎過濾了所有有問題的後綴名,除了.htaccess,於是首先上傳一個.htaccess內容如下的文件:
SetHandler application/x-httpd-php
這樣所有文件都會解析爲php,然後再上傳圖片馬,就可以解析:
訪問:
第五關
查看源代碼:
還是黑名單,加上了.htaccess,但是沒有將後綴進行大小寫統一,於是可以通過大小寫繞過:
訪問:
第六關
查看源代碼:
還是黑名單,但是沒有對後綴名進行去空處理,可在後綴名中加空繞過:
訪問:
第七關
查看源代碼:
還是黑名單,但是沒有對後綴名進行去”.”處理,利用windows特性,會自動去掉後綴名中最後的”.”,可在後綴名中加”.”繞過:
訪問:
第八關
查看源代碼:
還是黑名單,但是沒有對後綴名進行去”::$DATA”處理,利用windows特性,可在後綴名中加” ::$DATA”繞過:
訪問:
第九關
查看代碼:
黑名單過濾,注意第15行和之前不太一樣,路徑拼接的是處理後的文件名,於是構造info.php. . (點+空格+點),經過處理後,文件名變成info.php.,即可繞過。
訪問:
第十關
查看源代碼:
依舊是黑名單過濾,注意到,這裏是將問題後綴名替換爲空,於是可以利用雙寫繞過:
訪問:
第十一關
查看代碼:
看到是白名單判斷,但是$img_path直接拼接,因此可以利用%00截斷繞過:
訪問:
第十二關
查看代碼:
和十一關不同的是這次的save_path是通過post傳進來的,還是利用00截斷,但這次需要在二進制中進行修改,因爲post不會像get對%00進行自動解碼。
訪問:
第十三關
本關要求上傳圖片馬即可,查看代碼:
通過讀文件的前2個字節判斷文件類型,因此直接上傳圖片馬即可,製作方法:
copy normal.jpg /b + shell.php /a webshell.jpg
上傳圖片馬
成功繞過:
接下來利用的話,還需要結合文件包含漏洞。
第十四關
本關還是要上傳一個圖片馬,查看代碼:
這裏用getimagesize獲取文件類型,還是直接就可以利用圖片馬就可進行繞過:
第十五關
本關還是要上傳一個圖片馬,查看代碼:
這裏用到php_exif模塊來判斷文件類型,還是直接就可以利用圖片馬就可進行繞過:
第十六關
本關還是要上傳一個圖片馬,查看代碼:
本關綜合判斷了後綴名、content-type,以及利用imagecreatefromgif判斷是否爲gif圖片,最後再做了一次二次渲染,繞過方法:
成功上傳:
第十七關
本關考察的是條件競爭,查看代碼:
這裏先將文件上傳到服務器,然後通過rename修改名稱,再通過unlink刪除文件,因此可以通過條件競爭的方式在unlink之前,訪問webshell。
首先在burp中不斷髮送上傳webshell的數據包:
然後不斷在瀏覽器中訪問,發現通過競爭可以訪問到:
第十八關
本關需要上傳圖片馬,查看代碼
本關對文件後綴名做了白名單判斷,然後會一步一步檢查文件大小、文件是否存在等等,將文件上傳後,對文件重新命名,同樣存在條件競爭的漏洞。可以不斷利用burp發送上傳圖片馬的數據包,由於條件競爭,程序會出現來不及rename的問題,從而上傳成功:
第十九關
本關考察CVE-2015-2348 move_uploaded_file() 00截斷,上傳webshell,同時自定義保存名稱,直接保存爲php是不行的
查看代碼:
發現move_uploaded_file()函數中的img_path是由post參數save_name控制的,因此可以在save_name利用00截斷繞過: