Dvwa漏洞测试之文件包含笔记
程序员文章站
2022-05-26 08:38:43
...
漏洞产生原因的本质是:用给定的可控的输入,输入了不可控的参数或代码,产生了不可控的结果。
文件包含漏洞我在前面已经进行过讲述,今天就漏洞测试和漏洞利用讨论下,漏洞测试环境是Dvwa。
漏洞产生原因:
被包含的页面可以被攻击者控制,也就是说攻击者可以随心所欲地去包含某个页面。
由于本次测试远程包含测试出现问题,暂不测试,本阶段暂时只测试本地包含。
漏洞测试:
Low
首先查看源码:
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>
经过分析我们发现,服务器并未对传入的参数进行过滤,这里page参数的传入是不可控的,下面我们构造url。
发现虽然并成功,但却发现了服务器的绝对路径,继续构造url。
几种测试url均测试成功。可见没有的防御能力。
通过测试我们读取服务器任何文件,只要位置明确,而事实上,在如今的信息时代,系统的机密文件的位置已经不是秘密。
Medium
查看源码:
<?php
// 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编码绕过,如图:
这个漏洞的测试成功也更加证明了str_replace的不安全性。
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;
}
?>
高级别的代码使用了fnmatch函数来查看page参数,要求page参数必须是file。服务器才去包含相应的文件。这个看似无懈可击,但却忘了一个php内置协议file协议,我们可以通过file协议访问文件。测试代码如下:
不要惊奇上面的url编码,其实是我懒得改,今天有点累,用绝对路径什么的都没影响,前面的payload都可以,关键是使用file协议。
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;
}
?>
可以发现,这一次服务器直接采用了白名单的方式进行了限制,page的参数进行了严格的控制,这个就无解了。彻底杜绝了文件包含漏洞。
上一篇: Fastjson 反序列化漏洞复现
下一篇: Nessus安装