文件上传漏洞

原理

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。这种攻击方式是最为直接和有效的,“文件上传”本身是没有问题,有问题的是文件上传后,服务器怎么处理、解释文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。

漏洞危害

上传文件的时,服务器端脚本语言未对上传的文件进行严格的验证和过滤,就有可能上传恶意的文件,从而控制整个网站,甚至是服务器。

漏洞条件

  • 文件可上传
  • 知道文件上传的路径
  • 上传文件可以被访问
  • 上传文件可以被执行

文件上传可控点

  • Content-Length,即上传内容大小
  • MAX_FILE_SIZE,即上传内容的最大长度,一般在php.ini文件中设置
  • filename,即上传文件名
  • Content-Type,即上传文件类型
  • 请求包中的乱码字段,即是所上传文件的内容
  • 有可能存在请求包中的可控点还有上传路径,只是上面的示例中没有出现

挖掘思路

  • 上传点都调用同一个上传类,直接全局搜索上传函数
  • 黑盒寻找上传点,代码定位

代码展示

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传漏洞</title>
</head>
<body>
    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" name="文件上传">
        <input type="hidden" name="">
    </form>
</body>
</html>

upload.php

<?php
    header("Content-Type:text/html;charset=utf-8");
    $upload_dir = "C:\Program Files\PHPStudy\WWW\PHP\upload";
    if(isset($_FILES['file'])){
        $upload_name = $upload_dir . "\\" . $_FILES['file']['name'];
        move_uploaded_file($_FILES['file']['tmp_name'],$upload_name);
        echo "Type:". $_FILES['file']['type'] . "<br>";
        echo "Size:". ($_FILES['file']['size'] / 1024) . "<br>";
        echo "Name:". $_FILES['file']['name'];
    }else{
        echo "上传失败";
    }

当我们点击上传1.php文件时,内容可以是一句话木马,显示上传成功
在这里插入图片描述
然后我们使用菜刀来连接,成功连接得到目录,在连接是一定要填写密码,密码即是一句话木马的内容
在这里插入图片描述

在这里插入图片描述

文件上传绕过-客户端

  • 用firebug将form表单中的onsubmit事件删除
  • 上传木马文件,Burp拦截数据包,修改扩展名

文件上传绕过-服务端

  • 黑白名单过滤
  • 修改MIME类型
  • 截断上传攻击
  • .htaccess文件攻击
  • 目录验证
  • htaccess 文件是Apache服务器中的一个配置文件,用于实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能

修复方案

  • 检测文件上传内容
  • 黑白名单验证,检测文件扩展名是否合法
  • MIME验证,检测文件的MIME类型
  • 限制文件大小
  • 更改临时文件夹的路径
  • 读取上传文件的绝对路径 与文件名称
  • 隐藏文件路径
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

平凡的学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值