文件包含漏洞
什么是文件包含
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,无需再次编写,这种调用文件的过程一般被称为文件包含。
文件包含漏洞的成因
程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。
文件包含漏洞产生的条件
(1)文件包含漏洞利用的前提条件:
1,web 应用采用 include 等文件包含函数,并且需要包含的文件路径是通过用户传输参数的方式引入; 2, 用户能够控制包含文件的参数,被包含的文件可被当前页面访问;
(2)文件包含漏洞获取 webshell 的前提条件:
1,攻击者需要知道文件存放的物理路径; 2,对上传文件所在目录拥有可执行权限; 3, 存在文件包含漏洞;
PHP中常见包含文件的函数
- include( )
当使用该函数包含文件时,只有代码执行到 include()函数时才将文件包含 进来,发生错误时之给出一个警告,继续向下执行。 - include_once( )
功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次 - require( )
require()与include()的区别在于require()执行如果发生错误,函数会输出 错误信息,并终止脚本的运行。 - require_once( )
功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。
文件包含漏洞的分类
当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。
本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini 中的配置选项allow_url_fopen 和allow_url_include 为ON的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞。
文件包含漏洞的利用
一句话后门,获取网站权限
变量覆盖配合文件包含漏洞
|