upload-labs刷题小记

目录

前言

mime类型:

htaccess文件:

::$DATA

图片马

方法一cmd copy命令

方法二使用反汇编工具c32asm在16进制下添加

方法三使用ps工具

move_uploaded_file的小特点

pass-1-js验证:

pass-2-只验证Content-type:

pass-3-后缀名验证:

pass-4-htaccess

注意

pass--5--点-空-点:

pass-6-大小写绕过

pass-7-空点

pass-8-点空格

pass-9-::$DATA

pass-10

pass-11-双写绕过

pass-12-%00截断

pass-13-%00截断

pass-14-上传图片马

pass-15-getimagesize绕过

pass-16-exif_imagetype绕过

pass-17-二次渲染

pass-18-条件竞争

pass-19-条件竞争

pass-20-自定义保存路径

pass-21-数组绕过

总结


前言

upload-labs 我来了


mime类型:

MIME(多用途互联网邮件扩展类型)_百度百科

我自己在搭的留言板中上传图片就是使用mime类型验证,判断收上来的文件属不属于我限定的mime类型,来过滤。

htaccess文件:

htaccess_百度百科

可以修改目录文件,或指定文件的编码格式

提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

简单来说,我们需要的是其改变指定文件解析方式的作用,可以将我们上传的jpg文件使用php进行解读(setHandler)

ps1:启用.htaccess,需要修改httpd.conf,启用AllowOverride,并可以用AllowOverride限制特定命令的使用。如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:AccessFileName .config 。

ps2:  .htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。

::$DATA

在php+windows的情况下:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名。利用windows特性,可在后缀名中加” ::$DATA”绕过。

图片马

三种合成方式:

方法一cmd copy命令

完成后

发现ma.jpg文本中出现了一句话木马

ps:最好不要直接使用记事本添加,由于编码的问题,极容易是图片无法正常显示

copy命令中/b是以二进制进行

方法二使用反汇编工具c32asm在16进制下添加

ps最好在最后添加,在中间添加可能是图片不发完全显示。。

二且这个方法你直接记事本打开是看不到一句话木马的,因为咱们是16进制写进去的嘛,嘿嘿

方法三使用ps工具

进入ps,打开图片,在文件简介处直接添加木马。。

move_uploaded_file的小特点

该函数会忽略掉文件末尾的 /.(懂得都懂233)


pass-1-js验证:

本题为js过滤

对此我们可以直接禁用js,这样就可以上传php文件了,也可以通过burp抓包,在burp中将jpg改为php,之后在右键图片,在新标签中打开,即可获得其保存路径。。通过这样我满便可以将一句话木马上传至服务器233.

pass-2-只验证Content-type:

先上传一个正常图片,抓包,观察

 发现有mime类型传递,大概率是mime检查没跑了,这里直接修改filename,改为php文件,即可成功上传webshell,因为发送的包中content-type是mime类型,而在服务器只会检查contene-type而不会检查文件后缀名233

ps:同样可以直接上传一个php文件,通过抓包修改content-type为合法的值。。

pass-3-后缀名验证:

本题在pass2的基础上有加入了后缀名过滤,

除了使用mime类型还加入了后缀名限制

对此,既然已经知道限制了那些文件,那我们不用只写文件不就行了,完全可以使用PHP3嘛233

ps:选择后缀名时应该确认靶机httpd上开启了对应后缀名的使用

pass-4-htaccess

黑名单拒绝了几乎所有有问题的后缀名,除了.htaccess


前提条件(1.mod_rewrite模块开启。2.AllowOverride All
因此先上传一个.htaccess文件,内容如下:

注意

.htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。

<FilesMatch "shell"> //使用正则表达式匹配,匹配到shell就执行
SetHandler application/x-httpd-php  //将改文件使用php解析,不考虑其后缀名
</FilesMatch>

ps,FilesMatch的作用是匹配限制,不加也可以,如果不加的话,.htaccess文件所在的目录下所有文件都会以php方式解析

上传完.htaccess后,再上传装有木马的shell.jpg,

即可

 成功上传webshell

pass--5--点-空-点:

审计源码后我们发现,本题只检验了一次,没有进行循环检验,那么我们完全可以将文件后缀名改为.php. .在过滤时,先把最后面的点给删掉,在收尾去空,这样留下了.php.就上传成功了。

ps:不知道为什么,高版本的php已经不可以在这么进行了,好像是不在识别.php.了,推荐使用php5

pass-6-大小写绕过

阅读源码可知相比于其他题,本题没有变小写这个过程

因此,直接改名.PHP ,成功上传

pass-7-空点

审计源码

 最后没有删除空格,所以直接上传文件.pjp .(空格加点),即可绕过

完美

pass-8-点空格

审计源码

 没有去掉末尾的点,因此可以上传文件.php. (点加空格)绕过

 跟上关几乎一模一样

pass-9-::$DATA

审计源码,可是没有过滤::$DATA

直接走起 

成功上传

完美

pass-10

emm,跟第五题一毛一样。。。。可能是重了吧

估计是我安装时bug了

pass-11-双写绕过

 

哦吼,这个我熟,跟sql注入绕过删除过滤一毛一样,嘿嘿

双写绕过

 完美

至此,黑名单绕过已经刷完,下面几道题均为白名单限制,这才是最常见的

pass-12-%00截断

ps%00在oho5.3之后已经不能用了,我的PHP最低版本为5.6,懒得下5.2了,这儿题就跳过吧

大致思路就是再上传时将get参数savepath修改一下,改成 /upload/shell.php %00

ps:经过多次试验,发现使用注释符(";#或者";//)可以绕过检测但不知为何move_uploaded_file($temp_file,$img_path)报错,导致无法正常上传,待解决。

pass-13-%00截断

与12题一样,只是本题采用post方式传参,注意解码,get会自行解码,post不会自行解码233

pass-14-上传图片马

合成图片马将一个正常的jpg/png/gif文件与一个木马php等文件合并形成图片马,如果有文件包含漏洞(类似.htaccess),即可将图片马直接当做php脚本文件执行

另,本题对图片头两个字节进行检查,看是否为图片的,我们是在文件最后面加上木马的完全不需要担心

 完美

pass

pass-15-getimagesize绕过

getimagesize()简介

这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的

因此本题跟上题一样,我们直接过

pass-16-exif_imagetype绕过

exif_imagetype() 读取一个图像的第一个字节并检查其签名。

本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。

但依然难不倒我们,跟14题一个解法233

pass-17-二次渲染

本题详情见(3条消息) upload-labs之pass 16详细分析_q1415500189的博客-CSDN博客

ps:png运行完脚本之后,会插入<?php $_GET[0]($_POST[1])?>

需要传入get的0= 以及post的1= 才能运行。。。

害,还是得用别人的东西,太菜了我

pass-18-条件竞争

第十八关主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下,如图操作(先把变量删了)

然后如图操作修改(让我们访问是不带payload)

然后发包,用另一个浏览器一直访问2.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了233。(卡吧)

 成功卡如,但现在问题是,一旦结束攻击,他依然会被删掉这个文件

pass-19-条件竞争

ps:本题保存路径好像有问题,没有保存到upload,我们把它改一下

 很明显它$dir后面忘加上.'/'了,我已经帮他加上了

本关经过代码审计,感觉像是是18与19关的融合吧,依然是条件竞争,不过这次我们只能上传图片马,用burpsuite爆破,然后用前几关的文件包含漏洞打开。

这关是检查了后缀名,然后上传,然后在进行二次渲染。这时我们只能上传图片马,而且得配合解析漏洞进行通关

操作和18关的一样,就是访问地址是加上包含漏洞的。

没什么问题,这些漏洞其实都是逻辑上的漏洞,二次渲染本身是没什么问题的。如果人家先验证在进行上传那就没有办法了。

pass-20-自定义保存路径

move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.

所以我们把他修改为如图所示

上传

 

 完美

pass-21-数组绕过

审计源码:

$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)) {
            $msg = "禁止上传该后缀文件!";
        }else{
            $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 = "请选择要上传的文件!";
}

很容易发现,它最后在合并文件名称时没有使用end,而是使用了数字下标,要知道,php里数组是既可以由下标索引,也可以有键值索引的,再加上前面第11行,如果上传的是数组,就不拆字符串,这都把答案拍你脸上了,比如如我们上传的数组是这样的

$save_name=array(
    '0':payload_20,
    '2':php,
    '3':jpg
);

显然在检验后缀名时end()函数取出的是jpg,而在合并文件名时取出的php.

综上,我们在burp中将上传的savename改成数组,格式如下

 上传

 完美


总结

至此upload-labs篇完结,撒花,芜湖。。。。

我觉得这uplaod-labs是挺不错的,将大部分文件上传都给你出上了,对我这种小白真的帮助非常大,感谢upload-lab作者。。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值