文件上传〈2〉

                   文件上传进阶

           1.文件扩展名白名单绕过

白名单扩展名校验相比于黑名单更安全、可靠、普遍。绕过白名单检测通常需要依靠Web服务器的解析缺陷,或lmageMagick等组件缺陷。

1.IIS(一个服务器)解析缺陷

在IIS 6.0中,".asp"和".asa"目录中的任何扩展名的文件,都会被IIS当作asp文件来解析执行。比如在目录"a.asp"中存在文件"a.asp/1jpg",那么"1.jpg"就会当作asp文件解析执行。
对于文件名为"a.asp;a.jpg"的文件,IIS会忽略分号后的部分,当作"a.asp"解析执行。

 2.Nginx解析缺陷

Nginx解析缺陷是配置不当造成的,在Nginx未设置try_files指令对要访问的文件进行存在性检查,并且PHP-FPM未设置"security.limit_extensions"限制可解析的扩展名时,可能出现解析缺陷。

当Nginx使用下面的配置文件时
location ~ \.phps{

fastcgi_pass 127.0.0.1:9000;

fastcgt_param SCRIPT_FILENAME $document_root$fastcgt_script_name;

include fastcgt_params;
}
先上传木马"1.jpg",再访问"1.jpg/1.php"由于文件名为"·php"结尾,Nginx会发给FPM处理,当PHP启用了(默认)"cgi.fix_pathinfo”时,会发现"jpg/1.php"不存在,开始fallback到"1.jpg”,此时若“security.limit_extensions"没有设置,那么PHP就会解析并执行"1.jpg”,造成解析缺陷。

自PHP 5.3.9开始“security.limit _extensions"被加入到PHP中,并且默认值为".php",".phar”

3.Apache解析缺陷

多扩展名解析
在Apache中,单个文件支持多个扩展名,如果每个扩展名都存在对应的handler或media-type,那么对应的解析器会处理当前文件。
如果存在配置"AddHandler application/x-htpd-php .php",那么"a.php.xxx“文件会使用php进行处理

          2.上传文件禁止访问绕过

 

在测试的过程中,经常会遇到,虽然上传功能允许上传任意扩展名的文件,但是上传后无法访问,或不能被解析。这通常是由于配置了上传目录禁止解析。在这种场景下,可以尝试目录穿越,使用"../"上传到上级目录,不过对于PHP中$FILES获取的文件名,已经被basename处理过,无法直接利用。

1.".htaccess"禁止脚本文件解析

利用".htaccess"文件设置了上传目录中的文件Handler,".php"无法使用默认handler进行解析。但是在Apache 2.3.9之后,"AlowOverride"默认为None,".htaccess"无法继续发挥作用,造成绕过。

2.上传文件到"OSS"

如果上传文件被保存到云对象存储(OSS)中,自然无法进行解析执行。但是可以通过上传“HTML等文件实现XSS,不过需要注意OSS的域名,需要与网站的域名一致。

 3.配合文件包含

如果目标站点存在文件包含缺陷,比如PHP中的"include $_GET['page”;”,那么无论上传文件的扩展名是什么,都可以被文件包含执行。同样也可以适用于SSTI,如果网站允许选择染模板的路径,那么也可以完成SSTI。

               

                 3.图片验证绕过

 

部分开发者认为,上传文件的内容如果是正常图片,那么就不可能再包含代码,因此只检查是否是图片,不检查文件扩展名。

但是在PHP中,检查文件是否为正常图片的方法,往往可以被绕过

1.getimagesize绕过

 

getimagesize函数用于获取图像的信息,包括尺寸和文件类型。绕过文件不是有效的图像,那么返回FALSE。

对getimagesize的绕过,只需把PHP代码添加到图片后,getimagesize函数会正常工作,文件也可以被正常解析。
比如使用"GIF98a作为文件开头",就会被识别为GIF文件。

还可以使用XBM格式,如果在文件的某一行符合“#define%s %d”,就会格式化取出字符串和数字如果最后height和width不为空,那么getimagesize就会成功返回。因为是逐行读取,所以这个"#define“可以放在任意一行。

 2.imagecreatefromjpeg绕过

 

imagecreatefromjpeg会重新渲染并生成新图片,在图片中插入其他字符经过渲染后会消失。

可以使用“https://github.com/BlackFan/jpg_payload",将脚本嵌入到jpg图片中,即使经过转换仍然可以保留在图片中。

 

先保存一个jpg文件,然后用jpg_payload.php进行处理,然后再经过上传服务的转换,最后仍然能执行其中的system命令。

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

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

相关文章

Docker安装部署RabbitMQ

1. Docker环境准备 1.1 安装Docker 在开始Docker安装部署RabbitMQ之前,确保您的系统环境已经满足Docker的运行要求。以下是在不同操作系统上安装Docker的步骤和命令行演示。 对于Linux系统 在基于Debian的系统(如Ubuntu)上,您…

通义千问API调用测试 (colab-python,vue)

文章目录 代码(来自官网)colab中用python测试Qwen2.5在官网上查看并确定过期时间这里看到我的免费额度到25年5月在同一个页面,点击API示例 前端调用直接在前端调用的优缺点以vue为例(代码是基于官网node.js的代码转换而来&#xf…

BLDC基础知识复习【一】

焊接DDR的时候用镊子轻轻抖动一下,能晃动后复位代表焊接成功;用棉签和洗板水清洗板子,不要用纸擦 无刷没有定子和换向器,转子和定子反过来了: KV值越大,电机转速越大。电机转速 KV * 供电电压 外转子电机…

鸿蒙UI开发——自定义UI绘制帧率

1、概 述 随着设备屏幕的不断演进,当前主流设备采用LTPO屏幕(可变刷新率屏幕),此类屏幕支持在多个档位之间切换屏幕帧率。 对于快速变化的内容,如射击游戏,交互动画等,显示帧率越高&#xff0…

递归写斐波那契数

在思考一些C语言编程题的解法时我们经常会碰到的一种算法是递归,递归的字面意思是传递回归,会用例子来解释和运用。 递归 例:在控制台输出指定项数的斐波那契数 斐波那契数列数列是指:1,1,2,3,5,8,13,21,34......从第三项开始等…

手写JDK动态代理实现AOP

AOP底层? AOP(Aspect Oriented Programming,面向切面编程)在 Java 中的实现有多种方式,其中使用 JDK 动态代理和 CGLIB 代理较为常见。 当你的应用程序遵循面向接口编程的原则时,JDK 动态代理是一个自然的…

Gin框架

GoWeb框架 GIN框架 基于httprouter开发的Web框架 安装与使用 安装 下载并安装GIN go get -u github.com/gin-gonic/gin 示例 package mainimport ("github.com/gin-gonic/gin" )func main() {// 创建一个默认的路由引擎r : gin.Default()// GET:请…

nodejs - nodejs安装步骤

安装 NodeJS 1.下载 NodeJS下载官网:https://nodejs.cn/download/ 2.验证 下载后解压安装,运行如下命令验证安装是否成功: node -v npm -v3.查看默认存放位置 查看npm默认存放位置,运行命令如下: npm get prefix…

Spring Boot框架:计算机课程管理的工程认证之光

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足,创建了一个计算机管理基于工程教育认…

游戏设计:推箱子【easyx图形界面/c语言】

在之前写程序设计的大作业时,在哔哩哔哩上跟着一个视频的学习的成果【第一个练习的】 今天整理文件的时候看到的,就发出来一下【CSDN和B站都有详细教程】 不是大项目,只有两个界面 这个代码只有两百行不到,但通过这个把基本的运…

C++数学

前言 C算法与数据结构 打开打包代码的方法兼述单元测试 数论:质数、最大公约数、菲蜀定理 组合数学汇总 计算几何 博弈论 曼哈顿距离与切比雪夫距离 红线是哈曼顿距离,绿线是切比雪夫距离。 二维曼哈顿距离转切比雪夫距离 曼哈顿距离:|…

如何安装VMWare Workstation 16虚拟机

1、到VMware官网下载安装包。 2、下一步。 3、勾选同意协议,下一步。 4、更换安装路径,下一步。 5、取消全部勾选,下一步。 6、下一步。 7、安装。 8、等待安装完成。 9、安装完成,启动软件。 10、输入许可证ZF3R0…

光流分析技术

光流分析技术是一种重要的计算机视觉和图像处理技术,它通过分析连续帧图像中像素点的运动轨迹和速度,来捕捉图像中物体的运动和相邻帧之间的位移信息。以下是对光流分析技术的详细介绍: 一、光流的基本概念 光流(Optical Flow&am…

Bearer 和 Digest 两个区别

Bearer 和 Digest 是两种常见的身份验证机制,主要用于在网络通信中验证用户的身份,以下是它们之间的区别: 认证原理 Bearer:也称为承载令牌认证,其核心是使用一个令牌(Token)来代表用户的身份信息。用户在进行身份验证后,服务器会颁发一个令牌给客户端,客户端在后续…

H264三种RTP打包方式

1. 单一NALU模式 单一NALU模式 适用于小于MTU(最大传输单元)的NALU。这种模式下,一个RTP包包含一个完整的NALU。RTP头部之后紧跟着NALU头和NALU数据。 封装格式: RTP头 | NALU头 | NALU数据这种方式简单直接,但仅适…

亚马逊评论爬虫+数据分析

爬取评论 做分析首先得有数据,数据是核心,而且要准确! 1、爬虫必要步骤,选好框架 2、开发所需数据 3、最后测试流程 这里我所选框架是seleniumrequest,很多人觉得selenium慢,确实不快,仅针对此…

批量缓存模版

批量缓存模版 缓存通常有两种使用方式,一种是Cache-Aside,一种是cache-through。也就是旁路缓存和缓存即数据源。 一般一种用于读,另一种用于读写。参考后台服务架构高性能设计之道。 最典型的Cache-Aside的样例: //读操作 da…

09 Oracle数据拯救:Flashback Technologies精细级数据恢复指南

文章目录 09 Oracle数据拯救:Flashback Technologies精细级数据恢复指南一、Flashback Technologies概览二、Flashback Query:查询过去的数据三、Flashback Table:恢复整个表四、Flashback Database:恢复整个数据库五、总结与最佳…

BIST(Built-in Self-Test,内建自测试)学习笔记

参考资料: 内建自测试(Built-in Self-Test,简称BIST)详解_built in self test-CSDN博客 芯片测试术语 ,片内测试(BIST),ATE测试-CSDN博客 可能是DFT最全面的介绍--BIST - 知乎 (zhihu.com) 汽车功能安全--TC3xx LB…

three.js 杂记

在Three.js中,Object3D是所有3D对象的基类,而Group是Object3D的一个子类。Group的目的是为了简化处理多个对象的集合。当你将对象添加到Group中时,它们会以一个单元格的形式被处理,参与Group的某些操作,例如位置更新、…