本篇文章主要是对前面关于文件上传漏洞的补充,也欢迎大家参考我之前的博客:
(链接可能会过期,大家可以搜名字找到)
?Web-文件上传漏洞总结
1、常规前端绕过
2、修改文件类型
3、使用 .user.ini 或 .htaccess(可能还存在大小写绕过)
4、使用字典爆破可行后缀
5、结合文件包含漏洞使用图片马
6、条件竞争
?wzsc_文件上传(条件竞争)
本篇文章将做出以下补充:
目录
为了大家直接看出效果,这里上传都使用一个简单的phpinfo文件,内容如下图:
来到upload-labs第六关
查看提示,这里过滤掉了很多后缀
直接传php后缀文件肯定是不行的
注意:我再强调一遍,关于文件上传漏洞的题,绝大多数情况下我们是无法知道后端源码的,只有每个方向慢慢尝试,并不是说看到就知道要用什么方法,都是不断换方向试出来的。
这里要使用的是空格绕过,那么它基于的原理就是:
Windows系统对于文件的重命名会自动把空格给去掉
(这里如果直接在上传时添加空格是不行的)
所以我们需要进行抓包,然后在抓到的数据包中将文件名后缀加上空格,即可实现绕过。
关于burpsuite的基本用法也可以参考我之前的博客
抓到包之后发到重发器进行测试
在文件名后缀结尾添加空格
发送之后查看回显,上传成功
并且我们可以看到它的路径
尝试访问该路径的文件,没有找到
但是通过服务器查看,文件实际上是已经被上传成功了的
仔细看上面的文件名,结尾后缀是包含了空格的,由于我的靶场是使用centos搭建的,但是在Windows访问时空格会被自动去除,因此并没有找到文件,换句话说,这种绕过方法仅适用于Windows系统搭建的靶场。
来到第七关
这个的原理和空格绕过一样,也是因为Windows系统对于文件的重命名会自动把点给去掉
这关的源码没有对文件名进行去点处理,因此我们可以使用点来进行绕过后缀的限制。
直接传.php肯定不行
我们对文件后缀添加点,即可上传成功
访问文件还是有一个问题,文件虽然上传成功但是没有执行里面的代码。
(同样原因,我的靶场并不是使用Windows系统搭建的)
来到第八关,源码中未对?::$DATA
?过滤,因此利用Windows流特性进行绕过。
Window系统对于文件名+"::$DATA",会把::$DATA之后的数据当成文件流处理,自动去掉文件名后的::$DATA,并且不会检测后缀名,保持::$DATA之前的文件名。
同样使用bp抓包,添加后缀 ::$DATA?
上传成功
在访问的时候同样会有一个问题
因为我们传上去的文件名还是我们修改后的文件名
而对于Windows系统搭建的靶场,它会将这些多余的后缀,比如空格、点、::$DATA 都自动去掉
因此,上述三种绕过方法仅对Windows系统适用。