pikachu靶场 :八、文件上传漏洞
概述
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。
当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。
如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。
比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...
客户端检查
审查元素,把限制上传类型的onchange函数去掉,直接上传shell.php拿shell。
访问shell文件,是OK的。
/vul/unsafeupload/uploads/2020/02/01/shell.php
服务端检查
上传shell文件,抓包。
修改Content-Typeontent-Type为image/jpg,欺骗服务端,上传成功。
getimagesize()
准备好木马文件和图片文件,两者进行叠加,生成图片马。
查看一下图片马,一句话是插了进去的。
上传图片马,成功。
可是图片马是png格式,不能以php格式执行。
这就要用到我们之前的文件包含漏洞,那就要让本地文件包含漏洞找到我们的png图片,根据生成的路径访问我们的图片马拿shell。