文件上传upload-labs靶场通关指南

第一关 前端js检查——后缀检查

分析:尝试上传1.php文件,提示只允许上传png|jpg|gif文件。

尝试:上传一个1.php.jpg文件。利用burup suite抓包,并修改 为1.php,上传成功,说明只进行了前端js检查。

浏览器访问upload/1.php,显示如下,成功上传shell

第二关 MIME绕过

根据源码看,进行了MIME类型检查。

使用burp suite抓包,改包:修改content-Type: image/png,如下:

从上图可见上传成功,使用cknife连接shell.php

 第三关 黑名单限制 - 文件拓展名绕过

通过以下提示(或者查看)可看出不允许上传.asp,.aspx,.php,.jsp后缀文件

 可考虑使用.phtml,.php3等绕过

上传shell.phtml、shell.php3

上传成功,使用cknife连接

第四关 黑名单验证 - .htaccess文件绕过

由提示可知,几乎禁止了全部可执行文件后缀。

此时可考虑使用.htaccess文件进行黑名单绕过

1)创建.htaccess文件,并上传

<FilesMatch "shell.png">
SetHandler application/x-httpd-php
</FilesMatch>

.htaccess文件说明:通过一个.htaccess文件调用php的解析器去解析一个文件中只要包含“shell.png”这个字符串任意文件。

2)上传shell.png

<?php @phpinfo();?>

3)浏览器访问shell.png,解析成功,如下:

第五关 黑名单验证 - 文件后缀大写绕过

这一关禁止上传.htaccess文件,但是没有强制转换为小写,所以可以使用全部大写文件后缀进行绕过。

 上传shell5.PHP,上传成功

使用cknife连接shell

第六关 黑名单验证 - 空格绕过

分析源码,进行了大小写转化,也无法上传.htaccess文件,但是没有过滤空格,可考虑空格绕过

尝试上传“shell.php ”文件,

 上传成功

注意:只有windows会默认去除文件后缀后的空格,linux不会,所以空格绕过只适用于windows。

第七关 点绕过

分析源码发现,比上一关增加了去除空格,可以尝试利用点绕过 

 利用burp suite抓包并修改文件名为“phpinfo.php.

 如上图,上传成功。

注意:“.”和“ ”/空格绕过只适用于windows系统,如“phpinfo.php.”、“phpinfo.php ”,windows在解析时会默认去除最后的“.”和“ ”/空格。

第八关 ::DATA绕过

分析源码,这一关删除文件末尾的点,但是没有去除::DATA字符串,所以利用::DATA字符串绕过

利用burp suite抓包并在文件名后面加“::DATA”字符串

如上图,上传成功。 

注意:::DATA绕过只适用于windows。在windows系统中文件名+::DATA,会把::DATA后面的内容当做数据流处理,且会保持之前的文件名

第九关 .空格. 绕过

分析源码,单独适用. 、空格、::DATA均不能绕过,尝试使用.和空格结合进行绕过

利用Burp suite抓包,并修改文件名为“phpinfo.php. .”

如上图,上传成功,windows系统下可成功解析。

第十关 双写绕过

分析源码,这一关对黑名单的文件后缀进行了空替换,所以可以尝试使用双写绕过

利用Burp suite抓包,修改文件名,如下:

 如上图,上传成功,可成功利用。

第十一关 白名单  00截断

分析源码,只能上传png,jpg,gif文件,之后对文件名进行了拼接。可以尝试使用%00截断。

利用Burp suite抓包,改包

根据源码 $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

修改upload/shell.php%00,%00后面的被截断。

00截断是操作系统层的漏洞,由于操作系统是C语言或者汇编语言编的,在这两种语言中\0(0x00)代表字符串的结尾。因此我们可以通过插入\0字符串的方式,达到字符串截断的目的。在url中\0de ASCII是%00。

php实现00截断的前提条件:1)php版本小于5.3.29  2)magic_quotes_gpc=Off

第十二关  00截断

与上一关类似,本关是post,如下:

若上传不成功,可检查下php版本是否为5.3以下,或者尝试对%00进行url编码。

第十三关  文件头检查

分析源码可知,这一关检查文件头

1)上传1.GIF文件,利用burp suite抓包,并修改数据包,在图片内容增加一句话木马,如下:

 利用文件包含漏洞解析gif文件,如:

include()函数:包含文件,系统会自动将被包含文件中的代码嵌入到当前文件中。如果遇到PHP代码是会解析执行的。 

第十四关  getimagesize绕过

 本关使用getimagesize检查文件,

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

绕过方法

1)使用上一关的方法 :利用Bp抓包,在图片内容中插入php代码,利用文件包含漏洞执行恶意代码。

2)使用图片马(如下),利用文件包含漏洞执行恶意代码。

copy "1.GIF" /b + phpinfo.php /a webshell-2.GIF

上传webshell-2.GIF,数据包如下

上传成功,利用文件包含漏洞解析一句话木马

第十五关  exif_imagetype绕过

本关使用exif_imagetype()函数检查图片,

绕过方式同上一关

第十六关 图片二次渲染

分析源码,本关对图片进行了二次渲染

 在图片末尾添加一句话木马,已行不通,在图片二次渲染时会删除该段代码。

imagecreatefrom系列函数从文件或者url中载入图像,抓取图片信息,删除木马信息。

GIF图片绕过方法:对比二次渲染前后图片变化,在相同的地方插入php代码。

第十七关

  • 解法1:利用条件竞争漏洞

分析源码,本关是先上传文件,后检查是否符合要求,符合重命名,不符合删除文件。利用利用处理时间差,访问木马文件。

1)利用Burp suite抓包,然后利用Intruder模块爆破,设置如下:

2)然后在浏览器疯狂不断访问upload/phpinfo.php,或者写个脚本文件。

  • 解法2:利用图片马 + 文件包含漏洞

分析源码,本关检查了文件后缀,对文件进行了重命名和上传到固定位置,尝试文件后缀绕过

 上传phpinfo.png

 上传成功,利用文件包含漏洞执行木马文件。

第十八关 

利用图片马+文件包含漏洞即可绕过。

第十九关

解法1:利用文件后缀大写绕过 + 文件包含漏洞

解法2:move_upload_file()函数会忽略掉末尾的“/.”

利用Burp suite修改数据包,如下: 

直接访问木马文件

第二十关 数组绕过

分析源代码,本关对用户传入的变量仅当做字符串处理,并未进行其他的校验。所以可以尝试传入数组,改变代码逻辑。

$is_upload = false;
$msg = null;
if(!empty($_FILES['upload_file'])){ // 非空检查
    //检查MIME
    $allow_type = array('image/jpeg','image/png','image/gif');
    if(!in_array($_FILES['upload_file']['type'],$allow_type)){
        $msg = "禁止上传该类型文件!";
    }else{
        //检查文件名
        $file = empty($_POST['save_name']) ? $_FILES['upload_file']['name'] : $_POST['save_name'];
        if (!is_array($file)) {
            $file = explode('.', strtolower($file));
        }

        $ext = end($file); // 取数组最后一个元素
        $allow_suffix = array('jpg','png','gif');
        if (!in_array($ext, $allow_suffix)) { // 检查save_name字段的后缀
            $msg = "禁止上传该后缀文件!";
        }else{
            // reset()获取数组的第一个元素,count()返回数组中元素个数
            $file_name = reset($file) . '.' . $file[count($file) - 1];
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH . '/' .$file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $msg = "文件上传成功!";
                $is_upload = true;
            } else {
                $msg = "文件上传失败!";
            }
        }
    }
}else{
    $msg = "请选择要上传的文件!";
}

利用Burp suite抓包,并尝试修改save_name参数为数组,传入save_name[0]:upload.php/,save_name[2]:png,save_name[1]不传递。这样,$ext=png可以绕过文件后缀检查,reset($file)=upload20.php/,$file[count($file)-1]=$file[1]=save_name[1],所以$file_name=upload20.php/.

直接访问

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要成功通关upload-labs靶场,你需要按照卡的顺序逐一完成各个卡。该靶场提供了各种文件上传漏洞类型的练习,从易到难,旨在帮助新手巩固练习。 在上传文件的过程中,键点是要找到目标文件存储的路径,并将临时存储路径的文件移动到目标路径。根据引用中的代码片段,可以看出在成功移动文件后,即可通关。 具体来说,通过挑战中提供的信息,例如引用中的文件路径,可以尝试在上传时修改文件的路径,使其符合要求。根据引用中的代码,移动文件的函数是move_uploaded_file,这意味着只有当文件成功移动到指定路径时,才会通关。 因此,通关upload-labs靶场键是了解文件上传漏洞的原理、找到目标文件的存储路径,并通过修改文件路径、上传恶意文件等方式,成功移动文件到指定路径。通过逐一完成各个卡,你将能够巩固你的文件上传漏洞知识并提升你的技能水平。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [WEB渗透学习-upload-labs靶场](https://download.csdn.net/download/weixin_41571993/85188837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [文件上传漏洞upload-labs靶场通关教程 1-20(带原理)](https://blog.csdn.net/m0_72755466/article/details/128499580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值