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

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

2.9文件上传漏洞


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

1IIS 6.0文件上传漏洞

  •  在建立一个目录名为a.asp,该目录下所有文件均可被解析为asp文本。
  •  建立文件a.asp;1.jpg,分号将会被截断,仍旧作为a.jsp被解析。


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


2Apache文件上传漏洞

      Apache1.X2.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(),只有后缀为jpgpnggifbmp格式的文件才可以上传。黑客写了一段具有破坏性质的jsp代码,命名为1.jpg1.jpg这个文件可以绕过前端javascript函数checkFileType()检查,这个时候用类似于Burn Suite的截包工具把这个HTTP请求截获,改名为1.jsp,如30所示。


image.png

30 上传文件绕过前端检查


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


3. 文件上传的防护方法

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


1)黑名单法

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


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

  • 容易遗漏:使用黑名单,对有些文件类型是很容易遗漏的。
  • 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)其他措施

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

  •  确保上传的目录是不可执行的:如果被上传上来的文件是不可以运行的,中途即使被截获修改了名称也是无所谓的。
  •  上传后修改文件名:对于上传上来的文件修改文件名,比如可以把类似于mysql.ini文件改名为1.ini,从而使其失去作用。
  •  单独设置文件服务器的域名。设置单独的文件服务域名是一种不错的选择,这样类似于XSS注入也受到了一定控制。



目录
相关文章
|
存储 JavaScript 前端开发
软件安全性测试(连载3)
软件安全性测试(连载3)
110 0
软件安全性测试(连载3)
|
SQL 存储 Oracle
软件安全性测试(连载11)
软件安全性测试(连载11)
118 0
软件安全性测试(连载11)
|
存储 Web App开发 移动开发
软件安全性测试(连载8)
软件安全性测试(连载8)
91 0
软件安全性测试(连载8)
|
安全 Java PHP
软件安全性测试(连载15)
软件安全性测试(连载15)
128 0
软件安全性测试(连载15)
|
存储 前端开发 JavaScript
软件安全性测试(连载5)
软件安全性测试(连载5)
143 0
软件安全性测试(连载5)
|
存储 安全 Java
软件安全性测试(连载24)
软件安全性测试(连载24)
125 0
软件安全性测试(连载24)
|
前端开发 JavaScript
软件安全性测试(连载4)
软件安全性测试(连载4)
60 0
|
安全 程序员 网络安全
软件安全性测试(连载18)
软件安全性测试(连载18)
98 0
软件安全性测试(连载18)
|
JSON 监控 安全
软件安全性测试(连载2)
软件安全性测试(连载2)
127 0
软件安全性测试(连载2)
|
安全 前端开发
软件安全性测试(连载7)
软件安全性测试(连载7)
119 0
软件安全性测试(连载7)
下一篇
无影云桌面