文件上传文件包含文件下载漏洞总结
Posted EZ4GodJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传文件包含文件下载漏洞总结相关的知识,希望对你有一定的参考价值。
文件上传
原理
上传文件对各大网站基本属于必备功能,如上传头像,上传简历,上传文档,但是一旦未对文件进行校验,或检验、过滤的不严格,恶意用户即可绕过网站的检测上传恶意文件,一旦上传的是木马文件并被服务器解析,恶意用户即可拿到网站的webshell。
分类
根据upload-labs的总结,上传漏洞可分为如下几种:
客户端:
Js检查
使用图片马
修改webshell后缀名并用bp截断修改回后缀名并完成上传
服务器端:
检查后缀
黑名单
上传特殊可解析后缀
上传.htaccess
后缀大小写绕过
后缀名双写绕过
点绕过
::$DATA绕过
空格绕过
双写绕过
配合解析漏洞绕过
Apache换行解析漏洞,Apache陌生后缀名解析漏洞,nginx任意解析漏洞,ISS6.*版本解析漏洞,ISS7.*版本解析漏洞,
Nginx空字节任意代码执行漏洞
Nginx文件名逻辑漏洞
白名单
MIME绕过
%00截断
0x00截断
检查内容
文件头检查
图片马
二次渲染
突破getimagesize()
突破exif_imagetype()
代码逻辑
条件竞争
防护:
1、对上传的文件,返回数据包时隐藏上传文件的路径
2、服务器端的安全过滤,对上传文件的类型、以及后缀名进行严格的把控
3、上传类型进行安全限制,JS前端以及后端一起做双层的安全限制,对文件的扩展名安全检测,MIME文件类型安全检测,上传的文件大小限制
4、对上传的目录进行文件夹安全限制,去掉目录的脚本执行权限,只有普通jpg图片等运行,以及读写权限
文件包含
原理:
服务器执行php文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
<?php
$filename = $_GET['filename'];
include($filename);
?>
分类:
本地包含漏洞(LFI)
无限制本地包含漏洞
Session文件包含漏洞
利用条件:session的存储位置可以获取,可通过phpinfo信息或猜测默认存放位置尝试。
漏洞利用:session中的内容可以被控制,传入恶意代码,通过本地包含漏洞即可解析恶意代码getshell。
有限制本地包含漏洞
%00截断
路径长度截断
点号截断
远程包含漏洞(RFI)
PHP的配置文件allow_url_fopen和allow_url_include设置为ON,include/require等包含函数可以加载远程文件,如果远程文件没经过严格的过滤,导致了执行恶意文件的代码,这就是远程文件包含漏洞。
allow_url_fopen = On(是否允许打开远程文件)
allow_url_include = On(是否允许include/require远程文件)
无限制远程文件包含漏洞
有限制远程文件包含漏洞
问号绕过
#绕过
空格绕过
PHP伪协议
PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。
可以使用 "php://filter"伪协议" 来进行包含。当它与包含函数结合时,php://filter流会被当作php文件执行。若对其进行编码,阻止其不执行。即可导致任意文件读取。
?file=php://filter/read=convert.base64-encode/resource=a.php
防护
1.严格判断包含中的参数是否外部可控。
2.路径限制,限制被包含的文件只能在某一个文件夹内,特别是一定要禁止目录跳转字符,如:“../”。
3.基于白名单的包含文件验证,验证被包含的文件是否在白名单中。
4.尽量不要使用动态包含,可以在需要包含的页面固定写好,如:“include("head.php")”。
5.可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文件包含。
文件下载
原理:
网站对下载的文件没有做限制,直接通过绝对路径对其文件进行下载,那么,恶意用户就可以利用这种方式下载服务器的敏感文件,对服务器进行进一步的威胁和攻击。
危害:
通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等。
防范:
限制../符号的使用,文件下载时判断输入的路径,最好的方法是文件应该在数据库中进行一一对应,避免通过输入绝对路径来获取文件
以上是关于文件上传文件包含文件下载漏洞总结的主要内容,如果未能解决你的问题,请参考以下文章