不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过

不安全的文件下载原理和案例演示

一、文件下载漏洞概述(摘录)
很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。
但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。(又称:任意文件下载)
二、案例演示
在pikachu平台 Unsafe Filedownload模块进行实验操作:1.点击图片名进行下载,查看点击图片进行下载时的请求为:127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=ai.png可见其将ai.png这样一个filename传至后台,后台将文件读取反馈到前端使其可以下载。
2.通过…/…/的形式对此处的文件下载漏洞进行测试
将ai.png改为…/…/…/…/…/…/…/etc/passwd提交即可下载目标文件
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
后台读取不够严格导致了不安全的文件下载漏洞的产生,查看后台代码
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
点击图片时,实际上就是传了一个 a 标签,通过 a 标签传了一个参数,参数的名称是 filename,对应的值就是 filename图片的名字传给了后台,然后传给execdownload。
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
可见后台通过get请求获取到文件名称后直接将获取到的名称拼接到了download目录下,没有进行任何其他处理操作。漏洞产生最根本的原因没有对前端传进来的文件进行校验。
三、防范措施
1对传入的文件名进行严格的过滤和限定
2对文件下载的目录进行严格的限定。

不安全的文件上传原理及客户端绕过案例

一、不安全的文件上传漏洞解析-概述(摘录)
因为业务功能需要,很多web站点都有文件上传的接口,比如:
1.注册时上传头像照片(比如jpg,png,gif等);
2.上传文件附件(doc,xls等);
而在后台开发时并没有对上传的文件功能进行安全考虑或者采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件(比如:一句话木马)
从而通过对该恶意文件的访问来控制整个web后台。
二、文件上传漏洞测试流程
1对文件上传的地方按照要求上传文件,查看返回结果(路径、提示等);
2.尝试上传不同类型的“恶意”文件,比如xx.php文件,分析结果
3.查看html源码,看是否通过js在前端做了上传限制,可以绕过;
4.尝试使用不同方式进行绕过;黑白名单绕过/MIME类型绕过/目录0x00截断绕过等;
5.猜想或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试;
三、文件上传漏洞之客户端验证
在pikachu平台client check模块进行实际的验证测试:
1.尝试上传了php文件,反馈结果为上传文件不符合要求,请重新选择。打开控制台查看页面源码。
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
可见当状态发生改变时会去调用checkFileExt
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
这种在前端做的防护操作时是很容易绕过的,我们可以使用控制台直接更改他的代码将onchange调用函数直接删除后再次进行php文件上传尝试,结果成功。
指导上传文件所在的路径即可对相关文件进行调取访问。

上传漏洞之MIME type验证原理和绕过

一、文件上传漏洞-MIME介绍
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
二、文件上传漏洞-$_FILES()函数
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
三、文件上传漏洞之MIME类型验证
在pikachu平台MIME type模块进行实验演示操作。
1.上传符合要求的图片格式文件显示上传成功。
2.上传php文件显示上传失败只能上传图片格式文件。查看源码分析漏洞。
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
分析代码逻辑:首先会获取到前端的提交请求,然后定义了一个数组(定义图片上传指定类型),然后通过upload_sick函数对上传的文件进行一定的检查。
分析upload_sick函数存在漏洞的的原因是因为 $ _FILES() 这个全局的方法是通过浏览器http头去获取的content-type,content-type是前端用户可以控制的。容易被绕过。
3.上传一张正常的符合标准的图片,对其content-type进行抓包操作。可见正常上传符合要求的图片中数据包中content-type为image/png对比符合条件
而php文件则不符合条件返回文件类型错误。
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
将上传php的数据包发送至repeater中,将content-type修改得跟上传正常图片时的一样。点击提交
不安全的文件下载原理和案例演示;不安全的文件上传原理及客户端绕过案例;上传漏洞之MIME type验证原理和绕过
可见文件上传成功了,且显示了保存路径。表明绕过成功。