靶機項目位址:https://github.com/c0ny1/upload-labs
來源:https://www.cnblogs.com/joker-vip/p/12650240.html
Pass-01
1.直接上傳php一句話,報錯
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnLzIjN3AjN4gjNx0CNxQzNwkzMyIjNwQDMwIDMy0CMwUTOykTMvwFNwAjMwIzLcBDM1kjM5EzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
2.資訊回顯速度很快,猜想是前端驗證,可以在修改前端代碼,删掉checkFile()函數,或者上傳jpg字尾通過burp抓包修改php字尾繞過前端驗證
3.上傳成功
4.菜刀連接配接成功
5.分析源碼
Javascript前端語言定義函數,僅在前端判斷檔案的字尾。
Pass-02
1.直接上傳,發現提示檔案類型不正确
2.抓包修改檔案類型,改成image/jpeg
3.改成image/jpeg
4.發包,上傳成功
5.菜刀連接配接成功
6.分析源碼
僅這條if語句判斷了上傳檔案的類型,修改Content-Type即可繞過。
Pass-03
1.直接上傳,提示
2.猜想可能是黑名單限制,利用其它字尾名進行繞過php3、phtml
3.上傳成功,菜刀連接配接成功
4.分析源碼
建立了個黑名單,其中的字尾都不能上傳。但是其它可解析php的字尾可以上傳并解析。
Pass-04
2.嘗試利用apache解析漏洞,apache讀取字尾從右向左,若遇見不認識的字尾名便向前繼續讀取,直到認識的字尾。
3.上傳成功,連接配接菜刀成功
4.方法二,其實這關考察的目的是 .htaccess檔案,上傳一個.htaccess内容如下的檔案:
SetHandler application/x-httpd-php
5.這樣所有檔案都會解析為php,然後再上傳圖檔馬,就可以解析:
6.連接配接菜刀成功
7.分析源碼
這裡把所有的字尾都過濾了,除了.htaccess,是以可以利用上傳.htaccess規則來進行繞過,把可以上傳的檔案字尾解析成php。
Pass-05
2.上傳.htaccess失敗,可能也把.htaccess給過濾了,嘗試使用apache解析漏洞繞過
3.連接配接菜刀成功
4.其實這題考察的是大小寫繞過,
在上一題pass-04的基礎上多了個過濾.htaccess,但是沒有對字尾的大小寫進行統一,這裡于是可以通過大小寫繞過。
Pass-06
1.直接上傳失敗,加空格繞過
2.上傳成功
3.菜刀連接配接成功
4.源碼分析
還是黑名單,但是沒有對字尾名進行去空處理,可在字尾名中加空繞過。
Pass-07
1.嘗試利用windows特性,會自動去掉字尾名中最後的 . ,抓包,在字尾加 .
同樣是黑名單,但是沒有對字尾名進行去 . 處理,利用windows特性,會自動去掉字尾名中最後的 . ,可在字尾名中加 . 繞過。
Pass-08
1.嘗試使用 ::$DATA 加在字尾之後進行繞過
php在window的時候如果檔案名+"::$DATA"會把::$DATA之後的資料當成檔案流處理,不會檢測字尾名.且保持"::$DATA"之前的檔案名,目的就是不檢查字尾名。
Pass-09
1.通過嘗試構造,加上點空格點繞過
還是黑名單過濾,并删掉了檔案名末尾的點,路徑拼接的是處理後的檔案名,通過構造 點+空格+點 繞過過濾。
Pass-10
1.直接上傳發現把字尾php替換為空
2.這樣可以使用雙寫繞過
4.連接配接菜刀成功
設定黑名單,把有問題的字尾名都替換為空,但是可以利用雙寫繞過。
Pass-11
2.應該是用到了白名單,抓包檢視,嘗試使用%00截斷進行繞過
白名單機制,但是$img_path直接拼接,是以可以利用%00截斷繞過。
Pass-12
1.上傳抓包檢視,可以使用00截斷,php後空格十六進制的20改為00
同樣是白名單,這次的save_path是通過post傳進來的,還是利用00截斷,但這次需要在二進制中進行修改,因為post不會像get對%00進行自動解碼
Pass-13
1.制作圖檔馬,copy 1.jpg /b + shell.php /a webshell.jpg
2.上傳圖檔馬
通過讀檔案的前2個位元組判斷檔案類型,是以直接上傳圖檔馬即可。也可以在一句話檔案内容前面加圖檔的辨別例如GIF89a。
Pass-14
1.同樣直接上傳圖檔馬
3.分析源碼
這裡使用getimagesize函數擷取檔案類型,還是直接就可以利用圖檔馬就可進行繞過。也可以在一句話檔案前加圖檔辨別碼例如GIF89a。
Pass-15
1.同樣可以使用圖檔馬上傳
3.源碼分析
這裡是用php_exif子產品來判斷檔案類型,還是直接就可以利用圖檔馬就可進行繞過。
Pass-16
1.直接上傳圖檔馬
2.成功上傳
綜合判斷了字尾名、content-type,以及利用imagecreatefrompng
判斷是否為png圖檔,最後再做了一次二次渲染。
Pass-17
1.提示代碼審計,是以先分析下源碼
這裡先将檔案上傳到伺服器,然後判斷檔案字尾是否在白名單裡,如果在則重命名,否則删除,是以我們可以上傳1.php隻需要在它删除之前通路即可,可以利用burp的intruder子產品不斷上傳,然後我們不斷的通路重新整理該位址即可。
2.抓包轉到intruder子產品,進行不斷上傳
3.在不斷上傳的中,不停重新整理浏覽器位址,即可通路到檔案内容
Pass-18
1.通過代碼審計,這個對檔案字尾名做了白名單判斷,然後會一步一步檢查檔案大小、檔案是否存在等等,将檔案上傳後,對檔案重新命名,同樣存在條件競争的漏洞。可以不斷利用burp發送上傳圖檔馬的資料包,由于條件競争,程式會出現來不及rename的問題,進而上傳成功
2.通過條件競争,圖檔馬來不及改名就上傳了
3.用檔案包含檢視檔案
Pass-19
1.源碼審計,發現move_uploaded_file()函數中的img_path是由post參數save_name控制的,是以可以在save_name利用00截斷繞過
3.檔案執行成功
Pass-20
1.代碼審計
2.通過上傳一個php檔案,改包