黑帽联盟

 找回密码
 会员注册
查看: 1408|回复: 0
打印 上一主题 下一主题

[系统安全] 任意文件上传漏洞

[复制链接]
yun 黑帽联盟官方人员 

920

主题

37

听众

1364

积分

超级版主

Rank: 8Rank: 8

  • TA的每日心情
    奋斗
    2019-10-18 11:20
  • 签到天数: 678 天

    [LV.9]以坛为家II

    1.1 漏洞描述
        上传漏洞这个顾名思义,就是攻击者通过上传木马文件,直接得到web,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。
        导致该漏洞的原因在于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。

    1.2 漏洞危害
         1)可以得到web
         2)上传木马文件,可以导致系统瘫痪

    1.3 漏洞演示
    11.png

    我们来看看下面这段文件上传代码,使用的是common-fileupload.jar和common-io.jar UploadServlet.Java访问路径/UploadServlet
    1. /**
    2. * 文件上传
    3. */
    4. protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    5.     String root = request.getServletContext().getRealPath("/upload");
    6.     DiskFileItemFactory factory = new DiskFileItemFactory();
    7.     ServletFileUpload upload = new ServletFileUpload(factory);
    8.     try {
    9.         List<FileItem> list = upload.parseRequest(request);
    10.         for(FileItem it:list){
    11.             //如果是file文件类型
    12.             if(!it.isFormField()){
    13.                 it.write(new File(root+"/"+it.getName()));
    14.                 response.getWriter().write("success");
    15.             }
    16.         }
    17.     } catch (Exception e) {
    18.         try {
    19.             response.getWriter().write("exception");
    20.         } catch (IOException e1) {
    21.             e1.printStackTrace();
    22.         }
    23.         e.printStackTrace();
    24.     }
    25. }
    复制代码
    前端index.jsp有一个上传文件的表单
    1. <form  action="/load/UploadServlet" method="post" enctype="multipart/form-data">
    2.     <input type="file" name="file"/>
    3.     <input type="submit" value="submit"/>        
    4. </form>
    复制代码
    我们将项目发布到tomcat并且访问http://localhost:8080/load/
    12.png

    选择要上传的文件提交表单.文件上传也成功,在upload目录下也有我们所上传的文件. (如果是你一个刚毕业刚入行的新人,你可能看不出任何问题),可能很多老鸟大神都知道这个上传功能存在什么问题,要骂我sb! 对没错,这个功能还有一个最大的问题就是没有对上传的文件格式做限制,如果我这里实现写好了一个脚本a.jsp代码如下
    1. <%@page import="java.io.File"%>
    2. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    3. <%
    4.     String root = request.getServletContext().getRealPath("");
    5.     out.write("系统部署绝对路径:"+root);
    6.     File file = new File(root+"/index.jsp");
    7.     file.delete();
    8. %>
    复制代码
    上传完毕,我们在访问localhost:8080/load/upload/a.jsp,然后你在返回你就会发现一件恐怖的事情,这里不限于做删除操作,还可以自定义主页,看你自己怎么写了! 所以说我们在做上传的时候必须要对上传的文件格式做处理,在上传的时候加入一句判断语句(当然只判断后缀,还可能存在一些问题,最好在加上判断文件前4个字节一起判断(不同文件类型前4字节不同),这样就能很好的避免上述问题!

    1.4 修复方案
        1)对文件格式限制,只允许某些格式上传
        2)对文件格式进行校验,前端跟服务器都要进行校验(前端校验扩展名,服务器校验扩展名、Content_Type等)
        3)将上传目录防止到项目工程目录之外,当做静态资源文件路径,并且对文件的权限进行设定,禁止文件下的执行权限。

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部