文件上传技术总结

语言可解析的后缀

(前提:在Apache httpd.conf 配置文件中有特殊语言的配置

AddHandler application/x-httpd-php .php

搭配大小写、双重、空格来进行

其中:

phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀

常见的MIME类型

  超文本标记语言文本 .html,.html text/html

  普通文本 .txt text/plain

  RTF文本 .rtf application/rtf

  GIF图形 .gif image/gif

  JPEG图形 .jpeg,.jpg image/jpeg

  au声音文件 .au audio/basic

  MIDI音乐文件 mid,.midi audio/midi,audio/x-midi

  RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio

  MPEG文件 .mpg,.mpeg video/mpeg

  AVI文件 .avi video/x-msvideo

  GZIP文件 .gz application/x-gzip

TAR文件 .tar application/x-tar

windows特性

Windows下文件名不区分大小写,Linux下文件名区分大写欧西;

Windows下ADS流特性,导致上传文件xxx.php::$DATA = xxx.php;

Windows下文件名结尾加入.,空格,<,·>,>>>,0x81-0xff等字符,最终生成的文件均被windows忽略。

00截断

0x00截断是将上传文件名或路径名中使用ascll码值为0的字符(也就是null)来进行截断,%00一般用在URL中用于截断url来进行文件包含,两者原理都一样,都是ascll为0的字符,只是形式不同

 

使用%00截断,需要两个条件
(1)php版本小于5.3.4(2)php的magic_quotes_gpc为OFF状态

例如:1.asp%00.jpg

post型:post不会像get对%00进行自动解码,所以先添加一个+号,

然后找到2b

使用0x00截断

先在文件尾添加一个空格,点开hex,将其对应的20改成00即可,就可以绕过后缀名的过滤

文件头检查

改后缀为php上传,还是失败

合成图片马,再修改后缀php再上传

 如果是检测gif的话,可以在内容前添加GIF89a,例如

二次渲染

上传的图片会被修改部分内容,此时要对比未上传和已上传的图片对比出没有被修改的部分,在未修改的部分插入一句马子

例如上传前,把马子插入gif图片的底部

上传后,发现马子不见了

需要找到渲染前后没有变化的位置,然后将php代码写进去 例如:

.htaccess绕过

.htaccess(apache的配置文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。)

前提是:httpd.conf,启用AllowOverride(将该值改为all)

<Directory />Options FollowSymLinksAllowOverride AllAddType application/x-httpd-php .jpg	#将.jpg后缀的文件作为PHP文件解析
</Directory>

上传一个.htaccess内容如下的文件

<FilesMatch "2.jpg">

SetHandler application/x-httpd-php

</FilesMatch>

.htaccess文件的内容的意思是 对2.jpg使用php重新解析

如果只是单纯如下语句,它会把所有上传文件当成php来解析

SetHandler application/x-httpd-php

<Directory />Options FollowSymLinksAllowOverride AllAddType application/x-httpd-php 	#将.jpg后缀的文件作为PHP文件解析
</Directory>

Apache解析漏洞

一:

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过

例如:

正常上传.php文件上传不成功,burp抓包后发送到Repeater然后hex在置右键-Insert byte,在0d、0a前加一个0a,然后send,即可绕过上传

在页面访问http://192.168.0.99:8080/feng.php%0a

二:

Apache多后缀解析

如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

影响版本Apache 1.xApache 2.x

Apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后面向前解析,直到碰到认识的扩展名为止。

例如feng.php.QWE.ABC

Apache在处理时,先读取最后一个后缀,为ABC不认识,继续往左读取QWE不认识,读到php能识别这个后缀,于是就把feng.php.QWE.ABC当成是feng.php文件来解析,若是所有后缀都看完了没有一个认识怎么办?此时就会把该文件当做默认类型进行处理了,一般来说,默认类型是text/plain。

 

phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀

 IIS 解析漏洞

    目录解析

/xx.asp/xx.jpg

若文件夹的名字后缀为 .asp、.asa,其目录内的任何扩展名的文件都被IIS当作asp文件来解析并执行。

例如创建目录 abc.asp,那么

/abc.asp/1.jpg

1.jpg将被当作1.asp文件来执行。不管你上传后你的图片改不改名都能拿shell了。

    文件解析

在IIS6.0下,分号后面的不被解析,例如

abc.asp;.jpg

会被服务器看成是abc.asp

原理大抵是IIS 5.x/6.0在从文件路径中读取文件后缀时,遇到一个“.”后,便进入了一种截断状态,在该状态下遇到特殊符号 “/”和“;”,都会进行截断,只保留特殊符号前的部分,即“.asp”,从而认为文件后缀为“.asp”。

    默认解析

IIS6.0 默认的可执行文件除了asp还包含这三种默认解析:/xx.asa /xx.cer /xx.cdx

原因:由于在 IIS 默认配置中,这几个后缀默认由 asp.dll 来解析,所以执行权限和 .asp 一摸一样,你可在配置中自行删除该后缀,以防止安全隐患

此处可联系利用目录解析漏洞 /xx.asa/xx.jpg 或 /xx.cer/xx.jpg 或 xx.asa;.jpg

    IIS 7.0/IIS 7.5/ Nginx <8.03畸形解析漏洞

前提:默认Fast-CGI开启状况下,在一个文件路径(/xx.jpg)后面加上/xx.php会将

/xx.jpg/xx.php 解析为 php 文件。

在某些使用有漏洞的网站中,访问http://xxx.xxx.xxx/1.jpg/1.php,此时的1.jpg会被当作PHP脚本来解析,但是1.php是不存在的。

这就意味着攻击者可以上传合法的“图片”(图片木马)然后在URL后面加上“/1.php”,就可以获得网站的WebShell,菜刀连接:http://xxx.xxx.xxx/1.jpg/1.php

 java的空字节截断

\u0000.jpg

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity - gamma space下还原linear space效果

文章目录 环境目的环境问题实践结果要处理的点处理细节【OnPostProcessTexture 实现 sRGB 2 Linear 编码】 - 预处理【封装个简单的 *.cginc】 - shader runtime【shader需要gamma space下还原记得 #define _RECOVERY_LINEAR_IN_GAMMA】【颜色参数应用前 和 颜色贴图采样后】【…

Linux-共享内存

文章目录 前言一、system V共享内存申请共享内存挂载共享内存删除共享内存挂载删除共享内存 二、示例代码三.运行效果 前言 在这之前我们已经学习了两种进程间通信方式&#xff1a;匿名管道和命名管道。 从我们之前的学习已经知道&#xff0c;想让多个进程间进行通信就需要让他…

【多线程】ThreadLocal 详解,举例说明

ThreadLocal 是 Java 中的一个线程级别的变量&#xff0c;用于在多线程环境下保持变量的独立性。每个线程都可以独立地设置和获取 ThreadLocal 的值&#xff0c;而不会影响其他线程。通常情况下&#xff0c;ThreadLocal 被用来在方法或类之间传递变量。 1、原理&#xff1a; …

java数据结构与算法刷题-----LeetCode667. 优美的排列 II

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 题目要求我们返回一个数组长度为n的数组&#xff0c;必须含有1~n…

C语言通过IXMLHTTPRequest以get或post方式发送http请求获取服务器文本或xml数据

做过网页设计的人应该都知道ajax。 Ajax即Asynchronous Javascript And XML&#xff08;异步的JavaScript和XML&#xff09;。使用Ajax的最大优点&#xff0c;就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作&#xff0c;并避免了在网络上发…

JS进阶-深入对象(二)

拓展&#xff1a;深入对象主要介绍的是Js的构造函数&#xff0c;实例成员&#xff0c;静态成员&#xff0c;其中构造函数和Java种的构造函数用法相似&#xff0c;思想是一样的&#xff0c;但静态成员和实例成员和java种的有比较大的差别&#xff0c;需要认真理解 • 创建对象三…

el-select选择之后值不显示在文本框的问题解决

问题场景如下图&#xff1a; 在el-collapse-item中使用子组件&#xff0c;子组件里是el-form-item代码。el-select在for循环中&#xff0c;可以有多个。 查了一下博客&#xff0c;有的说这种场景需要给el-select添加change事件&#xff0c;加上 this.$forceUpdate() 强制刷新即…

【单例模式】保证线程安全实现单例模式

&#x1f4c4;前言&#xff1a;本文是对经典设计模式之一——单例模式的介绍并讨论单例模式的具体实现方法。 文章目录 一. 什么是单例模式二. 实现单例模式1. 饿汉式2. 懒汉式2.1 懒汉式实现单例模式的优化&#xff08;一&#xff09;2.2 懒汉式实现单例模式的优化&#xff08…

仿真机器人-深度学习CV和激光雷达感知(项目2)day04【简单例程】

文章目录 前言简单例程运行小海龟仿真启动节点查看计算图发布 Topic调用 Serviece 用 Python 发布和接收 Topic创建工作空间创建功能包&#xff0c;编译编写 Topic Publisher 节点编写 Topic Subscriber 节点运行节点 自定义消息类型用 Python 注册和调用 Serviece新建功能包在…

【若依】关于对象查询list返回,进行业务处理以后的分页问题

1、查询对象Jglkq返回 list&#xff0c;对 list 进行业务处理后返回&#xff0c;但分页出现问题。 /*** 嫁功率考勤查询*/RequiresPermissions("hr:kq:list")PostMapping("/list")ResponseBodypublic TableDataInfo list(Jglkq jglkq) throws ParseExcepti…

Spring基于dynamic-datasource实现MySQL多数据源

目录 多数据源实现 引入依赖 yml配置文件 业务代码 案例演示 多数据源实现 引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>dynamicdatasourcespringbootstarter</artifactId><version>3.5.0</version> &…

[Python] glob内置模块介绍和使用场景(案例)

Unix glob是一种用于匹配文件路径的模式&#xff0c;它可以帮助我们快速地找到符合特定规则的文件。在本文中&#xff0c;我们将介绍glob的基本概念、使用方法以及一些实际应用案例。 glob介绍 Glob(Global Match)是Unix和类Unix系统中的一种文件名扩展功能&#xff0c;它可以…