zoukankan      html  css  js  c++  java
  • 网络安全从入门到精通 (第七章-1) 文件上传漏洞 — 解析、验证、伪造(一)

    本文内容:

    • 客户端检测
    • 服务器端检测
    • 文件上传绕过类型

    1,客户端检测:

      客户端检测:一般是在网页上写一段JS脚本,用JS去检测,校验上传文件的后缀名,有白名单,也有黑名单。

      判断方式:

        在浏览器加载文件,但还未点击上传按钮时要弹出对话框,内容如:

          只允许上传jpg/peg后缀名的文件,此时并没有发送数据包,所以可以通过抓包来判断,如果弹出不准上传,但是没有抓到数据包,那么就是前段验证。

          前端验证非常不可靠,传正常文件改数据包就可以绕过,甚至关闭JS都可以尝试绕过。

      黑白名单机制:

        黑名单:不允许上传什么。

        白名单:允许上传什么。

        白名单比黑名单更安全。

      使用Burpsuite抓包,上传一个非法文件,如果抓到数据包,说明是后端校验,如果没抓到数据包,说明是前端校验。

    2,服务器端检测:

      服务器端检测几个常见的手段:

        检查Content-Type[内容类型]

        检查后缀[检查后缀是主流]

        检查文件头

      如果绕过Content-Type[内容类型]和文件头检测,这个时候我们就需要制作一个图片马了。

      注意:图片越小越好。

      图片马制作:

        在一个txt文件写入一句话木马,然后在找一张喜欢的图片。

        然后打开CMD输入copy1.png/b + 1.txt 123.png 

        解释:将1.png和1.txt合并为123.png   /b的意思就是把它当做二进制去拷贝。

      注意:

        图片马经过二次压缩就失效了

        图片马可以很好的绕过内容类型和文件头。

        一句话木马:<?php @eval($_REQUEST['a']);?>

      解析文件扩展名:

        php:php、phtml、php3、php4等。

        jsp:jap、jspx、jspf等。

        asp:asa、cer、aspx等。

        ext:exee等。

      先判断是否前端检测,然后在检测是不是后缀检测,再看是不是黑名单。

    3,文件上传绕过类型:

      1.前端检测: 

        使用Burp抓包,上传一个非法文件,如果抓到数据,说明是后端校验,如果没抓到数据包,说明是前端校验。

      2.Content-Type方式绕过:

        使用Burp,上传图片马,直接更改类型php。

      3.黑名单绕过:
        使用BURP,上传图片马,直接更改类型php,如上传不成功,可以更改phptml。

      4. .htaccess文件绕过:

        这个文件是中间件看的。

        .thaccess是什么?

          .htaccess文件也称为分布式配置文件,提供了针对目录改变配置的方法,在一个特定的文档目录中放置一个包含一个或多个指令到的文件,以作用于次目录及其所有子目录。

          2.htaccess功能:

            文件夹密码保护、用户自定义冲顶下行、自定义404页面,扩展伪静态话、禁止特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,很可惜,这个功能默认是不开启的。

          例如:AddType application/x-httpd-php .jpg 这个指令代表有.jpg文件会当做php解析

            将这句代码放进txt文件,将文件名修改成功.htaccess,然后上传它就可以了。

          注意:

            win10已支持文件命名为这种类型。

            win7需要使用cmd ren  1.txt .htaccess。

      5.后缀大小写绕过:
        Windows后缀是不区分大小写的。

        解析时一般也不区分大小写。

        Web容器除非非常老,不然都不区分大小写。

      6.文件后缀[空/空格]绕过:

        在文件名后留一个空格,然后上传上去空格会自动省略。

        在系统操作中,php空格=php

        但是在字符串匹配的时候:php空格!=php。

      7.文件后缀[点]绕过:
        Windows有一个特性,会自动去掉后缀名留最后的。

      8.::DATA[Windows文件流绕过]:
        这里利用到了NTFS交换数据流[ADS],ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个每个文件都可以存在多个数据流。通俗的理解,就是其他文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。

       在cmd输入:

        echo abcd>>a.txt:b.txt 将abcd写入a.txt:b.txt,很明显生成一个a.txt,将b.txt寄宿到a.txt文件上。

        使用notepad 1.txt:b.txt,将寄宿文件揪出来 

        然后在试试a.txt::$DATA 

        ::$DATA就是默认不修改文件流的情况,所以生成一个正常的a.txt。

        利用windows特性,可在后缀名中加::$DATA 绕过。

      9.构造文件后缀绕过:
        如:php..

      10双写文件后缀绕过:
        如:pphphp
         

          

  • 相关阅读:
    scala-for高级用法
    scala-for
    numpy每行,没列中的最小值
    NLP
    sql-server笔记-sql
    openlayers加载geoserver的WMS服务出现点标注显示不全
    oracle删除表
    idea-debug
    python-windows安装相关问题
    mybatis-oracle 新增序列
  • 原文地址:https://www.cnblogs.com/xz25/p/12728268.html
Copyright © 2011-2022 走看看