文件上传深度剖析

概述

上传流程

前端绕过

前端的js做了限制

我们找到上传点不急着上传文件,先看看控制台是不是前台用js做了限制只能上传jpg,png等

看到有个onchange参数  我们看看页面源码

果然只是通过前端的js验证

这个时候我们在控制台里面把onchange参数设置为空  上传个php文件试试

上传php文件

上传成功

后台绕过

content-type做了限制

绕过MIME验证

我们找到上传点,上传一个jpg的文件抓包  看content-type是什么

此时我们看到content-type是image/png

这个时候回显是文件上传成功

但是我们如果上传一个php文件呢

回显是text/php 此时回显的上传文件不符合要求

这个时候我们上传php文件,把content-type修改为 image/png

此时回显上传成功

绕过getimagesize验证

这个验证是16进制验证了上传文件的头信息和文件的大小

我们使用xxd来看一下正常图片的头部信息

这个时候上传图片格式回显上传成功,但是上传php文件就会回显上传不符合要求

次数我们就要使用图片木马了

这个就不用说了  图片木马肯定可以上传成功了

此时虽然上传成功了,但是这个图片木马却不能执行,这个时候就显得这个漏洞很鸡肋

但是我们找到了这个站还存在文件包含的漏洞,来一波漏洞组合拳吧

文件上传(图片马)+文件包含(本地包含)

上面提到了图片马已经上传成功,路径也回显出来了

但是这个路径是不全的我们要加上上传目录的路径,构造一个新的路径

此时我们找到存在文件包含的位置

然后把这个路径修改为图片马的路径,同时我们不确定是不是图片马的路径是不是文件包含的子目录,所以我们要使用../来跳出这个目录直到跳到图片马在服务器的绝对路径

../这个可以试着去跳,一个不行就用两个

此时我们可以看到加了两个../之后就找到了图片马的绝对路径,因为我们图片马里面加是代码<php phpinfo();?>而不是shell所以就直接执行了这段代码

防御

猜你喜欢

转载自blog.csdn.net/Bul1et/article/details/84970137