靶機項目地址:https://github.com/c0ny1/upload-labsphp
1.直接上傳php一句話,報錯html
2.信息回顯速度很快,猜測是前端驗證,能夠在修改前端代碼,刪掉checkFile()函數,或者上傳jpg後綴經過burp抓包修改php後綴繞過前端驗證前端
3.上傳成功git
4.菜刀鏈接成功github
5.分析源碼web
Javascript前端語言定義函數,僅在前端判斷文件的後綴。shell
1.直接上傳,發現提示文件類型不正確apache
2.抓包修改文件類型,改爲image/jpegwindows
3.改爲image/jpeg瀏覽器
4.發包,上傳成功
5.菜刀鏈接成功
6.分析源碼
僅這條if語句判斷了上傳文件的類型,修改Content-Type便可繞過。
1.直接上傳,提示
2.猜測多是黑名單限制,利用其它後綴名進行繞過php3、phtml
3.上傳成功,菜刀鏈接成功
4.分析源碼
創建了個黑名單,其中的後綴都不能上傳。可是其它可解析php的後綴能夠上傳並解析。
1.直接上傳,提示
2.嘗試利用apache解析漏洞,apache讀取後綴從右向左,若碰見不認識的後綴名便向前繼續讀取,直到認識的後綴。
3.上傳成功,鏈接菜刀成功
4.方法二,其實這關考察的目的是 .htaccess文件,上傳一個.htaccess內容以下的文件:
SetHandler application/x-httpd-php
5.這樣全部文件都會解析爲php,而後再上傳圖片馬,就能夠解析:
6.鏈接菜刀成功
7.分析源碼
這裏把全部的後綴都過濾了,除了.htaccess,因此能夠利用上傳.htaccess規則來進行繞過,把能夠上傳的文件後綴解析成php。
1.直接上傳,提示
2.上傳.htaccess失敗,可能也把.htaccess給過濾了,嘗試使用apache解析漏洞繞過
3.鏈接菜刀成功
4.其實這題考察的是大小寫繞過,
5.分析源碼
在上一題pass-04的基礎上多了個過濾.htaccess,可是沒有對後綴的大小寫進行統一,這裏因而能夠經過大小寫繞過。
1.直接上傳失敗,加空格繞過
2.上傳成功
3.菜刀鏈接成功
4.源碼分析
仍是黑名單,可是沒有對後綴名進行去空處理,可在後綴名中加空繞過。
1.嘗試利用windows特性,會自動去掉後綴名中最後的 . ,抓包,在後綴加 .
2.上傳成功
3.鏈接菜刀成功
4.分析源碼
一樣是黑名單,可是沒有對後綴名進行去 . 處理,利用windows特性,會自動去掉後綴名中最後的 . ,可在後綴名中加 . 繞過。
1.嘗試使用 ::$DATA 加在後綴以後進行繞過
2.上傳成功
3.鏈接菜刀成功
4.分析源碼
php在window的時候若是文件名+"::$DATA"會把::$DATA以後的數據當成文件流處理,不會檢測後綴名.且保持"::$DATA"以前的文件名,目的就是不檢查後綴名。
1.經過嘗試構造,加上點空格點繞過
2.上傳成功
3.鏈接菜刀成功
4.分析源碼
仍是黑名單過濾,並刪掉了文件名末尾的點,路徑拼接的是處理後的文件名,經過構造 點+空格+點 繞過過濾。
1.直接上傳發現把後綴php替換爲空
2.這樣能夠使用雙寫繞過
3.上傳成功
4.鏈接菜刀成功
5.分析源碼
設置黑名單,把有問題的後綴名都替換爲空,可是能夠利用雙寫繞過。
1.直接上傳,提示
2.應該是用到了白名單,抓包查看,嘗試使用%00截斷進行繞過
3.上傳成功
4.菜刀鏈接成功
5.分析源碼
白名單機制,可是$img_path直接拼接,所以能夠利用%00截斷繞過。
1.上傳抓包查看,能夠使用00截斷,php後空格十六進制的20改成00
2.上傳成功
3.菜刀鏈接成功
4.源碼分析
一樣是白名單,此次的save_path是經過post傳進來的,仍是利用00截斷,但此次須要在二進制中進行修改,由於post不會像get對%00進行自動解碼
1.製做圖片馬,copy 1.jpg /b + shell.php /a webshell.jpg
2.上傳圖片馬
3.上傳成功
4.分析源碼
經過讀文件的前2個字節判斷文件類型,所以直接上傳圖片馬便可。也能夠在一句話文件內容前面加圖片的標識例如GIF89a。
1.一樣直接上傳圖片馬
2.上傳成功
3.分析源碼
這裏使用getimagesize函數獲取文件類型,仍是直接就能夠利用圖片馬就可進行繞過。也能夠在一句話文件前加圖片標識碼例如GIF89a。
1.一樣能夠使用圖片立刻傳
2.上傳成功
3.源碼分析
這裏是用php_exif模塊來判斷文件類型,仍是直接就能夠利用圖片馬就可進行繞過。
1.直接上傳圖片馬
2.成功上傳
3.分析源碼
綜合判斷了後綴名、content-type,以及利用imagecreatefrompng
判斷是否爲png圖片,最後再作了一次二次渲染。
1.提示代碼審計,因此先分析下源碼
這裏先將文件上傳到服務器,而後判斷文件後綴是否在白名單裏,若是在則重命名,不然刪除,所以咱們能夠上傳1.php只須要在它刪除以前訪問便可,能夠利用burp的intruder模塊不斷上傳,而後咱們不斷的訪問刷新該地址便可。
2.抓包轉到intruder模塊,進行不斷上傳
3.在不斷上傳的中,不停刷新瀏覽器地址,便可訪問到文件內容
1.經過代碼審計,這個對文件後綴名作了白名單判斷,而後會一步一步檢查文件大小、文件是否存在等等,將文件上傳後,對文件從新命名,一樣存在條件競爭的漏洞。能夠不斷利用burp發送上傳圖片馬的數據包,因爲條件競爭,程序會出現來不及rename的問題,從而上傳成功
2.經過條件競爭,圖片馬來不及更名就上傳了
3.用文件包含查看文件
1.源碼審計,發現move_uploaded_file()函數中的img_path是由post參數save_name控制的,所以能夠在save_name利用00截斷繞過
2.上傳成功
3.文件執行成功
1.代碼審計
2.經過上傳一個php文件,改包
完。