靶機項目地址:https://github.com/c0ny1/upload-labs
Pass-01
1.直接上傳php一句話,報錯
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
1.直接上傳,提示
2.嘗試利用apache解析漏洞,apache讀取后綴從右向左,若遇見不認識的后綴名便向前繼續讀取,直到認識的后綴。
3.上傳成功,連接菜刀成功
4.方法二,其實這關考察的目的是 .htaccess文件,上傳一個.htaccess內容如下的文件:
SetHandler application/x-httpd-php
5.這樣所有文件都會解析為php,然后再上傳圖片馬,就可以解析:
6.連接菜刀成功
7.分析源碼
這里把所有的后綴都過濾了,除了.htaccess,所以可以利用上傳.htaccess規則來進行繞過,把可以上傳的文件后綴解析成php。
Pass-05
1.直接上傳,提示
2.上傳.htaccess失敗,可能也把.htaccess給過濾了,嘗試使用apache解析漏洞繞過
3.連接菜刀成功
4.其實這題考察的是大小寫繞過,
5.分析源碼
在上一題pass-04的基礎上多了個過濾.htaccess,但是沒有對后綴的大小寫進行統一,這里於是可以通過大小寫繞過。
Pass-06
1.直接上傳失敗,加空格繞過
2.上傳成功
3.菜刀連接成功
4.源碼分析
還是黑名單,但是沒有對后綴名進行去空處理,可在后綴名中加空繞過。
Pass-07
1.嘗試利用windows特性,會自動去掉后綴名中最后的 . ,抓包,在后綴加 .
2.上傳成功
3.連接菜刀成功
4.分析源碼
同樣是黑名單,但是沒有對后綴名進行去 . 處理,利用windows特性,會自動去掉后綴名中最后的 . ,可在后綴名中加 . 繞過。
Pass-08
1.嘗試使用 ::$DATA 加在后綴之后進行繞過
2.上傳成功
3.連接菜刀成功
4.分析源碼
php在window的時候如果文件名+"::$DATA"會把::$DATA之后的數據當成文件流處理,不會檢測后綴名.且保持"::$DATA"之前的文件名,目的就是不檢查后綴名。
Pass-09
1.通過嘗試構造,加上點空格點繞過
2.上傳成功
3.連接菜刀成功
4.分析源碼
還是黑名單過濾,並刪掉了文件名末尾的點,路徑拼接的是處理后的文件名,通過構造 點+空格+點 繞過過濾。
Pass-10
1.直接上傳發現把后綴php替換為空
2.這樣可以使用雙寫繞過
3.上傳成功
4.連接菜刀成功
5.分析源碼
設置黑名單,把有問題的后綴名都替換為空,但是可以利用雙寫繞過。
Pass-11
1.直接上傳,提示
2.應該是用到了白名單,抓包查看,嘗試使用%00截斷進行繞過
3.上傳成功
4.菜刀連接成功
5.分析源碼
白名單機制,但是$img_path直接拼接,因此可以利用%00截斷繞過。
Pass-12
1.上傳抓包查看,可以使用00截斷,php后空格十六進制的20改為00
2.上傳成功
3.菜刀連接成功
4.源碼分析
同樣是白名單,這次的save_path是通過post傳進來的,還是利用00截斷,但這次需要在二進制中進行修改,因為post不會像get對%00進行自動解碼
Pass-13
1.制作圖片馬,copy 1.jpg /b + shell.php /a webshell.jpg
2.上傳圖片馬
3.上傳成功
4.分析源碼
通過讀文件的前2個字節判斷文件類型,因此直接上傳圖片馬即可。也可以在一句話文件內容前面加圖片的標識例如GIF89a。
Pass-14
1.同樣直接上傳圖片馬
2.上傳成功
3.分析源碼
這里使用getimagesize函數獲取文件類型,還是直接就可以利用圖片馬就可進行繞過。也可以在一句話文件前加圖片標識碼例如GIF89a。
Pass-15
1.同樣可以使用圖片馬上傳
2.上傳成功
3.源碼分析
這里是用php_exif模塊來判斷文件類型,還是直接就可以利用圖片馬就可進行繞過。
Pass-16
1.直接上傳圖片馬
2.成功上傳
3.分析源碼
綜合判斷了后綴名、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截斷繞過
2.上傳成功
3.文件執行成功
Pass-20
1.代碼審計
2.通過上傳一個php文件,改包
完。