文件上传技术总结

ops/2024/9/23 14:28:44/

文件上传技术总结

XMindChEPTpEere4pPp3.8h2试用要式Sa44十年.听元汽狂节产方生左车析上传ItaorFSs改文件解行方式方利!xP打统学/麻x绿部成I足让tAD.coENLRCoiD中国汽的折时语言特性+系统特性+中间件化析漏逅CVE-2015-444.ter1.jpo1寄户端文件上传漏洞绕过MIME过3083省rd0文大小个服务端Pirdows下ADs艺特.上irdow下SRCIU电29L一大小上都雨<a class=文件上传漏洞绕过.png" />

语言可解析的后缀

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

AddHandler application/x-httpd-php .php

img

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

其中:

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进行自动解码,所以先添加一个+号,

img

然后找到2b

img

使用0x00截断

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

img

文件头检查

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

img

img

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

img

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

img

二次渲染

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

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

img

上传后,发现马子不见了

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

img

.htaccess绕过

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

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

img

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

<FilesMatch “2.jpg”>

SetHandler application/x-httpd-php

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

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

SetHandler application/x-httpd-php

Apache解析漏洞

一:

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

例如:

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

img

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

img

二:

Apache多后缀解析

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

AddHandler application/x-httpd-php .php

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

img

影响版本Apache 1.x和Apache 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.ppmy.cn/ops/9391.html

相关文章

TCP练习

#include <mystdio.h> #define PORT 8888 #define IP "192.168.124.18" int main(int argc, const char *argv[]) { //创建流式套接字文件 int sfd socket(AF_INET,SOCK_STREAM,0); if(sfd < 0) { perror("socket"); …

实测14us,Linux-RT实时性能及开发案例分享—基于全志T507-H国产平台

本文带来的是基于全志T507-H&#xff08;硬件平台&#xff1a;创龙科技TLT507-EVM评估板&#xff09;&#xff0c;Linux-RT内核的硬件GPIO输入和输出实时性测试及应用开发案例的分享。本次演示的开发环境如下&#xff1a; Windows开发环境&#xff1a;Windows 7 64bit、Window…

Linux基本命令之正则表达式(转义字符)

一&#xff1a;查看二进制文件 strings 命令&#xff1a;strings 文件名 生成链接文件 ln 命令&#xff1a;ln 选项 源文件(f1) 链接文件&#xff08;f2&#xff09; 软连接&#xff1a;eg:ln -s f1 f2 软链接不能跨分区链接&#xff0c;但可以在同一分区的不同目录下链接…

YOLOv8-PySide --- 基于 ultralytics 8.1.0 发行版优化 | 代码已开源

YOLOv8-PySide — 基于 ultralytics 8.1.0 发行版优化 Github 项目地址&#xff1a;https://github.com/WangQvQ/Ultralytics-PySide6 BiliBili视频地址&#xff1a;https://www.bilibili.com/video 页面效果 如何使用 pip install ultralytics8.1.0 or git clone --branch v…

【IO流】字符流和字节流

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 Java的IO流是Java中处理输入和输出的重要机制。IO流按照数据流的方向分为输入流和输出流&#xff0c; 按照处理数据的单位分为字节流和字符流。 1. 字节流&#xff…

MinIO + Prometheus + Grafana docker部署

文章目录 说明MinIO简介MinIO 容器化部署Prometheus服务地址配置方法一&#xff1a;先部署后修改方法二&#xff1a;部署时修改compose文件&#xff08;未验证&#xff09; MinIO Access Key配置Prometheus 容器化部署MinIO 生成抓取配置修改Prometheus配置文件Grafana 容器化部…

Cargo 使用教程

什么是 Cargo&#xff1f; Cargo 是 Rust 的构建系统和包管理器&#xff0c;它提供了创建项目、编译代码、管理依赖和发布包等功能。使用 Cargo&#xff0c;你可以轻松地构建 Rust 程序&#xff0c;而不必深入了解底层的构建细节。 安装 Cargo 在开始之前&#xff0c;确保你…

【C语言】strstr函数刨析-----字符串查找

目录 一、strstr 函数介绍 ✨函数头文件&#xff1a; ✨函数原型&#xff1a; ✨函数解读 ✨功能演示 二、函数的原理以及模拟实现 ✨函数原理 ✨函数的模拟实现 三、strstr函数的注意事项 四、共勉 一、strstr 函数介绍 strstr函数是在一个字符串中查找另一个字符…