Dvwa漏洞测试之文件包含笔记

漏洞产生原因的本质是:用给定的可控的输入,输入了不可控的参数或代码,产生了不可控的结果。
文件包含漏洞我在前面已经进行过讲述,今天就漏洞测试和漏洞利用讨论下,漏洞测试环境是Dvwa。

漏洞产生原因:

被包含的页面可以被攻击者控制,也就是说攻击者可以随心所欲地去包含某个页面。
由于本次测试远程包含测试出现问题,暂不测试,本阶段暂时只测试本地包含。

漏洞测试:

Low

首先查看源码:

 

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

      ?>

经过分析我们发现,服务器并未对传入的参数进行过滤,这里page参数的传入是不可控的,下面我们构造url。

Dvwa漏洞测试之文件包含笔记_第1张图片

发现虽然并成功,但却发现了服务器的绝对路径,继续构造url。

Dvwa漏洞测试之文件包含笔记_第2张图片

几种测试url均测试成功。可见没有的防御能力。

Dvwa漏洞测试之文件包含笔记_第3张图片

通过测试我们读取服务器任何文件,只要位置明确,而事实上,在如今的信息时代,系统的机密文件的位置已经不是秘密。

Medium

查看源码:

 

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

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

?>

由分析可知,服务器对远程包含进行了过滤,但是通过决定路径还是可以访问文件,测试代码和low级别是一样的。而远程包含的绕过可以通过双写绕过,比如hthttp://tp://,而../的过滤可以通过对其进行url编码绕过,如图:
Dvwa漏洞测试之文件包含笔记_第4张图片
这个漏洞的测试成功也更加证明了str_replace的不安全性。

High

查看源码:

 

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

?>

高级别的代码使用了fnmatch函数来查看page参数,要求page参数必须是file。服务器才去包含相应的文件。这个看似无懈可击,但却忘了一个php内置协议file协议,我们可以通过file协议访问文件。测试代码如下:

这里写图片描述

不要惊奇上面的url编码,其实是我懒得改,今天有点累,用绝对路径什么的都没影响,前面的payload都可以,关键是使用file协议。

Impossible

查看源码:

 

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

?>

可以发现,这一次服务器直接采用了白名单的方式进行了限制,page的参数进行了严格的控制,这个就无解了。彻底杜绝了文件包含漏洞。

你可能感兴趣的:(Dvwa漏洞测试,漏洞挖掘,Web,安全)