前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >软件安全性测试(连载14)

软件安全性测试(连载14)

作者头像
顾翔
发布2020-01-17 11:27:36
5270
发布2020-01-17 11:27:36
举报

顾翔老师近期推出一对一入职面试辅导。有兴趣者可加微信xianggu19720625与我联系。先要提供简历初选,合适者进一步洽谈。

顾翔老师的《软件测试技术实战设计、工具及管理》网上购买地址:

https://item.jd.com/34295655089.html

《基于Django的电子商务网站》网上购买地址:

https://item.jd.com/12082665.html

店铺二维码:

2.9文件上传漏洞

1.两个著名的文件上传漏洞

1)IIS 6.0文件上传漏洞

l 在建立一个目录名为a.asp,该目录下所有文件均可被解析为asp文本。

l 建立文件a.asp;1.jpg,分号将会被截断,仍旧作为a.jsp被解析。

设想如果恶意用户写了一段具有破坏性质的asp脚本,命名为a.asp;1.jpg,上传到网站服务器上,然后运行这个文件,不就可以达到攻击的目的了。

2)Apache文件上传漏洞

在Apache1.X和2.X中,建立一个文件为1.php.rar,由于rar文件没有在%APACHE_HOME%/conf/mime.types定义,所以会被误认为是1.php文件。和IIS 6.0文件上传漏洞一样,如果恶意用户写了一段具有破坏性质的php脚本,命名为1.php.rar,上传到网站服务器上,然后运行这个文件,也就可以达到攻击的目的。

2.绕过前端检查

有如下HTML代码。

<form action="http://doUpload.jsp"method="post" enctype="multipart/form-data">

请选择要上传的文件<input type="file" name="upfile"size="50">

<input type="button"value="提交" id="submit"onsubmit="checkFileType()">

点击【提交】按键,运行javascript函数checkFileType(),只有后缀为jpg、png、gif、bmp格式的文件才可以上传。黑客写了一段具有破坏性质的jsp代码,命名为1.jpg。1.jpg这个文件可以绕过前端javascript函数checkFileType()检查,这个时候用类似于Burn Suite的截包工具把这个HTTP请求截获,改名为1.jsp,如30所示。

30 上传文件绕过前端检查

发送修改好的请求包,这样一个名为1.jsp带有恶意代码的文件就被上传到服务器上。

3. 文件上传的防护方法

由上面的例子可以看出,仅仅在前端进行防护是远远不够的,重要的是在后端进行防护检验。

1)黑名单法

BlackList=array('asp','asa','aspx');

对于黑名单而言,不允许上传在黑名单里面的文件。用这种方法好像可以解决文件上传问题,但是这种方法是不推荐的,主要因为。

l 容易遗漏:使用黑名单,对有些文件类型是很容易遗漏的。

l Windows大小写不敏感:如果服务器是Windows,这里定义了'asp','asa','aspx',如果用户上传的是1.ASP文件是否可以接受?

2)白名单法

WhiteList=array('jpg','png','bmp','gif');

上面程序是一个典型的白名单,只允许白名单里面的文件被上传。使用这种方法是相对比较安全的。

另外,检查文件类型不要仅仅通过文件后缀去判断,对于后端建议采用基于MIME属性去判断。下面代码是JAVA获得文件属性的一种方法。

importjavax.activation.MimetypesFileTypeMap;

import java.io.File;

class GetMimeType {

public static void main(String args[]) {

File f = newFile("gumby.gif");

System.out.println("Mime Type of" + f.getName() + " is " +

newMimetypesFileTypeMap().getContentType(f));

// expected output :

// "Mime Type of gumby.gif isimage/gif"

}

}

3)其他措施

处理检查文件类型,还可以使用以下三个方面进行加固。

l 确保上传的目录是不可执行的:如果被上传上来的文件是不可以运行的,中途即使被截获修改了名称也是无所谓的。

l 上传后修改文件名:对于上传上来的文件修改文件名,比如可以把类似于mysql.ini文件改名为1.ini,从而使其失去作用。

l 单独设置文件服务器的域名。设置单独的文件服务域名是一种不错的选择,这样类似于XSS注入也受到了一定控制。

顾翔老师与云测学院联合推出:软件测试分析与设计,请点击https://v.youku.com/v_show/id_XNDQ3MzkyNjk3Ng==.html?spm=a2hzp.8244740.0.0,收看。有不同观念欢迎与顾翔老师交流!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档