FileInclusion
漏洞产生原因: 在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。比如php中提供了:
include()
、include_once()
、require()
、require_once()
- include和require的区别主要是:include在包含过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会知己报错并退出程序的执行。
漏洞产生条件:
- web 应用采用
include()
等文件包含函数,并且需要包含的文件路径是通过用户传输参
数的方式引入; - 用户能够控制包含文件的参数,被包含的文件可被当前页面访问;
漏洞危害
本地文件包含不仅能够包含web文件目录中的一些配置文件(比如Web应用、数据库配置文件、config文件),还可以查看到一些Web动态页面的源代码,为攻击者进一步发掘web应用漏洞提供条件,甚至一旦与路径遍历漏洞相结合,还可能直接攫取目标系统的用户名与密码等文件。
漏洞挖掘
无通用性方法、特定CMS,特定版本可能存在、web漏洞扫描器扫描
分类
本地包含
远程包含
需要php.ini打开allow_url_include=On
漏洞利用
参考reference1、reference2
可利用途径:
- 上传图片:图片包含getshell
- 读文件:读取php文件
- 包含日志文件getshell
- 包含/proc/self/environ/文件getshell
- ·有phpinfo可包含临时文件
- 包含data://或php://inout等伪协议(需要allow_url_include=On)
常见敏感文件
- 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 Files\mysql\data\mysql\user.MYD //Mysql root
- C:\windows\php.ini //php 配置信息
- C:\windows\my.ini //mysql 配置文件
- Linux:
- /etc/passwd
- /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/php5/apache2/php.ini //ubuntu 系统的默认路径
PHP 伪协议
- file:// 访问本地文件系统
- http:// 访问 HTTPs 网址
- ftp:// 访问 ftp URL
- php:// 访问输入输出流
- zlib:// 压缩流
- data:// 数据
- ssh2:// security shell2
- expect:// 处理交互式的流
- glob:// 查找匹配的文件路径
漏洞防范
- PHP中可使用open_basedir配置限制访问限制在指定的区域
- 过滤.(点)/(反斜杠)(斜杠)
- 进制服务器远程文件包含