前端判断上传的文件是否为同一个文件_文件上传漏洞uploadlabs靶场16关

文件上传漏洞upload-labs靶场

文件上传靶场环境:https://github.com/c0ny1/upload-labs

893f7abaa33f297c9b5be30c9120432d.png

Less1 前端JS绕过

0x01 Less1说明

查看源代码

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;    }}

          通过查看源代码发现使用了白名单,只能上传.jpg、.png、.gif三种类型的文件,但是代码是在前端实现的,也就是说服务器端没有进行校验,因此可以通过抓包来修改后缀名进行绕过。

98e4978e7c27a7bf541ccce96c9f4b8b.png

         第一关主要是在前端对上传文件的类型进行判断,在前端禁止上传非图片类型的文件。突破这种限制的方法是在本地上传jpg类型的文件,然后使用burp进行抓包,修改后缀名为php类型,即可绕过。

0x02文件上传
方法一:使用Burp进行抓包

①:本地不允许上传php类型文件

6689ad30c8022acf346aa6e8be3ffafa.png

②:不允许上传php类型的文件,首先上传jpg类型的文件,使用burp进行抓包,然后再修改后缀名为php

6d6630390bbff07c0f36d32e8bd0c26f.png

③:修改文件后缀为php类型

02b587bf9f075cd62ff5734f403c08af.png

④:访问该文件,并使用菜刀成功连接

d182fd042346ffe05cf834f4717a2034.png

9321ff0ed59a5c69400544d9d79026a8.png

方法二:删掉加检查文件类型的函数

①:打开F12,将前端检查文件类型的函数删掉,这样上传文件时就不会触发这个函数,因此就可以上传任意文件

f9989a971dd019a59a00013c66df3ec2.png

②:可以上传php类型文件

e0b7505fc9d204a0b571fe4b74dd101e.png

③:上传成功,进行访问

c635217941c7a48337ce83f5e7540b97.png

方法三:禁用JS

①:在地址栏输入about:config,查找javascript,将javascript.enabled的类型改为false,默认值为true

baf1f62e43ac48844670818bdc141460.png

e9f49e7e99ddc630cb1f88f2f20571d0.png

②:上传任意后缀文件

73cbae04e28bc48d1c350a8d25f0bb66.png

③:访问该文件

8614727166b5293b08476d8eafb2f5c3.png

0x03方法总结

这种方式是在前端使用JavaScript来限制在本地可以上传的文件类型,上传的文件类型并没有在服务器端进行校验,这样就可以抓包来修改上传的文件后缀,还可以修改前端代码,在允许上传的文件后缀名后添加上自己想要上传的文件后缀名,其实,最直接的方式是直接禁掉相关的JS代码,这样就可以上传任意类型的文件了。

Less2 MIME类型绕过

0x01 Less2说明

查看源代码

$is_upload = false;$msg = null;if (isset($_POST['submit'])) {
        if (file_exists(UPLOAD_PATH)) {
            if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif')) {
                if (move_uploaded_file($_FILES['upload_file']['tmp_name'], UPLOAD_PATH . '/' . $_FILES['upload_file']['name'])) {
                    $img
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值