upload -labs(持续更新)


记得在你的靶场下面新建一个upload文件夹用来存放你上传的文件,否则会报错。

1.pass01

直接查看页面的源代码,发现这一关只是在前端进行了限制,可以说毫无用处。

<script type="text/javascript">
    function checkFile() {
        var file = document.getElementsByName('upload_file')[0].value;
        if (file == null || file == "") {
            alert("请选择要上传的文件!");
            return false;
        }
        //定义允许上传的文件类型
        var allow_ext = ".jpg|.png|.gif";
        //提取上传文件的类型
        var ext_name = file.substring(file.lastIndexOf("."));
        //判断上传文件类型是否允许上传
        if (allow_ext.indexOf(ext_name) == -1) {
            var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
            alert(errMsg);
            return false;
        }
    }
</script>

这里的绕过方式有三种:
(1)直接将页面的js代码禁用掉(之前见某位大佬带复制百度文本跳出了付费页面时用了这招,惊呆我了)
右键—检查—调试器—设置—禁用JavaScript,就可以了。
这种方式有个缺陷就是,禁用了网页的js代码导致一些网页的正常功能无法显示,当然这里用来打靶场还是很便捷的。
上传了webshell之后将返回的东西拖出来查看上传的路径,然后就可以用菜刀连接了。
(2)利用burp进行绕过
先利用burp进行代理浏览器(记得打开发送数据包的拦截,一会儿便于寻找),将我们的wenshell的后缀改为页面允许提交的形式,点击提交,发现burp拦截到了我们提交的请求数据包,找到我们提交的文件名,然后修改后缀为原来的,接下来找到上传地址,连接菜刀。。。
(3)直接删除js代码
将页面的源码直接复制到本地(记事本就可),然后删除掉前端限制我们上传的js语句。由于我们复制出来的这些代码是不知道要上传给谁的,所以我们要找到关于上传的代码块,然后添加action属性,告诉代码这个上传的文件要提交给谁。那怎么才能知道文件上传给谁呢,可以通过网络监控得到上传地址(右键—检查—网络—然后上传一个正常的图片。这样我们就可以看到这个文件传给谁了)

 <h3>上传区</h3>
            <form action="http://127.0.0.1/upload-labs/Pass-01/index.php" enctype="multipart/form-data" method="post" onsubmit="return checkFile()">
                <p>请选择要上传的图片:<p>
                <input class="input_file" type="file" name="upload_file"/>
                <input class="button" type="submit" name="submit" value="上传"/>
            </form>

像这样就可以了,然后就是打开我们修改好的HTML文档,上传webshell,接下去就和上面的一样了。建议好好理解这种方法,在实际的上传中会有很多限制,这种方法是相对完美的。

2.pass02

根据源代码我们可以发现,这一关是常见验证中的文件类型验证(在后端进行验证),也就是验证MIME信息。
这里我们利用burp进行抓包,将抓到包的Content-Type修改为允许上传的类型(image/jpeg、image/png、image/gif)三选一。然后发送
在这里插入图片描述
查看返回的数据包,发现已经上传成功。然后访问该文件成功!!!

3.pass03

直接查看后端源码,发现这是一个黑名单验证(就是不能够上传的文件),但是如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过。
php语言除了可以解析以php为后缀的文件,还可以解析php2,php3、php4、php5这些后缀的文件。
在这里我们可以上传一个后缀为.php5的文件,burp查看发现上传成功。
在这里插入图片描述
我们还可以试着去访问该文件,成功(这里必须)

4.pass04

这一关我们可以看到,禁止的文件后缀名可太多了。
这种情况,我们可以尝试上传一个.htaccess配置文件,将4.png图片当作php代码进行解析,首先创建一个.htaccess文件(这个文件如果上传到网站的目录里,Apache会读取这个文件,加载到配置文件里),里面写上代码。

<FilesMatch "4.png">
SetHandler application/x-httpd-php

这串代码的意思是如果文件中有一个4.png的文件,他就会被解析为.php,把这个文件上传上去。
接下来我们就可以上传一句话或者图片马来达到目的。

5.pass05

还是先查看源码,发现后台将.hatccess给过滤了,然后试一下.Php后缀(在这里说一下,windows对这个后缀的大小写是不敏感的,而Linux是敏感的),结果成功上传。看来这一关是考虑对大小写的绕过。
然后用菜刀连接。

6.pass06

还是查看后端源码,发现和前面几关一样,但是没有对后缀名末尾进行除空格处理。
利用burp进行抓包,然后找到我们上传的文件,在文件末尾加一个空格,然后提交,发现成功。

7.pass07

这一题比前面三题来说,将所有改过滤的都过滤了,这下要想想其他的绕过方法了

没有对后缀名末尾的点进行处理,利用windows特性,会自动去掉后缀名中最后的”.”,可在后缀名中加”.”绕过,这题的考点是.绕过

8.pass08

windows的特性:
在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名
例如:"phpinfo.php::$DATA"Windows会自动去掉末尾的::$DATA变成"phpinfo.php"

查看本关的后台源码,发现并没有删除::$DATA,直接在文件名后面加上就可以绕过了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值