UPLOAD-LABS1

less1

(js验证)

我们上传PHP的发现不可以,只能是jpg,png,gif(白名单限制了)

 我们可以直接去修改限制

在查看器中看到使用了onsubmit这个函数,触发了鼠标的单击事件,在表单提交后马上调用了return checkFile这个函数对上传的文件进行检查

把onsubmit这个直接删除掉即可。当提交表单时执行一段 JavaScript。它只认true或者false.如果不返回值,则默认为true

上传同样的文件,蚁剑链接即可

我们也可以直接去抓包修改

 修改好之后就用蚁剑连接就可以了

less2

绕过MIMETYPE

MIME:多用途互联网邮件扩展协议。用途为根据文件后缀名判断文件类型,用什么应用程序打开,但是在这里是根据文件类型判断后缀名。$_FILES['myfile']['type']文件的MIME类型,需要浏览器提供该信息的支持,例如"image/gif"MIME 给出的是文件的MIME信息 ,此信息可以用来在HTTP Conten-type 头 信息中发送 正确的信息,如:header("Cotent-type:image/gif")

知道这一关是MIME验证,就是会检查求情包, 只对文件类型(type)进行了验证,必须要是image/jpeg或者image/png或者image/gif的格式,没有对后缀进行验证,只需要使用bp抓包将Content-Type:的参数修改成image/jpeg或者image/png或者image/gif其中的一种,进行绕过就好

分类

最常见的还是image

我们也是直接看看php可不可以,不可以我们抓包看看,png改成php,再访问就可以了,这里是没有改类型,而是改后缀

 重新上传3.php,mm为cmd

 

 less3

任务

上传一个脚本文件到服务器,并能成功执行。
 

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空
 
        if(!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

 禁止上传.asp|.aspx|.php|.jsp后缀文件,过滤不严格,用.phtml .php5 .pht进行绕过

 less4

任务

拿到一个shell

提示

禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件!

可以看到这道题被限制的太多了

上传.htaccess文件看看

 .htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

双引号即后面需要上传的

先上传  .htaccess 成功后再上传 .png文件

也就是将png文件当作php文件执行

 

 less5

任务

上传一个webshell到服务器

提示

禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件

先尝试hatccess,提示却说此文件也被限制了,

 查看源码

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

 可以和前面的对比一下看看

第五关比第四关少了strtolower,这说明我们可以尝试大小写绕过

$file_ext = strtolower($file_ext); //转换为小写

 上传shell.Php,上传成功

 

 less6

任务

拿到一个shell服务器
 

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //首尾去空
 
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

 也是有黑名单,但是缺少strtolower,说明可以尝试大小写绕过

还有发现第六关没有

$file_ext = trim($file_ext); //首尾去空

先看大小写绕过,其他师傅可以

 提示

 禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件

观察一下这个提示就会发现没有过滤到pHp6,可以上传看看

发现是可以的

<think>嗯,用户想要找关于upload-labs1关到第21关的解法或攻略。我之前处理过类似的问题,记得用户提到过几个引用,比如第8关和第16关的解决方法。我需要先回顾一下这些引用内容,确保信息准确。 首先,引用[1]提到第8关和第4关类似,需要删除文件末尾的点,或者在Windows系统中处理后缀名的点。可能第8关的上传漏洞是利用了文件名结尾的点的处理问题,类似Pass-08的解法,用Burp抓包然后加一个点。而引用[2]则提到第16关使用了exif_imagetype函数检测图片类型,所以需要用图片马,比如在图片中嵌入PHP代码,或者用第十四关的方法绕过。这说明某些关卡可能有相似的解法,可以复用之前的策略。 接下来,用户需要1到21关的攻略,可能需要分关卡逐一说明。我应该先列出每个关卡的关键点和解决方法,注意引用已有的信息,同时补充其他关卡的常见绕过方法。例如,前几关通常是基础的文件上传,没有过滤,直接上传PHP文件即可。后面的关卡可能涉及MIME类型检查、黑名单扩展名、.htaccess文件利用、文件头检测、大小写绕过、点空格点绕过、双写扩展名、图片马、exif检测、二次渲染等。 需要注意的是,每个关卡可能有不同的检测机制,比如第4关检查扩展名黑名单,可能需要用.htaccess或特殊扩展名绕过;第5关检查后缀名大小写,所以可以尝试Php这样的扩展名;第7关去空格,可能需要用点空格点绕过;第8关的Windows后缀名处理,加一个点;第16关用exif_imagetype,需要图片马,比如GIF头部加上PHP代码。 同时,要确保回答结构清晰,分点说明,每个关卡的关键点和解决方法,并适当引用用户提供的引用内容。例如,第8关引用[1],第16关引用[2]。其他关卡可能需要根据常见的upload-labs攻略来补充,比如第10关的双写绕过,第11关的00截断,第17关的二次渲染使用GIF图片马等。 还要注意用户提到的系统级指令,比如数学公式的正确使用,但在这个问题中可能涉及较少,主要关注攻略部分。回答需要使用中文,分关卡说明,结构清晰,帮助用户逐步解决每个关卡的问题。最后生成相关问题,可能涉及绕过方法、检测机制、工具使用等。 需要验证每个关卡的具体解法是否正确,比如第12关的00截断在GET请求中的使用,第14关的图片马,第15关的getimagesize函数检测,第18关的条件竞争等。确保每个步骤准确,没有遗漏关键点,并且引用正确。 最后,生成的相关问题应该与upload-labs的解题技巧、检测机制、工具使用相关,帮助用户深入理解文件上传漏洞的各种绕过方法。</think>### upload-labs 1-21 关卡核心解法 #### 基础关卡(1-10) 1. **Pass-01** - 绕过前端JS验证:修改文件后缀为`.php`,使用Burp拦截请求后修改文件类型为`image/jpeg`[^2]。 - 示例文件:`shell.php` 2. **Pass-04** - 黑名单绕过:上传`.htaccess`文件配置允许解析`.jpg`为PHP,再上传图片马。 - `.htaccess`内容: ```apache AddType application/x-httpd-php .jpg ``` 3. **Pass-08** - Windows文件名解析漏洞:上传文件名结尾加`.`,如`shell.php.`,系统会自动去除末尾点[^1]。 #### 中级关卡(11-16) 4. **Pass-11** - 双写绕过:上传文件名如`shell.pphphp`,后端过滤`php`后变为`shell.php`。 5. **Pass-14** - 图片马制作:在图片末尾嵌入PHP代码,使用命令合成: ```bash copy 1.jpg/b + shell.php/a shell.jpg ``` 6. **Pass-16** - 绕过`exif_imagetype`检测:使用真实图片头部(如GIF89a)后接PHP代码: ```php GIF89a<?= system($_GET['cmd']); ?> [^2] ``` #### 高级关卡(17-21) 7. **Pass-18** - 条件竞争上传:快速重复上传`.php`文件并访问,利用服务器未及时删除临时文件的特点。 8. **Pass-19** - 白名单+移动文件漏洞:上传`.php`后通过路径穿越保存为`.php`,如文件名`../shell.php`。 9. **Pass-21** - 多维数组绕过:修改上传参数为数组形式,例如: ```http Content-Disposition: form-data; name="upload_file[]"; filename="shell.php" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值