Pikachu-Unsafe Fileupload 不安全的文件上传 0x02 服务端check MIME TYPE
0x00 不安全的文件上传漏洞概述不安全的文件上传漏洞概述
文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。
当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。
比如上传头像 jpg png 上传文档 dox
如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。
所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
--验证文件类型、后缀名、大小;
--验证文件的上传方式;
--对文件进行一定复杂的重命名;
--不要暴露文件上传后的路径;
--等等...
0x01 客户端check
选择php文件 上传失败 选择jpg文件上传成功
查看源码, 上传文件时 运用到了function checkFileExt(filename)函数 对上传的文件做了判断
在前端做限制 很容易做绕过 将unchange 删掉 ,再次上传1.php,就可以成功上传
在实际操作中 要知道上传的路径 才能进行操作
http://192.168.50.100/pikachu/vul/unsafeupload/uploads/l.php?x=ipconfig
MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种应用程序来打开的方式类型,
当该扩展名文件被访问的时候,文件名,以及一些媒体文件打开方式。
上传php文件 点提交
查看源码, 定义了一个数组 并且调用了uploadfile函数
函数 作用 获取mime类型 再进行比较
上传1,jpg 抓包 观察 他的type
上传ghz.php 抓包 观察 他的type
修改ghz.php 的type
页面显示 上传成功
0x04 getimagesize()
getimagesize()函数将测定任何图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通HTML文件中<IMG>标记中的 height/width 文本字符串。
如果用这个函数来获取类型 从而判断是否是图片 会存在问题
是否可以绕过? 可以 因为图片头可以伪造
查看图片第一行代码 发现 图片头都一致
使用copy命令~
补充:
文件包含和文件上传 俩个漏洞结合起来的利用
文件上传漏洞使用 将图片头复制过来 伪造图片 然后将恶意代码嵌入 将jpg上传成功后 得到路径
再利用文件包含 漏洞 http://192.168.50.100/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
就可以读取文件
文件上传漏洞防范: