不安全的文件下载漏洞
原理
很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。
但是,如果文件下载功能设计不当,则可能导致攻击着可以通过构造文件路径,从而获取到后台服务器上的其他的敏感文件。(又称:任意文件下载)
filename=../../../../../../../etc/passwd
后台代码
防范措施
1.对传入的文件名进行严格的过滤和限定
2对文件下载的目录进行严格的限定;
不安全的文件上传漏洞
文件上传漏洞概述
因为业务功能需要,很多web站点都有文件上传的接口,比如
1注册时上传头像图片(比如 jpg, png, gif等)
2上传文件附件(doc,xls等)
而在后台开发时并没有对上传的文件功能进行安全考虑或者采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意文件(如:一句话木马),从而通过对该恶意文件的访问来控制整个web后台。
文件上传漏洞测试步骤
1,对文件上传的地方按照要求上传文件,查看返回结果(路径,提示等)
2,尝试上传不同类型的“恶意”文件,比如xx.php文件分析结果
3,查看html源码,看是否通过js在前端做了上传限制,可以绕过
4,尝试使用不同方式进行绕过:黑白名单绕过/MIME类型绕过/目录0x00截断绕过等;
5,猜测或者结合其他漏洞(比如敏感信息泄露等)得到木马路径,连接测试
文件上传漏洞之客户端验证绕过
前端限制措施一般用js来实现,可以将页面代码修改实现绕过
或者使用burpsuite实现
文件上传漏洞之服务端验证绕过
文件上传漏洞之服务端验证绕过(MIME)
什么是MIME
MEME( Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
每个MME类型由两部分组成,前面是数据的大类别,例如声音audio、图像image等,后面定义具体的种类。
常见的MME类型,比如
超文本标记语言文本.htm, .html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GF图形 .gif image/gif
JPEG图形.ipeg, jpg image/jpeg
MIME类型通常会放在HTTP的头部字段Content-Type中
通过使用 PHP 的全局数组 $_FILES, 你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:
$_FILES["file"]["name"] - 被上传文件的名称
$_FILES["file"]["type"] - 被上传文件的类型 来自HTTP头字段Content-Type
$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"] - 由文件上传导致的错误代码
可参考 PHP 文件上传
一般后台会通过$_FILES["file"]["type"] 来判断上传的文件类型,如果使用burpsuite修改HTTP请求中的Content-Type字段的话,就可以实现 。
比如将Content-Type修改为image/png,就可以上传php文件了
文件上传漏洞之服务端验证绕过( getimagesize)
Getimagesize()返回结果中有文件大小和文件类型,它是根据文件头来识别图片的类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。
是否可以绕过呢?可以,因为图片头可以被伪造
图片木马的制作:
方法1:直接伪造头部GIF89A
方法2 windows CMD:copy /b test. png + muma. php cccc. png
方法3 使用GIMP(开源的图片修改软件),通过增加备注,写入执行命令
上传到成功后,再结合文件包含漏洞就可以连接小马了
文件上传漏洞常见防范措施
- 不要在前端使用丿S实施上传限制策略
- 通过服务端对上传文件进行限制
1.进行多条件组合检查:比如文件的大小,路径,扩展名,文件类型,文件完整性
2.对上传的文件在服务器上存储时进行重命名(制定合理的命名规则)
3对服务器端上传文件的目录进行权限控制(比如只读),限制执行权限带来的危害
网友评论