9-文件包含漏洞
一、文件包含漏洞
定义:为了更好使用代码的重用性,引入了文件包含函数,可以通过文件包含将文件包含进来,直接使用包含文件的代码。
原因:在包含文件的时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量引入需要包含的文件时,用户可以对变量的值可控而服务器未对变量值进行合理地校验或者校验被通过,这样就导致了文件包含漏洞,通常文件包含漏洞出席那在PHP语言中。
文件包含函数:
include执行到这里如果发生错误会继续向下执行
include_once
require执行到这里如果发生错误就结束了,不会再继续向下执行
require_once
highlight_file
show_souce,file_get_contents,fopen,file)
文件包含漏洞分类(本地文件包含,远程文件包含)
当allow_url_fopen为on时,能读取远程文件,例如file_get_contents()就能读远程文件,allow_url_include为on时,就可使用include和require等方式包含远程文件。
文件包含漏洞的利用方式-伪协议
协议: allow_url_fopen allow_url_include
file:// off/on off/on
php://filter off/on off/on
php://input off/on on
compress:bzip2:// off/on off/on
compress:zlib:// off/on off/on
data:// on on
文件包含漏洞的利用方式----其他
00截断: 在URL里会包含%00,用来截断后面的信息,防止本地包含漏洞
长度截断
包含日志文件:日志包含漏洞属于是本地文件包含,服务器中的中间件、SSH等服务都有记录日志的功能,如果开启了记录日志功能,用户访问的日志都会存储到不同服务的相关文件中,如果日志文件的位置是默认位置或者是可以通过其他方法获取到,就可以通过访问日志将恶意代码写入到日志文件中,然后通过文件包含漏洞,包含日志中的恶意代码,获得Web服务器的权限。
包含session