Unsafe Fileupload
0x00 不安全的文件上传漏洞
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
0x01 客户端check
1、准备木马文件
pk01.php
,内容<?php eval($_POST['code']); ?>
2、上传
pk01.php
,提示上传的文件不符合要求,请重新选择!
3、说明前端对文件后缀进行了过滤
4、接下来制作一张图片马
pk01.jpg
,隐写内容:<?php eval($_POST['code']); ?>
。尝试上传后成功,还暴露了路径5、根据暴露的路径进行访问,可以访问,但是无法传值
6、再次上传,并使用burpsuite进行改包,将
pk01.jpg
改为pk01.php
7、可以发现文件上传成功,尝试访问并传值,通关
0x02 服务端check
1、准备木马文件
pk02.php
,内容<?php eval($_POST['code']); ?>
2、上传
pk02.php
,提示上传的图片只能是jpg,jpeg,png格式的!
3、说明前端对文件后缀进行了过滤
4、再次上传,改包,将
pk02.php
改为pa02.jpg
,结果依然失败——其实题目已经给过提示了,这里需要修改Content-Type
的值5、也可以直接制作一张图片马
pk02.jpg
,隐写内容:<?php eval($_POST['code']); ?>
。6、上传,并使用burpsuite进行改包,将
pk02.jpg
改为pk02.php
7、可以发现文件上传成功,尝试访问并传值,通关
0x03 getimagesize()
getimagesize()
getimagesize()
:将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。
GIF89a
图形交换格式编号89A,一个GIF89a图形文件就是一个根据图形交换格式(GIF)89a版(1989年7 月发行)进行格式化之后的图形。
步骤
方法一:
1、使用上几关的方式已经不能成功了,因为此关后端也使用
getimagesize()
进行了验证,并且还进行了重新命名2、重新上传
pk03.php
,内容<?php eval($_POST['code']); ?>
,并改包3、还是不行,放弃了,可能是姿势不够多
方法二:
1、上传图片马,获取图片马路径
2、配合文件包含漏洞