什么是文件包含(漏洞)
服务器在执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建所有网页引用的标准页眉或菜单文件。当页眉需要更新时,只需要更新一个包含文件即可。
文件包含漏洞:即File Include,是指当服务器开启allow_url_include选项时,就可以通过PHP某些特性函数如:include()、require()、include_once()、requir_once()利用URL去动态包含文件,此时如果没有对文件来源进行严格审核,就会导致任意文件读取或任意目录执行。文件包含漏洞分为本地文件包含漏洞和远程文件包含漏洞,远程文件包含漏洞是因为开启了PHP的allow_url_fopen选项,选项开启后,服务器将语序包含一个远程文件,服务器通过PHP特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而包含了一个恶意文件,而我们可以构造出这个恶意文件来达到自己的目的。
本地文件包含LFI(Local File Include):
当被包含的文件在服务器本地时,就形成本地文件包含
远程文件包含RFI(Remote File Include):
当被包含的文件在第三方服务器时,叫做远程文件包含
常见的文件包含函数
include(): 执行include时才包含文件,找不到被包含文件时只会产生警告
require(): 只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止运行脚本
include_once()和require_once(): 若文件中代码被包含则不会再次包含。
漏洞产生原因
文件包含函数加载的参数没有经过过滤或者严格定义,可以被用户控制,包含其他恶意文件,导致了非预期的代码
<?php
$filename = $_GET['filename'];
include($filename);
?>
在上面的代码中$_GET['filename']参数开发者没有经过严格过滤,直接带入了include的函数,攻击者可以修改$_GET['filename']的值,执行非预期的操作
DVWA-文件包含
查看DVWA 文件包含漏洞的源代码,可以看出没有进行任何的过滤
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
构造Payload可以轻松的查看到passwd文件
常见的敏感信息路径
Windows系统
c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息
Linux系统
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/my.conf // mysql 配置文件
下方查看历史文章
扫描二维码
获取更多精彩
NowSec