不安全的文件上传
不安全的文件上传漏洞概述:
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
文件上传漏洞测试流程:
文件上传漏洞之客户端验证(client check)
首先我们先尝试上传一个php文件;
可以看到,上传失败;
查看前端代码,发现使用了一个checkFileExt(),实际上就是判断上传的文件是否是图片的格式,如果不是就会弹出相应的框;
我们将onchange里面的内容删掉,在选择一个一句话木马文件上传,就可以上传成功;
在实际操作中,我们需要上传文件的路径,才可以获取相应的东西;
http://192.168.17.111/pikachu-master/pikachu-master/vul/unsafeupload/uploads/1.php?x=ipconfig
不安全的文件上传漏洞-服务端验证
MIME类:
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,
当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
每个MIME类型由两部分组成,前面是数据的大类别,例如声音audio、图象image等,后面定义具体的种类。
常见的MIME类型,比如:
$_FILES()函数:
上传jpg文件,可以看到上传成功;
上传PHP文件,可以看到上传失败;
查看源码可知,这定义了一个数组,
然后我们对上传文件正确的进行抓包;
上传一句话木马进行抓包;
发送到Repeater 然后将content type 改为image/jpeg
然后点击go,可以看到文件上传成功的路径;
在实际操作中,我们可以访问此路径获取相应信息;
http://192.168.17.111/pikachu-master/pikachu-master/vul/unsafeupload/uploads/1.php?x=ipconfig
Getimagesize类:
Getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。
图片木马制作:
1.直接伪造头部GIF89A
2.我们可以制作图片马;在桌面上建一个1.png和1.php;
打开cmd 输入命令copy /b 1.png + 1.php 2.png
图片马制作好之后就可以成功的上传返回路径;
文件上传漏洞防范措施