上传漏洞,后端黑白名单绕过(21)

news2024/11/26 20:45:50

文件上传常见的验证,:后缀名,类型,文件头等 

后缀名指的是白名单和黑名单

文件类型:mime的信息

文件头:内容头信息

我们一个一个来说,这个后缀名,大部分可以上传的对方都不允许脚本格式的上传,对方的代码判断的,直接查看文件名后缀,间接的通过类型和文件头去判断。

后缀名又分为黑名单和白名单,黑名单指的是,明确不允许上传的脚本格式,如asp,php,jsp,aspx,cgi,war等。意思:除了这些黑名单里面的都可以上传。假如对方是黑名单的验证,如果格式有记录不全, 假如还有一个格式可以执行出php的效果,比如php5,phtml,像这种格式有一定几率看当前搭建平台是否支持,支持的话就可以执行出来php的代码效果,看情况来。有这么一个缺陷,

白名单呢,明确可以上传的格式,jpg,png,zip,rar,gif。。。。等,意思:除了白名单里面的都不可以上传。白名单相对安全,我们只能上传这些格式,这是后缀名最基本的验证。

文件类型验证,mime信息指的是上传相关文件的时候,文件会自带一个信息。

 这个后门的值的就是mime的值,换一个文件上传,所产生的值都不一样,通过这个值就能判断你是什么文件类型,gif值的最后面就显示gif,是png就显示png,这种验证方式也是很好绕过的,

 假如他是对这种类型验证,

 这就自己去手动伪造一个格式,就伪造成了jpg的格式,可以绕过的。

文件头,就是文件头信息,找一张图片打开源码格式,

png的前缀是这个东西,所有png的前缀都是这个 gif的前缀是这个东西,所有gif都是这个。

绕过文件上传采用这种验证的话,很不严谨,头部信息可以通过更改这个头部的信息,让对方认定为是可以通过的格式比如图片格式啊,这种来绕过。

接下来的学习需要会看源码,所有现在我们去学学怎么看源码,

老师再写一个表单,来讲解一下

 upload_file的就是接受文件上传数据的值。这个全部解释起来接受,表单提交的数据会以upload_file的值提交到php的格式上来,上面接受的上传数据接受他,name值也是他,然后把文件名字输出,

 修改一下源码,就能实习输出别的

 这里是都输出来的就不截图演示了,

如果要进行过滤的话,就这样子,如果不是后面跟着要求值,后面在添加一些过滤代码和显示报错,来一起执行。

看一下upload第二关的代码

 如果不等于就提出上传出错,

 如果返回值是正常的就提示正确啦,这个我们只需要修改值让他们对应上,我们就能实现绕过。

第二关就是个很明显的mime验证,我们上传一个php的脚本代码,把文件提交时的数据包抓住把mime信息改成图片格式的信息然后提交上去,就可以了文件就上传上去了。

第三关也直接看代码,

 最上面两行加上判断是否鼠标点击,下面是目录。

第一行,deny 拒绝,ext后缀名解析,array数组,拒绝后缀名是.asp,.aspx,.php,.jsp格式的文件

第二行,trim,绕过上传的这个文件有空格就会把这个空格去除掉。file加上上传文件的名字

第三行,把文件名里面多余的点删除避免,x.php.jpg.jsp,

第四行,strrchr,查找字符在字符串中最后一次出现的位置,并从这个位置删除之前的所有字符。

图中找到点出现的最后一位置,删除这个点之前的所有字符。

第五行,强制把字符串转换为小写。

第六行,str_ireplace,替换,把::SDTAT替换为空格 ,替换的目标是file_ext。

第七行,最后在进行一次空格过滤。去除尾部的空格。

 第一行的意思如果你不在file_ext   deny_ext的值里面(有个感叹号所有是不在),就上传,否则就上传失败, 这就是明显的黑名单。

这个就可能会通过php3,php5,phphtml的格式提交通过了,然后上传成功,前提是网站配置平台开了那种格式,如果没有开还是提交不成功。

第四关

第四关的考点是,htaccess解析,是网站搭建普通,前提是apache的服务器,apache作为伪静态的说明,htaccess经常会做伪静态的转换,他就是.apache的配置文件,这个文件会涉及到网站脚本文件解析的一个规则,所以我们就可以通过这个文件,来实现解析的自定义。

就可以直接在网搜htaccess  上传漏洞,这时候就需要复制一下网站提供的代码然后自己写到一个文件里面,

这个代码的意思,如果文件名字带 cimer,就解析成x-httpd-php的,这个就是mime的格式,就用这个mime格式去执行,这个.htaccess就会生效,这个过滤文件里面没有过滤.htaccess格式的,所以能上传成功,目录文件就会以.htaccess目录为准,然后上传一个文件名里面有cimer的可以上传成功的格式,之后再去访问上传成功的文件全名

 执行成功了。

第五关

 代码过滤了超级多,虽然它的代码超级多,但是有一个问题,他没有强制转换为小写,这一关就上传一个PHp大小写混合的绕过就行,能上传上去,并且执行。

第六关

过滤也是超级多,跟第二关对比少了一行收尾去掉空格的代码,最后一次空格过滤,这个也很简单,上传文件的时候,抓住数据包,在数据包里面的,就在文件的最后加上一个空格就能上传成功了,然后在放包出去,如果来黑名单的限制,就能上传成功。

为了绕过加了个空格,但是上传到对方网站之后会强制把空格去掉,就还原成了php格式。

第七关,

第七关的代码跟第二关的代码对比就少了一行,去掉末尾的点

这关绕过呢,先上传给带php脚本文件,然后抓住数据包,在数据包里面在文件名最后加一个点. 然后发送出去,就上传成功了,因为后缀名的不允许到对方网站上就被强制转换php的文件了。

第八关,

第八关的代码跟第二关的代码对比就少了一行,去除字符串::DATA,

必须是Windows必须是php,然后后缀名加上::DATA,会把这个之后的当作文件名处理就不会当作后缀名处理,又能保持之前的文件名。

直接上传一个php的代码,抓住数据包,在数据包里面找到文件的后缀名加上::DATA,任何放出数据包,就上传成功了,。这些绕过方式都是基于黑名单的绕过。

第九关

代码和第二关的代码差不多,这个涉及到了代码里面的递归循环,我举个简单的例子,我过滤你的php,替换为空,他会有缺陷,代码编写者的习惯问题,有的会写一个循环,有的会写一次过滤,一次过滤就只过滤一个php,比如a.phpphp  过滤玩a.php。循环过滤更安全。因为他都是执行的一次,所以在抓到数据包之后,把数据包的后缀名改成php. .,后面加上点空格点,去除一个空格去除一个点,剩下php.  ,刚刚好不在黑名单可以绕过,就上传成功了。

第十关,

代码分析和第几关的差不多,不过是把禁止的格式替换为空格,比如出现php格式替换为空格,但是他是一次过滤,所以抓住数据包,任何把后缀名改成pphphp,他检测到替换掉一个为空格,就变成了p hp 成功绕过。

第十一关,

第十一关就是白名单了,源码展示

 第一行呢就是白名单,只允许上传的格式

第二行,是一个循环,验证这个命名里面也没有多个点,+1相当于循环,把多个点取出来,只留下最后一个点,防止多个点绕过。

我们这一关运用到的方法,叫00阶段。

 第一行呢,这个代码就会把传过来的参数,后面加上随即命名,取格式是取到变量fiel_ext的格式,那个格式是jpg,就在参数后面加个jpg的格式后缀,参数就变成了第三行,但是%00的意思是截断,相当与后面的东西没有了,就相当于保存了个1.php的文件。所有这个在数据表里面修改成​​​​​​​

箭头指的地方是上传保存路径, 就在这里修改为1.php%00。最后数据就会上传到1.php里面就可以用这个文件执行成功代码。

%00截断需要apache版本小于5.3

第十二关

代码也是个白名单,这个代码和十一关相对比就是提交方式不同,他是post,他的数据包格式就跟get提交方式不一样,这个要找到post提交数据的地方

 然后修改成为,x.php后面跟个url编码后的%00,就可以实现绕过,上传x.phpd的文件上去。

因为get会自动解码,会把%00解码处理,而post就不会,所以需要先变成url编码的%00,否则上传到对方网站是不会解码成网站可以识别的字符串,所以需要在数据包里面就编码成网站可以识别的字符串。

 

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

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

相关文章

【TCP/IP】TCP报文段的首部格式和流量控制

TCP 报文段的首部格式 TCP 虽然是面向字节流的,但其传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而 TCP 的全部功能的体现在它首部中各字段的作用。 因此,弄清 TCP 报文段首部各字段的作用对掌握 TCP 的工作原理非常重要。…

排查jacoco覆盖率对反射问题的影响

最近业务部门开始推行,在全部后台应用中自动开启覆盖率测试。然而,不久后就有业务测试的同学反馈出现问题。 问题的现象如下: 我们的业务通过 HTTP 调用腾讯OSS的服务,结果得到了以上的报错信息。测试同学验证后发现&#xff0c…

【RocketMQ】004-Spring Boot 集成 RocketMQ

【RocketMQ】004-Spring Boot 集成 RocketMQ 文章目录 【RocketMQ】004-Spring Boot 集成 RocketMQ一、基本使用1、创建 Spring Boot 项目,并引入 RocketMQ 依赖2、application.yml 配置3、消息生产者4、消息消费者5、消息调用接口6、启动 RocketMQ7、启动项目&…

(1)LED

LED正负极:大红旗——负极,小红旗——正极 如何看原理图电阻/电容值: eg: 102 10 2 10 * 10 ^ 2 1000 473 47 3 47 * 10 ^ 3 47000单片机使用TTL电频:高电平(逻辑1)5V 低电平&#xff…

C语言操作符详解(上)

C语言操作符详解&#xff08;上&#xff09; 前言1. 算术操作符2. 移位操作符2.1 左移操作符(<<)2.2 右移操作符&#xff08;>>&#xff09; 3. 位操作符3.1 按位与&#xff08;&&#xff09;3.2 按位或&#xff08;|&#xff09;3.4 按位异或&#xff08;^&am…

(4)定时器

51单片机的定时器属于单片机的内部资源&#xff0c;其电路的连接和运转均在单片机内部完成 作用&#xff1a; 用于计时系统替代长时间Delay&#xff0c;提高运行效率和速度任务切换 STC89C52定时器资源&#xff1a; 定时器个数&#xff1a;3个&#xff08;T0,T1,T2&#xf…

【MySQL】MySQL 运算符

目录 一、运算符简述 二、运算符使用 1.算术运算符 1.1 加法运算符 1.2 减法运算符 1.3 乘法与除法运算符 1.4 求模&#xff08;求余&#xff09;运算符 2.比较运算符 2.1 等号运算符 2.2 安全等于运算符 2.3 不等于运算符 2.4 空运算符 2.5 非空运算符 2.6 最小…

深度剖析Mybatis-plus Injector SQL注入器

背景 在项目中需要同时操作Sql Server 以及 MySQL 数据库&#xff0c;可能平时直接使用 BaseMapper中提供的方法习惯 了&#xff0c;不用的话总感觉影响开发效率&#xff0c;但是两个数据库的SQL语法稍微有点差别&#xff0c;有些暴露的方法并不能直接使用&#xff0c;所以便想…

WebSocket的那些事(3-STOMP实操篇)

目录 一、序言二、STOMP详解1、STOMP简单介绍2、STOMP协议内容3、使用STOMP的好处 三、代码示例1、Maven依赖2、开启WebSocket消息代理3、控制器4、前端页面greeting.html 四、测试1、连接服务端2、发送消息 五、STOMP消息传播流程六、结语 一、序言 上节中我们在 WebSocket的…

(11)LCD1602液晶显示屏

LCD1602&#xff08;Liquid Crystal Display&#xff09;液晶显示屏是一种字符型液晶显示模块&#xff0c;可以显示ASCII码的标准字符和其它的一些内置特殊字符&#xff0c;还可以有8个自定义字符&#xff0c;自带芯片扫描 显示容量&#xff1a;162个字符&#xff0c;每个字符…

【C++】STL六大组件简介

STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 1.STL的版本介绍 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本&#xff…

Unity里面CG和HLSL在写法上的一些区别

大家好&#xff0c;我是阿赵。这里继续讲URP相关的内容。 这次想讲的是CG和HLSL在写法上的一些区别。 一、为什么开始用HLSL 首先&#xff0c;基本上大家都知道的事情再说一遍。 三种Shader编程语言&#xff1a; 1、基于OpenGL的OpenGL Shading Language&#xff0c;缩写GLSL…

接口测试中postman环境和用例集

postman的环境使用 postman里有环境的设置&#xff0c;就是我们常说的用变量代替一个固定的值&#xff0c;这样做的好处是可以切换不同的域名、不同的环境变量&#xff0c;不同的线上线下账户等等场景。下面就看下怎么用吧。 创建一个Environment postman有一个envrionment&am…

Java是如何实现双亲委托机制的

Java 是一种面向对象的编程语言&#xff0c;它有一套独特的类加载机制。其中&#xff0c;双亲委托加载机制是 Java 类加载机制中的一个重要概念。本文将介绍 Java 的双亲委托加载机制是如何实现的&#xff0c;并解释其作用和优点。 Java 类加载机制 在 Java 中&#xff0c;类的…

瀑布流组件陷入商品重复怪圈?我是如何用心一解的!

目录 背景 瀑布流组件 什么是瀑布流组件 如何实现一个瀑布流组件 商品重复的原因 解决方案 方法一&#xff08;复杂&#xff0c;不推荐&#xff09;&#xff1a;标记位大法 方法二&#xff08;优雅&#xff0c;推荐&#xff09;&#xff1a;Promise 队列 大法 总结 背…

解决新思路#报错:ping: www.baidu.com: 未知的名称或服务--照着步骤来还是ping不通的可能原因

最近由ubantu转为centos7,配置hadoop&#xff0c;配置静态ip的过程中一直ping不通。之前配置ubantu的也是&#xff0c;终于这次在重启虚拟机和主机后发现了原因。 中途尝试过: 1.三次以上命令行反复操作 2.图形界面设置 3.看是否主机的网络适配器的网关与设置的IP地址产生冲突…

JavaScript实现计算100之间能被5整除的数的代码

以下为实现计算100之间能被5整除的数的程序代码和运行截图 目录 前言 一、计算100之间能被5整除的数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本博文代码可以根据题…

2023最新100道渗透测试面试题(附答案)

眨眼间2023年快过去一半了&#xff0c;不知道大家有没有找到心仪的工作呀&#xff0c;今天我给大家整理了100道渗透测试面试题给大家&#xff0c;需要答案的话可以在评论区给我留言哦~ 第一套渗透面试题 什么是渗透测试&#xff1f;它的目的是什么&#xff1f; 渗透测试的五个…

DirectX12 简单入门(一)

在很久以前写过关于DirectX9的一些应用&#xff0c;直到现在DirectX12已经普及了。写完几个DirectX12测试代码之后&#xff0c;写一篇DirectX12简单入门介绍一下基本概念&#xff0c;以及环境搭建和编程过程。 编程环境 与DirectX9不同&#xff0c;在DirectX12开发中微软将需…

『MySQL 实战 45 讲』“order by” 是怎么工作的

“order by” 是怎么工作的 首先创建一个表 CREATE TABLE t ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL, addr varchar(128) DEFAULT NULL, PRIMARY KEY (id), KEY city (city) ) ENGINEInnoDB;全字段排序 在 cit…