zoukankan      html  css  js  c++  java
  • WEB安全第二篇--用文件搞定服务器:任意文件上传、文件包含与任意目录文件遍历

    最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件、底层安全、漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的payload技巧以便于备忘。不是大神、博客内容非常基础,如果真的有人看而且是大牛们,请不要喷我,欢迎指正我的错误(水平有限)。

    一、文件上传:

    1、这本身是一个功能,但是如果没做好,就成为一个大漏洞。本质:

      对上传文件没有进行类型检查,没有做进一步处理,上传文件保存路径泄露,且可访问可执行。

    2、文件payload部分:

      文件:

      (1)一句话小马

      (2)大马

      (3)其他配置文件.htaccess   /   crossdomain.xml等

    3、上传文件的方式:

      (1)直接上传

      (2)绕过前端扩展名限制上传(firebug)

      (3)绕过后端扩展名限制上传:

        #Apache的:1.php.rax.rax.rax。

        #lighttpd的:xx.jpg/xx.php。

        #IIS的:1.asp;abc.jpg,1.jpg%00.asp。

        #Nginx:1.jpg  访问的时候http://localhost/1.jpg/x.php 当版本低时,存在xx.jpg%00.php解析漏洞。

        #低版本IIS 会将/asp/目录下的所有文件都按照asp解析,或者webdav目录下上传.txt move 成.asp#

        其他手段:

           #截断 1.php%00.jpg。

           #转换大小写:1.PHP。

             #修改文件类型对抗检查content-type。

             #终极大招:使用copy a.gif /b + b.php /a c.php 构造包含恶意代码的正常类型文件。

    4、防御:

      (1)接受文件使用临时路径,然后转存、文件名更换为随机字符串。

      (2)不泄露文件最终保存目录。

      (3)使用没有解析漏洞的高版本服务器。

      (4)严格限制上传扩展名--白名单机制。

      (5)做文件类型mime-type检查,对图像文件做二次渲染。

    二、文件包含:

    1、本质:

      当上传的文件不能直接被执行时,可以借助文件包含来搞定。什么是文件包含,其实就是编程中的文件或者包引入

    2、分类:

      (1)本地文件包含

      (2)远程文件包含

    3、PHP文件包含:

    复制代码
     1 //All of these function:
     2 /*
     3     include()
     4     include_once()
     5     require()
     6     require_once()
     7 */
     8 <?php
     9     include($_GET["file"]);
    10 ?>
    11 //http://localhost/include.php?file=phpinfo.php
    12 /*
    13 Remote -> allow_url_include = 1 & allow_url_fopen = 1
    14 //http://localhost/include.php?file=//http://localhost/phpphpinfo.php
    15 */
    16 //pgpinfo.txt:
    17 <?php
    18  phpinfo(); 
    19 ?>
    复制代码

    4、JSP文件包含

    复制代码
    1 //分为静态和动态:
    2 //静态
    3 <%@include file="page.txt"%>
    4 //动态:
    5 <%String pages = request.getParameter("file") %>
    6 <jsp:include page="<%=pages>"></jsp:include>
    7 //http://localhost/include.jsp?file=xxx.jsp
    复制代码

    5、文件包含的利用:

      (1)读取敏感信息:

        #/etc/passwd

        #/etc/shadow

        #my.cnfphp.inihttpd.confaccess_log等等

      (2)远程包含shell小马(一句话)。

      (3)配合访问上传的文件。

      (4)使用封装协议,也就是说file参数后面可以是各种协议伪协议表示的文件。

      (5)绕过waf和防火墙。

    6、防御:

      (1)包含文件白名单。

      (2)用户输入过滤掉. / 和伪协议关键词。

      (3)包含的文件不允许外部可控。

    三、任意目录文件遍历:

    1、原因:

      web服务器配置不当,导致可以访问到web根目录(www目录)以外的文件,应该是绝对禁止的。且web程序设计没有对访问的目录做检查和限制。

    2、比较容易发生的位置:

      (1)下载类

      (2)图片等文件显示类

    3、检测:

      (1)file = /etc/passwd 或者 C:/Users/

      (2)file = ../../../../../../../../../../../../etc/passwd

      (3)http://www.test.com/index/index.php/../../../../../../../../../etc/passwd

    4、防御:

      1、配置不能访问WEB根目录之外的项目。

      2、对可以访问的文件放在一个资源文件夹下。

      3、对用户输入的特殊字符例如.和/以及进行过滤

    博主简介:博主国内安全行业目前最强大的网络安全公司做技术研究员,常年做技术工作。 获得过以下全国竞赛大奖: 《中国电子作品大赛一等奖》 《云计算技术大赛一等奖》 《AIIA人工智能大赛优胜奖》《网络安全知识竞赛一等奖》 《高新技术个人突出贡献奖》,并参与《虚拟化技术-**保密**》一书编写,现已出版。还拥有多项专利,多项软件著作权! 且学习状态上进,立志做技术牛逼的人。座右铭:在路上,永远年轻,永远热泪盈眶。可邮件联系博主共同进步,个人邮箱:pigeon_code@163.com
  • 相关阅读:
    C# Winform 国际化
    Could not find method google() for arguments [] on repository container,rn 集成react-native-camera 出现此错误的解决方法
    RN集成echarts4图表组件react-native-secharts(转载)
    DataGridView设置行高
    react native原生模块引用本地jar包
    react-native-printer
    phpstudy连接SQL Server 2008数据库 以及 php使用sql server出现乱码解决方式
    Apache崩掉:为进程配置合适的线程数
    引用静态资源时加上时间戳,处理浏览器缓存问题
    利用存储过程优化复杂的数据库操作
  • 原文地址:https://www.cnblogs.com/mutudou/p/15029660.html
Copyright © 2011-2022 走看看