upload-labs(完结)

Pass-11

$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","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");


        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $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 = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

感觉上源代码和之前少了很多。关键在trim函数身上,它是将指定的字符串移除。这里就可以用双写的方式绕过。

在这里插入图片描述在这里插入图片描述访问上传的文件
在这里插入图片描述接下来就可以蚁剑或者菜刀连接搞事情。

Pass-12

$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);
    if(in_array($file_ext,$ext_arr)){
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

        if(move_uploaded_file($temp_file,$img_path)){
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else{
        $msg = "只允许上传.jpg|.png|.gif类型文件!";
    }
}

还是分析一下源码,发现这里出现白名单过滤。关键在于这条语句

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

对上传的文件名进行重构,可以使用%00截断绕过,但是这个方法对phpstudy有两个要求,一个是版本必须小于5.3.4,另一个是修改php的配置文件php-ini,将magic_quotes_gpc设置为Off。

我的版本是5.4,尝试过修改但是一旦修改靶场就访问不了了。但是在网上找了到一个大佬的文章,是关于这个关卡的。
https://blog.csdn.net/weixin_43571641/article/details/83832578

Pass-13

这道题关键点同样在这里。

$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

和上一关的不同就是变成了POST方式,看了下wp,还是需要版本在5.3.4以下,😒,糟心。记录下思路吧,以后回来弄。

抓包,修改信息。

在这里插入图片描述然后点Hex,找到php+的对应位置,修改为00。

Pass-14

在这里插入图片描述
直接给出了思路,图片马和文件包含都要用到。而且文件包含漏洞是可以点击跳转的。
在这里插入图片描述制作图片马然后上传。

在这里插入图片描述

然后在文件包含漏洞页面访问上传的文件。
在这里插入图片描述蚁剑连接。

在这里插入图片描述

Pass-15

Pass-16

这两关卡原理和14关相同,如果有兴趣可以尝试.png和.gif的方式。

Pass-17

在这里插入图片描述说起来有点汗颜,最开始我以为同样和前三关一样的方法,但是后来看别人的解题记录时候才知道,并不是,看来还是有点毛躁了,学艺不精啊。

关键点在这句语法里面。

rename($upload_file, $img_path);

结合整体源码意思就是先将文件上传到服务器,然后通过rename修改名称,再通过unlink删除文件。

这里通过条件竞争的方式在删除文件之前达到目的。

Burp抓包发送到intruder模块,然后设置payload为Null payloads,然后设置线程,开启爆破,同时访问上传文件,同样抓包发送intruder,操作一样,同时爆破。就可能会成功。

说起来简单,但是对我这种菜鸟,试了好几次也没成功,😒,学艺不精啊 。导致下一关也难受了,和这关一样的方法。

Pass-19

在这里插入图片描述
这一关好像被修改了,别人的十九关是这样子的。

在这里插入图片描述emmmmmmm,菜鸟本菜了,留存,以后再做。

Pass-20

此题采用一个大佬的思路。

分析源码,上传save_name为一个数组,数组第一个元素为*.php,第二个元素为空,第三个元素为jpg。此时利用jpg通过判断,将空拼接到.php后文件仍为.php。

在这里插入图片描述
在这里插入图片描述上传成功。

Pass-21

和上一关有共同之处。

$file_name = reset($file) . '.' . $file[count($file) - 1];

可以发现$ file_name经过reset($ file) . ‘.’ . $ file[count($file) – 1];处理。

在这里插入图片描述至此,二十一关都写完了,但是对于我这种菜鸟来说其中有很多地方还是模棱两可,而这个博客只是我个人总结用,所以出现的方法并不十分保证能成功。

以后的时间,我还会经常练习这个上传关卡,弥补自己的不足之处,尝试不同的解法。

诸君共勉。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值