• 网络安全从入门到精通(第九章-3) 本地包含与远程包含


    本文内容:

    • 什么是文件包含漏洞
    • 函数解析
    • 文件包含漏洞挖掘技巧
    • 文件包含防御策略

    1,什么是文件包含漏洞?

      1.文件包含漏洞:

        攻击者利用包含的特性,加上应用本身对文件[包含]控制不严格,最终造成攻击者进行任意文件包含。

        文件包含并不属于漏洞,但是由于对包含进来的文件不可控,导致了文件包含漏洞的产生。

      2.本地/远程文件包含:

        包含文件很有用,可以简化代码,文件包含分为本地和远程文件包含。

        本地文件包含LFI:包含服务器上的资源。

        远程文件包含RFI:通过HTTP协议包含其它地方的资源,[需要在phpini改配置,allow_url_include = On)默认是关闭的,需要开启,配置文件修改后需要重启]

        文件包含,被包含的文件无论后缀是什么,都会被当脚本文件来解析。

        如:     

          file_put_contents('文件名','daima')函数,把一个字符串写入文件中,名字特殊一下。

          file_put_contents('1010.php','<?php eval(@$_REQUEST['a']);?>')

          target=sql.php%253f/../../../../../phpStudy/MySQL/data/b/b.frm&a=file_put_contents('853.php','<?php @eavl($_REQUEST['a'])?>');

    2,函数解析:

      include&require最大的区别是前者错误,php文件继续执行下去,而后者不再执行。

      include:使用include引用外部文件时,只有代码执行到include代码段时,调用的外部文件才会引用并读取。当引用文件发生错误时,系统给出个警告错误,整个php文件继续执行。

      require:在php文件执行之前,php解析器会被引用的文件全部内容替换require语句,然后require语句之外的其它语句,组成个新的php文件,最后按新的php文件执行程序代码。

      include_once:会在导入文件前先检测该文件是否在该页面的其它部分引用,如果有则不会重复引用该文件,程序只能引用一次。

        要导入的文件中存在一些自定义函数,那么如果在同一个程序中重复导入这个文件,在第二次导入时便会发生错误,因为php不允许相同名称的函数被重复声明

      require_once语句是require语句的眼神,它的功能与require语句基本一致,不同的使用,在应用require_once时,先会检查要引用的文件是不是已经将在该程序中其它地方被引用过,如果有,则不会重复调用该文件。

        同时使用require_once语句在同一页面中引用两个不同的文件,那么在输出的时候,只有第一文件被执行,第二引用文件则不会执行。

      ::调动类的方法,可以看作函数。

    3,文件包含漏洞挖掘技巧:

      因为文件包含主要是对包含的函数,处理不当造成的,可以针对性的对这些函数进行点名:

      如:

        1.include()

        2.include_once()

        3.require()

        4.require_once()

    4,文件包含防御策略:

      1.无需要情况设置allow_url_include和allow_url_fopen为关闭。

      2.对可以包含的文件进行限制,可以使用白名单的方式,或者设置可以包含的目录。

      3.建议假定所有输入都是可疑的,尝试对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的审查,参数中不允许出现../之类的目录跳转符。

      4.严格检查include类的文件包含函数中的参数是否外界可控。

      

  • 相关阅读:
    推荐一款好用的博客离线编辑工具——OpenLiveWriter
    Windows下MySQL5.7版本中修改编码为utf-8
    IDEA中常用优化设置
    夯实Java基础系列目录
    夯实Java基础(二十四)——Java8新特征之Optional类
    StringBuilder为什么线程不安全(面试必问)
    【JUnit】测试套件(Test Suite)
    【JUnit】基于控制台的 Runner
    【JUnit】JUnit 和 BlockJUnit4ClassRunner
    【JUnit】JUnit 父类和子类执行顺序
  • 原文地址:https://www.cnblogs.com/xz25/p/12763379.html
Copyright © 2020-2023  润新知