什么是文件上传漏洞
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
常见类型:
文件包含绕过
前端限制绕过
文件扩展名绕过
ashx上传绕过
特殊文件名绕过
00截断绕过上传
htaccess解析漏洞
突破MIME限制上传
解析漏洞绕过
条件竞争绕过
CONTENT-LENGTH绕过
一、客户端check
先上传个php文件,发现被过滤了,

尝试上传一个jpg文件,上传成功

这里可以利用bp抓包修改头和类型上传php文件,修改如下,然后放行

可以看到上传成功

源码如下:

二、MIME type
上传一个php文件,发现只能上传以下三种图片

上传这三种类型的文件,即可上传成功

有一种方法,上传php文件利用bp抓包,修改文件类型,即:
Content-Type: image/jpeg

上传成功
三、getimagesize()
这个代码可以获取图片宽高等参数,如果不是真实的图片,则没有信息
上传一个图片

实际情况下,我们可以利用windows命令,制作一个图片马,在这个文件夹下打开命令控制面板

输入:copy 1.php+12.jpg 123.jpg
这样就可以把内容输入到一起,成为一个图片马,然后去上传,即可成功