文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释

        upload-labs通关过程由自己一步步做出过程解析,有什么意见或建议请留言,我会采纳修改。

upload-labs文件包链接:https://pan.baidu.com/s/1FjDOTzKD6dAj4enFI1bgyg 
提取码:8888

目录

Pass-01

 Pass-02

  Pass-03

​​​​​​​  Pass-04

Pass-05

Pass-06

Pass-07

Pass-08

Pass-09

Pass-10

 Pass-11

 Pass-12

 Pass-13

pass-14

pass-15

pass-16

pass-17

pass-18

pass-19

 pass-20


Pass-01

前端验证绕过

  • 页面另存为本地文件,更改前端限制

  • 关闭浏览器js代码禁用

  • 使用代理拦截上传

  • 方法1:页面另存为本地文件,用记事本打开,找到文件上传类型,添加所要上传的文件类型,保存并打开修改过的页面,再上传就成功啦。文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第1张图片

  • 方法2:浏览器中关闭JavaScript代码解析则可。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第2张图片

  •  方法3:使用Burp Suit代理,拦截,将所有JS限制删除,再上传phpinfo.php文件。(三种方法原理一样)

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第3张图片

 Pass-02

MIME-Type验证

MIME-Type介绍:

MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

  • 方法1:由pass2源码可以看到mime-type元素标签,bs代理中更改Content-Type图片类型的描述,如下图,就可以通过啦。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第4张图片

 将 Content-Type: application/octet-stream的文件类型改为源码中允许上传的文件类型,如image/jpeg,然后放行就通关啦。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第5张图片

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第6张图片

  Pass-03

 黑名单绕过

基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
这一关禁止.jsp、.php、.asp、.aspx后缀名的文件上传。

所以这一关就比较简单啦,可上传php1、php2、phtml、php5等等。

注:上传成功后,文件名会被更改,所以需要查看文件上传的位置以及文件名。

  •  方法1:读取源码,可知pass3为黑名单上传,直接投机取巧,更改文件后缀上传.php5、php4、php3等黑名单中不包含的文件类型就可通过。

  Pass-04

点空格点绕过  ". ."

Windows下xx.jpg[空格]或xx.jpg.这两类文件都是不允许存在的,若这样命名,windows会默认除去空格或点。此处会删除末尾的点,但是没有去掉末尾的空格,因此上传一个.php空格文件即可。

方法1:根据源码去除后缀规则,先去除末尾点,再去除::$DATA,再去除尾部空格的顺序,可以在后面再加一个点,这样就可以利用·windows文件规则上传文件

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第7张图片

 用bs代理,抓包,(将拦截的包发送到重发器中进行操作,防止一次操作不成功,可以多次重复操作,当然,也可以直接修改包,直接省略括号内的操作也可)

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第8张图片

在文件后缀尾部直接加点空格点,然后放包。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第9张图片

方法2:黑名单验证,.htaccess

禁止的有点多,但是没有htaccess。

htaccess文件介绍:

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。

创建1.htaccess,并将其上传:

Pass-05

大小写绕过

点空格点绕过

方法1:读取源码可知,这一关可以根据大小写绕过通关

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第10张图片

方法2:与pass4中的方法1相同,bs抓包,文件后缀加点空格点

方法3:这一关,先上传一个以auto_prepend_file=1.gif为内容的.user.ini文件,然后再上传一个内容为php的一句话的脚本,命名为1.gif,.user.ini文件里面的意思是:所有的php文件都自动包含1.gif文件。.user.ini相当于一个用户自定义的php.ini。

Pass-06

空格绕过

方法1:与四、五关原理相同,用bs抓包,在文件后缀加空格,然后放包就通过啦。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第11张图片

Pass-07

点绕过

方法1:与前几关原理相同,用bs抓包,在文件后缀加点,然后放包就通过啦。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第12张图片

Pass-08

::$DATA 绕过

NTFS文件系统包括对备用数据流的支持。这不是众所周知的功能,主要包括提供与Macintosh文件系统中的文件的兼容性。备用数据流允许文件包含多个数据流。每个文件至少有一个数据流。在Windows中,此默认数据流称为:$ DATA。

方法1:由源码看出,这关没有::$DATA字符去除,所以用该字符绕过,用bs抓包,在文件后缀加::$DATA,然后放包就通过啦。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第13张图片

方法2:也可用点空格点绕过

Pass-09

点空格点绕过

方法1:读取源码便知,与上几关类似

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第14张图片

Pass-10

 双写绕过

方法1:由源码可知,$deny_ext中的元素文件类型都加入上传黑名单,有该类文件上传,str_ireplace函数将文件后缀名替换为空格。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第15张图片

 因此可以使用文件双写绕过,bs抓包,将文件后缀.php改为.pphphp

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第16张图片

 Pass-11

截断突破上传限制(get)

原理:URL转码会将 %00 转码为特殊字符。

条件:php5.5.9版本

方法1:上传php脚本文件,用bs抓包,在文件路径后加文件名.php%00,再将文件名(filename)后的文件后缀改为.jpg(允许上传的文件类型)。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第17张图片

 Pass-12

截断突破上传限制(get)

原理:和Pass-11的漏洞非常类似,唯一的不同是请求方式由GET变成了POST,%00的写法对GET有效,因为GET方式将信息提交到地址栏,%00会被转码,但是POST却不会对其进行转码,因此需要修改 HEX 信息。POST方式直接写00即可。

条件:php5.5.9版本

方法1:上传php脚本文件,用bs抓包,在文件路径后加文件名.php+(“+”作为定位标记,在16进制中为2b,方便后面操作查)再将文件名(filename)后的文件后缀改为.jpg(允许上传的文件类型)。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第18张图片

 进去16进制模式,将2b改为00,然后放包。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第19张图片

 Pass-13

伪图片绕过

方法1:读取源码可知,pass13判断文件格式方法为前两个字节

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第20张图片

将php脚本用记事本打开,在行首加GIF89a,上传即可。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第21张图片

 方法2:图片挂马:将图片和脚本放在同一目录下,执行cmd命令,在cmd中执行

copy /b 图片+php脚本 新文件名,然后直接上传伪图片zgr_shell.png

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第22张图片

 最后用pass13中include.php文件包含解析图片马(http://192.168.51.228/upload-labs-env/include.php?file=zgr_shell.php)

pass-14

getimagesize()突破

本pass使用getimagesize()检查是否为图片文件!

方法1:直接上传合成的图片马,参照pass13的方法2.

function isImage($filename){
    $types = '.jpeg|.png|.gif';
    if(file_exists($filename)){
        $info = getimagesize($filename);
        $ext = image_type_to_extension($info[2]);
        if(stripos($types,$ext)>=0){
            return $ext;
        }else{
            return false;
        }
    }else{
        return false;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

pass-15

exif_imagetype()突破

本pass使用exif_imagetype()检查是否为图片文件!

跟 Pass-13一样,直接上传图片马即可绕过!

方法1:跟 Pass-13一样,直接上传图片马即可绕过!

function isImage($filename){
    //需要开启php_exif模块
    $image_type = exif_imagetype($filename);
    switch ($image_type) {
        case IMAGETYPE_GIF:
            return "gif";
            break;
        case IMAGETYPE_JPEG:
            return "jpg";
            break;
        case IMAGETYPE_PNG:
            return "png";
            break;    
        default:
            return false;
            break;
    }
}

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $res = isImage($temp_file);
    if(!$res){
        $msg = "文件未知,上传失败!";
    }else{
        $img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$res;
        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = "上传出错!";
        }
    }
}

pass-16

二次渲染的gif文件绕过

方法1:现在制作一个gif图片马,copy就可以了。也可以winhex制作。制作后便上传,发现无法利用。然后将上传的图片重新下载下来,放入winhex,进行对比。可以找到二次渲染后不变的地方,而这个地方就是可以插入一句话的地方。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第23张图片

上传修改好的图片马,蚁剑连接成功。

pass-17

条件竞争

条件:要知道源码 

声明:这一关条件竞争,属于套娃脚本,根据源码可知,文件是先上传至服务器路径,在进行判断,不符合在删除,我们就趁上传至服务器的时间差,完成套娃脚本执行,生成新的脚本文件。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第24张图片

方法一:

利用文件上传后,后台判断、删除的时间漏洞执行shell脚本命令,创建另一个shell脚本文件

上传脚本文件内容为以下的.php格式

' ) ; ?>

bs拦截——创造变量a——行动——发送至攻击器

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第25张图片

positions下——清除变量——添加变量a

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第26张图片

 payload下——没有负载——生成次数——开始攻击

 **攻击过程中要不断刷新执行上传文件路径文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第27张图片

pass-18

这一关相比17关,上传的文件就必须是白名单中的文件。

Pass-18.jpg是包含17关的webshell.php的内容的图片马。毕竟是先检查后缀的。

这里上传的文件以及生成的shell.php会出现在upload-labs目录中。

然后再访问http://ip/upload-labs/include.php?file=./对应的文件名。就可以生成shell.php。

也可以直接上传13~15关的那种图片马,当然也需要知道重新命名后的文件名,再利用文件包含即可。同13~15关差不多,唯一多了一步就是需要确定上传的文件的文件名以及位置。

pass-19

本关卡直接点绕过上传

方法1:保存名称后加点

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第28张图片

 验证是否上传成功:右击图片,复制图片地址 文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第29张图片

 执行图片路径,php文件可以解析,表示上传成功。

文件上传漏洞——upload-labs文件包链接及通关详解过程、代码注释_第30张图片

 pass-20

与13,15关相同,直接上传图片马即可。

具体请参照13关,15关。

你可能感兴趣的:(渗透测试训练,学习笔记——文件上传漏洞,javascript,css,html)