热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Web攻防系列教程之文件上传攻防解析(转载)

Web攻防系列教程之文件上传攻防解析:文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题。但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题。

Web攻防系列教程之文件上传攻防解析:

  文件上传是WEB应用很常见的一种功能,本身是一项正常的业务需求,不存在什么问题。但如果在上传时没有对文件进行正确处理,则很可能会发生安全问题。本文将对文件上传的检测方式以及如何绕过相应检测方式进行详细的分析,并提供针了对文件上传攻击的安全防护方法。

文件上传攻击是指攻击者利用WEB应用对上传文件过滤不严,导致可以上传应用程序定义类型范围之外的文件到Web服务器。比如可以上传一个网页木马,如果存放上传文件的目录刚好有执行脚本的权限,那么攻击者就可以直接得到一个WebShell。

文件上传攻击的原理

由于服务器端没有对用户上传的文件进行正确的处理,导致攻击者可以向某个可通过 Web 访问的目录上传恶意文件,并且该文件可以被Web服务器解析执行。

攻击者要想成功实施文件上传攻击,必须要满足以下三个条件:

1.可以上传任意脚本文件,且上传的文件能够被Web服务器解析执行,具体来说就是存放上传文件的目录要有执行脚本的权限。

2.用户能够通过Web访问这个文件。如果文件上传后,不能通过Web访问,那么也不能成功实施攻击。

3.要知道文件上传到服务器后的存放路径和文件名称,因为许多Web应用都会修改上传文件的文件名称,那么这时就需要结合其他漏洞去获取到这些信息。如果不知道上传文件的存放路径和文件名称,即使你上传了也无法访问。

主流文件上传检测方式概述

主流的文件上传检测方式有以下五种:

1.客户端Javascript检测

客户端检测通常在上传页面里含有专门检测文件上传的Javascript代码,在文件被上传之前进行检测,最常见的就是检测上传文件的文件类型和大小是否合法。

2.服务端MIME类型检测

这类检测方法通过检查http包的Content-Type字段中的值来判断上传文件是否合法。

3.服务端文件扩展名检测

这类检测方法通过在服务端检测上传文件的扩展名来判断文件是否合法。

4.服务端目录路径检测

这类检测一般通过检测路径是否合法来判断。

5.服务端文件内容检测

这类检测方法相当对上面四种检测方法来说是最为严格的一种。它通过检测文件内容来判断上传文件是否合法。这里,对文件内容的检测主要有两种方法。A.通过检测上传文件的文件头来判断。通常情况下,通过判断前10个字节,基本就能判断出一个文件的真实类型。B.文件加载检测,一般是调用API或函数对文件进行加载测试。常见的是图像渲染测试,再严格点的甚至是进行二次渲染。

如何绕过文件上传检测

上面我们分析了主流的文件上传检测方式,下面我们就来看下如何绕过上面提到的文件上传检测方式,本文只讨论如何绕过前三种检测方式。

1.绕过客户端Javascript检测

这种检测方法是最不安全的,也是最容易被攻击者绕过的。Web应用不应只采用这一种手段检测上传文件,但可以作为一种辅助手段。因为采用客户端Javascript检测可以增强应用对用户的友好度。由于Javascript检测是在客户端实现的,所以我们完全能够控制它。可以在浏览器端禁用js脚本,比如在FireFox上安装FireBug这一插件就可以实现这一功能。另外一种是通过代理工具来实现,下面介绍利用Burp Suite来绕过客户端Javascript检测。Burp Suite不仅仅只是一个代理工具,更是一款强大的网络渗透利器。关于Burp Suite的详细资料请自行百度。

这个站点http://www.2cto.com(注:由于该网站为真实站点,为了目标网站的安全,所以用target来代替真实域名)的文件上传功能只采用了客户端Javascript检测,所以很容易被绕过。下面我们来具体看下操作方法。

首先,我们看一下正常情况下上传一个.asp文件,应用会有什么反应。

a. 我们访问这个URL(http://www.target.com/AdvHTML_Popups/upload.asp),会出现一个上传文件的页面

b. 我们先选择一个.asp文件,这时会提示不允许上传这种类型的文件。注意,这时我们还没有点击“件,这时会提示按钮,就出现提示信息。我们可以判断出这个网站是在客户端判断上传文件类型的合法性的。如图1:

var cpro_id = "u6885494";

推荐阅读
author-avatar
过去无法回去
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有