什么是文件包含漏洞
文件包含,在网站开发人员开发网站时,会将经常重复的代码写道一个单独的文件中,在别的文件中可以使用文件包含的函数来引用单独的文件。目前很多语言都支持文件包含,例如php(inchude,require,inchude_once,require_once)等,,也就是包含文件包含函数,其目的就是减少代码重复,提高代码优化效率,减少函数重复的使用。
文件包含产生的漏洞,因为有这些文件包含的函数,当我们有一定权限(可读)的时候,我们就可以利用文件包含函数包含我们语言指定的文件,或者是包含本地服务器中的文件。简而言之,当php语言在引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过效验,或者没有经过过滤被绕过,从而引用别的文件,导致的恶意代码注入
文件包含漏洞的分类
大体可以分为:本地文件包含和远程文件包含。
远程文件包含:开启条件,在php.ini配置文件中开启allow_url_fopen和allow_url_include,包含文件是第三方文件
本地文件包含:就是本地服务器上的文件
一旦远程包含可以开启,那么远程包含的漏洞比本地包含的漏洞更加的直接,危害也更加的大,可以随意的包含任意主机的任意文件。
本地文件包含
顾名思义,引用本地文件,利用inchude包含函数包含本地(服务器)文件。
漏洞&利用
利用条件(以PHP为例)
1.inchude,等函数通过动态变量引入
2.用户能自动控制动态变量
什么是动态变量?
我们可以这么理解,例如一个网站 http://127.0.0.1/inchude.php?in=../../../etc/passwd,那么此时的?in=../../../etc/passwd是我们动态可以操作的变量
直接访问文件
?xx=/etc/passwd #直接访问passwd敏感文件
?xx=../../../etc/passwd
利用协议读取源代码
?xx=php://filter/read=convert.base64-encode/resource=xx.php #这样能看到php文件的源码