File Inclusion

File Inclusion

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。


文件包含漏洞,是指当服务器开启==allow_url_include==选项时,就可以通过php的某些特性函数 (include()、require()、include_once()、require())利用url去动态包含文件,此时如果 没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为: 本地文件包含漏洞和远程文件包含漏洞,远程文件包含漏洞是因为php配置中的allow_url_fopen 开启,服务器允许包含一个远程的文件。


文件包含函数

PHP中文件包含函数有以下四种:require()、require_once()、include()、include_once()

include和require区别主要是:include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
而include_once(),require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

漏洞产生原因

文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。
服务器包含文件时,不管文件后缀是否是php,都会尝试当作php文件执行,如果文件内容确为php,则会正常执行并返回结果;如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行


文件上传漏洞攻击与防范方法

Web安全实战系列:文件包含漏洞

LOW级别



// The page we wish to display
$file = $_GET[ 'page' ];

?> 

服务器期望用户的操作是点击下面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容确为php,则会正常执行并返回结果,如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

File Inclusion_第1张图片

在页面上点击三个文件名会显示不同内容,

File Inclusion_第2张图片

File Inclusion_第3张图片

观察URL的变化。发现通过page=点击的文件名来显示相应内容,那么可能存在文件包含漏洞,通过修改URL,让page=指定的文件,来显示攻击者想访问的不在开发者指定访问范围中的内容。

http://192.168.80.145/dvwa/vulnerabilities/fi/?page=/etc/passwd

File Inclusion_第4张图片

报错,显示没有这个文件,暴露了服务器文件的绝对路径C:\phpstudy_pro\WWW\dvwa\

成功读取了服务器的php.ini文件

在这里插入图片描述

Medium级别



// The page we wish to display
$file = $_GET[ 'page' ];

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\\" ), "", $file );

?> 

发现使用str_replace对http://,https:// 替换成空,对于str_replace函数进行的过滤,可以使用双写进行绕过

http://192.168.80.145/dvwa/vulnerabilities/fi/?page=hthttp://tp://www.baidu.com

File Inclusion_第5张图片

你可能感兴趣的:(#,DVWA靶场,dvwa)