文件上传漏洞——DVWA练习

本文通过在DVWA靶场实践,详细介绍了文件上传漏洞的原理和利用方式,包括low、medium和high三个级别的防御绕过。通过分析源码、构造payload和利用文件头欺骗,展示了如何进行文件上传攻击以及服务器如何处理此类漏洞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:文件上传漏洞是很常见的漏洞,也非常有趣,接下来就在DVWA靶场中边学边练。

文件上传漏洞

文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向服务器上上传可执行的动态脚本文件。这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等。这种攻击方式是最为直接和有效的,“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

具体的原理可以看大师傅的讲解
Smi1e_——文件上传漏洞 学习笔记
文件上传漏洞
low级别

在这里插入图片描述
观察源码

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
   
   
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
# $_FILES["file"]["name"] - 被上传文件的名称
# $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
# basename() 函数返回路径中的文件名部分
    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
   
   
    # move_uploaded_file() 函数将上传的文件移动到新位置
        // No
        echo '<pre>Your image was not uploaded.</pre>';
    }
    else {
   
   
        // Yes!
        echo "<pre>{
     
     $target_path} succesfully uploaded!</pre>";
    }
}

?> 

通过对源码的分析,我们发现没有任何防护和限制,那就构造一句话木马
在这里插入图片描述
进行上传
在这里插入图片描述
根据相应的路径进行菜刀连接即可
在这里插入图片描述

Medium级别
在这里插入图片描述
上传刚才一句话木马试一下,发现
在这里插入图片描述
只能上传JPG或者是PNG,那就来查看一下源码

<?php

if( isset( $_POST[ 'Upload' ] ) ) {
   
   
    // Where are we going to be writing to?
    $target_path  = DV
### 关于文件上传漏洞的安全测试 文件上传功能在许多Web应用程序中非常常见,但如果实现不当可能会引发严重的安全隐患。以下是常见的文件上传漏洞及其示例。 #### 常见文件上传漏洞 1. **未对文件类型进行严格校验** 攻击者可以通过伪造文件头或使用多扩展名绕过简单的文件类型检测机制[^2]。例如,攻击者可以上传名为 `exploit.php.jpg` 的文件,在某些情况下该文件会被视为合法图片并存储到服务器上。 2. **缺乏路径遍历防护** 如果程序未能正确过滤用户输入中的特殊字符(如 `../`),可能导致攻击者将文件保存至任意位置,甚至覆盖重要系统文件。 3. **临时文件处理不当** 当应用创建临时文件时如果没有采取适当措施防止篡改,则可能遭受重命名或其他形式的干扰。 4. **权限设置错误** 即使成功阻止了非法脚本运行,但如果这些文件具有过高读取/写入权限的话仍然存在风险——比如泄露敏感数据或者成为进一步渗透的基础。 5. **缺少大小限制** 不加控制地接受超大尺寸文档不仅浪费资源还容易造成拒绝服务(DoS)状况发生。 #### 文件上传漏洞 示例代码片段 下面展示了一个简单却充满隐患的PHP文件上传逻辑: ```php <?php if ($_FILES["file"]["error"] == UPLOAD_ERR_OK){ $tmp_name = $_FILES['file']['tmp_name']; move_uploaded_file($tmp_name, "./uploads/" . basename($_FILES['file']['name'])); } ?> ``` 上述例子完全没有考虑安全性因素,很容易受到各种类型的攻击影响。 #### 推荐练习平台与题目 对于希望实践学习如何发现以及修复此类问题的学习者来说,有几个不错的在线实验室可供尝试: - OWASP Juice Shop: 这是一款基于浏览器的应用程序安全培训工具包,其中包含了多种真实世界中存在的缺陷场景供探索解决办法; - DVWA (Damn Vulnerable Web Application): 提供了一系列基础向高级别的挑战项目帮助理解不同种类web app sec issues; - HackTheBox 和 TryHackMe 上也有专门针对特定主题设计的任务等待完成; 另外还可以参考官方文档了解最佳编码习惯从而有效预防潜在威胁的发生几率。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值