什么是文件包含漏洞:随着网站业务的需求,程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但是正是这种灵活性通过动态变量的方式引入需要包含的文件时,用户对这个变量可控而且服务端又没有做合理的校验或者校验被绕过就造成了文件包含漏洞。
文件包含漏洞分类:
1、本地文件包含漏洞(LIF):当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。
2、远程文件包含漏洞(RLF): 本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini 中的配置选项allow_url_fopen和allow_url_include(默认是关闭的)为ON的话,则包含的文件可以是第三方服务器中的文件,这样就形成了远程文件包含漏洞。
PHP中常见的包含文件的函数:
1、 include:当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来发生错误时之给出一个警告,继续向下执行。
2、include_once: 功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次
3、 require: require()与include()的区别在于require( )执行如果发生错误,函数会输出错误信
4、 require_once:功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次
文件包含漏洞发现:
其实在文件包含在URL中能够明显的看出来,但是不代表含有这些特征就一定有文件包含漏洞。只不过有这些特征可以进行判断是存在文件包含的,但是能不能利用是另一方面。如下的url就有可能存在文件包含漏洞。
http://www.xxx.com/index.php/?name=x.php
http://www.xxx.com/index.php/?file=index2
文件包含漏洞的危害:
1、 PHP包含漏洞结合上传漏洞
2、读文件
3、写文件
4、 PHP内置伪协议利用
../——返回上一级目录指令,文件包含漏洞中常用到
文件包含漏洞读取敏感文件:
Linux系统:/etc/passwd 、 /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.cnf //Mysql配置文件
Windows系统:C:\boot.ini //查看系统版本 、 C:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件 、 C:\windows\repair\sam //存储Windows系统初始安装密码 、 C:\\Program files\mysql\my.ini //mysql配置 、 C:\\Program Filed\mysql\data\mysql\user.MYD //Mysql root 、 C:\\windows\php.ini //php配置信息 、 C:\\windows\my.ini //Mysql配置文件
本地文件包含漏洞利用技巧:
1.配合文件上传使用
有时候我们找不到文件上传漏洞,无法上传webshell,可以先上传一个图片格式的webshell到服务器,再利用本地文件包含漏洞进行解析。
2.包含Apache日志文件
有时候网站存在文件包含漏洞,但是却没有文件上传点。这个时候我们还可以通过利用Apache的日志文件来生成一句话木马
利用条件
对日志文件可读
知道日志文件存储目录