网络安全 DVWA通关指南 DVWA File Inclusion(文件包含)

举报
YueXuan 发表于 2024/07/16 17:26:06 2024/07/16
【摘要】 DVWA File Inclusion(文件包含)本地文件包含(LFI) 文件包含漏洞的产生原因是 PHP 语言在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。利用条件:(1)include()等函数通过动态变量的方式引入...

DVWA File Inclusion(文件包含)

本地文件包含(LFI)

文件包含漏洞的产生原因是 PHP 语言在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

利用条件:

(1)include()等函数通过动态变量的方式引入包含文件; (2)用户能够控制该动态变量。

远程文件包含(RFL)

服务器通过 PHP 的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严格,

从而可以去包含一个恶意文件,攻击者就可以远程构造一个特定的恶意文件达到攻击目的。

条件:php.ini中开启allow_url_includeallow_url_fopen选项。

修复建议:

1. 禁止远程文件包含 allow_url_include=off

2. 配置 open_basedir=指定目录,限制访问区域。

3. 过滤../等特殊符号

4. 修改Apache日志文件的存放地址

5. 开启魔术引号 magic_quotes_qpc=on

6. 尽量不要使用动态变量调用文件,直接写要包含的文件。


Low

1、分析网页源代码

<?php

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

?>

没有任何过滤措施存在,同时使用GET方法传递参数。尝试查看file1.php文件

2、在URL输入不存在的路径,提交出现报错信息,得到文件的绝对路径

Warning: include(iviirjgiegij): failed to open stream: No such file or directory in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36

Warning: include(): Failed opening 'iviirjgiegij' for inclusion (include_path='.;C:\php\pear;../../external/phpids/0.6/lib/') in D:\phpstudy_pro\WWW\DVWA-master\vulnerabilities\fi\index.php on line 36

3、使用相对路径访问fi.php,路径为D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php。

相对路径计算如下:

..\..\hackable\flags\fi.php

成功访问到fi.php文件

Medium

1、分析网页源代码

<?php

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

// Input validation
$file = str_replace( array( "http://", "https://" ), "", $file );
// 使用str_replace函数移除$file字符串中所有的"http://"和"https://"子串。
$file = str_replace( array( "../", "..\"" ), "", $file );
// 继续使用str_replace函数,这次移除$file中所有向上一级目录的路径指示符,无论是"../"还是"..\"(考虑到不同操作系统的路径分隔符)。

?>

2、使用str_replace函数对输入的文件路径进行过滤,因为使用的是str_replace函数,所以可以使用双写绕过。构造Payload如下:

..././..././hackable/flags/fi.php

拼接到URL中提交,绕过成功

High

1、分析网页源代码

<?php

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

// Input validation
// 使用fnmatch函数检查$file是否匹配模式"file*"
// fnmatch用于实现shell风格的通配符匹配,这里的"file*"会匹配以"file"开头的任何字符串。
if( !fnmatch( "file*", $file ) && $file != "include.php" ) {
// This isn't the page we want!
echo "ERROR: File not found!";
exit;
}

?>

2、使用fnmatch函数函数,虽然只能包含"file"开头的文件,但我们可以使用file伪协议读取到文件。(这个地方需要文件的绝对路径,与Low级别不同,这里的报错信息需要提交以file开头的不存在文件或路径,否则会返回统一错误页面)

构造Payload如下:

file:///D:\phpstudy_pro\WWW\DVWA-master\hackable\flags\fi.php

拼接到URL中提交,包含文件成功

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

?>
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。