一、文件包含漏洞是什么?
通过函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。
二、 文件包含漏洞有哪几种类型?
本地文件包含漏洞:本地包含顾名思义,就是在网站服务器本身存在恶意文件,然后利用本地文件包含使用。
远程文件包含漏洞:远程文件包含就是调用其他网站的恶意文件进行打开。
三、 php的包含函数
PHP中文件包含函数有以下四种
require() require_once() include() include_once()
include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。
四、 本地包含漏洞
本地包含顾名思义,就是在网站服务器本身存在恶意文件,然后利用本地文件包含使用。本地包含漏洞常被用来读取本地文件,上传包含恶意代码的图片,然后包含执行。
1. 包含恶意代码的文件
创建一个后缀为jpg的文件,内容如图:
上传该文件,直接访问,文件并不会执行
通过包含漏洞包含该文件后,php代码被执行了
2. 读取本地文件
可通过该漏洞读取一些配置文件等敏感文件
/etc/passwd//账户信息 /etc/shadow//账户密码文件 /usr/local/app/apache2/conf/httpd.conf//Apache2默认配置文件 /usr/local/app/apache2/conf/extra/httpd-vhost.conf//虚拟网站配置 /usr/local/app/php5/lib/php.ini //PHP相关配置 /etc/httpd/conf/httpd.conf//Apache配置文件 /etc/my.conf // mysql 配置文件
五、 远程包含漏洞
远程包含漏洞需要服务器期的服务器的php.ini的配置选项allow_url_fopen和allow_url_include为On,然后在自己的服务器放一个包含恶意代码的文件。
然后包含这个远程文件,通过文件包含漏洞执行文件内的代码。