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

本文内容:

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

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

  1.文件包含漏洞:

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

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

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

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

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

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

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

扫描二维码关注公众号,回复: 11081752 查看本文章

    如:     

      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类的文件包含函数中的参数是否外界可控。

  

猜你喜欢

转载自www.cnblogs.com/xz25/p/12763379.html
今日推荐