文件上传之,waf绕过(24)

上传参数名解析:明确哪些东西可以修改

content-disposition:一般可更改    表单的数据 

name:表单参数值,不能更改    表单提交的值

filename:文件名,可以修改    上传的文件名

content-type:文件mime,视情况修改   上传文件名自带的参数类型

mime可以作为一个验证条件,验证mime来判断你个文件一个合法性的时候,可以通过更改mime来达到一个伪造,比如上传一个php文件,这时候可以更改为图片类来尝试绕过mime验证。

waf验证判断形势,主要是这样的一种形式是判断,检测文件里面的代码,如果代码立马有后门代码检测到会拦截,这个代码怎么编译绕过是后面要学的,我们只讲文件上传所以这里先不管它,文件上传一般检测的都是这种有参数后面有数据的,四个参数值比较关键的是filename,文件名,文件名里面包含了文件的后缀。

前期upload第二关的时候,判断的方式就是mime的类型的绕过,绕过miem是图片类型就可以上传,没有验证后缀,这是代码的判断,我们在来探针一下防护软件是怎么判断的,现在第二关上传一个图片上去,抓住数据包,mime满足就可以上传,所以把上传的文件名字改成php格式,本来这是可以正常上传成功的

但是由于安全狗的原因被拦截了。改了之后php之后不能上传,所以他对那个文件名后缀绝对是有一个检测的,

 安全狗这里就有php后缀检测,所以拦截。绕过方法,就是检测不到这个php,要么换一个脚本类型能执行出php,最终目的都是能执行出脚本的后缀,php只是一种,asp也可以,因为这个网站是php所以php作为演示。

两只思路,第一种是让他检测不到成功上传一个可以执行出php的权利,尝试一下猜想,在中间加上一个空格ph p,返回源代码没有那个安全狗关键词了,文件也成功上传了,但这个文件又不可以直接访问了,因为多了一个空格之后,访问网站就显示成

 两个浏览器访问返回结果,这样子上传也还是张图片,没有当作脚本,没有执行出来脚本,也不可以。

之前绕过是在php后面加上点和空格,现在这样上传,安全狗还是拦截了。

常见绕过方法

数据溢出,放匹配的

这个原理借助的溢出漏洞,这是老师自己取的名字,就比如让你在一万个人里面找一个人,几率很小,我们把这个数据搞大,让程序去一个一个匹配也是这样,它不会排除就挨个去匹配,数据太多了,程序会停止或者崩溃,数据溢出就是用的这个方法,因为他匹配的就是名字,所以在后缀名之前名字开始溢出比较好,乱写一堆一直重复,

 apache服务被迫停止工作,但是数据太多了,数据包没有发出去,所以这文件名那个地方不要去搞,

 换一种思路,写道filename前面来,因为他会慢慢检测吗,先检测上面的content-disposition,在往下检测,检测filenam的起那么加上一堆垃圾数据,

 这样子上传成功了但是文件了没有,这个是什么原因造成的, 

 这样子在filename前面加上aa.jpg乱码绕过,但是上传的是一个aa.jpg。

再换一个地方写垃圾数据,

 写到这个name前面来,注意垃圾数据的结尾要写一个;,然后可以该修改的fielname更改为x.php,然后写够垃圾数据到不拦截看结果

 上传成功了

注意  结尾一定要加上个;,不然上传不成功。

学前面的知识为了不会乱插入,插入到不该插入大地方去,比如name:表单参数值,不能更改

第二种  符合变异,放匹配("  '   ;)

抓住数据包,数据包里面的符合都是有讲究的,冒号就代表的后面是值,分号加上结尾了一对一。

而name="file_upload",这个呢是数据包自带的冒号里面代表的是可以更改的不固定的, filename="1.gif 这个里面的值是可以更改的所以是双引号,基本程序开发里面都有单引号双引号,都可以,这是第一个可以变化的地方。

第二个是分号,他代表一个语句的结束,

 而这个最后面没有分号,意思就是截止了,如果后面有分号就表示可能还有。

这里我们的绕过思路,先把jpg换成php格式,现在最好加上分号加一堆乱码试试能不能绕过,并不能,再把括住php的双引号改成单引号试试,说不定安全狗加上针对的双引号,试一下也不行。

这里在去掉后面的一个双引号只留下前面的双引号,就不闭合了,这样子就会把 "  当作filenme的值,而不是后面的qq.php,安全狗匹配的时候,我们猜他只匹配双引号里面的,他要去匹配的话就只有三种情况,第一种是"qq.php,第二种是比较只能的他不管引号问题,还是直接匹配 qq.php,第三种它不知道该匹配谁就没有匹配,具体出现哪一种,还需要具体测试,如果是第三种就能实现绕过,  

这个方法上传成功了,那么它就是第三种。这是因为安全狗在后面找另一个双引号,但是它找不到,所以就没有匹配。把两个双引号都去掉也可以绕过,安全狗现在是什么匹配机制,就是单引号双引号里面的东西,不写就能上传成功。相当于没有接收到。

但是如果在去掉前面的双引号留下后面的,还是会被拦截,所以在老师那个版本的时候,安全狗的拦截规则应该就是找最后的一个双引号,然后把前面的东西取出来匹配。

所以还可以写成"x"x.php,这样子也会上传成功,上传一个x.php的文件。

第三种,数据截断-防匹配(%00;换行)

开始思路

这个我们数据包上,恢复到最初的命名,在双引号里面改成x.php%00.jpg,这里%00要进行一下url编码,不然上传到网站服务器,网站识别不出来%00是截断都意思,得编码成网站可以识别的url格式,因为安全狗也是程序,所以程序在读取到这里的时候截断符合,会不会也截断,这里上传试一下,不行。我们验证一下会不会截断,换成x.jpg%00.php 上传上传,上传成功了一个x.jpg的文件,安全狗截断了。

我们在试试x.php;%00.jpg,这里上传成功了一个x.php;  不知道可不可以执行,再换一个

x.php %00.jpg,在后面加上一个空格,上传被拦截了,我们在加上::$$DATA  ,x.php::$$DATA  %00.jpg ,试试可不可以上传成功,也不可以。

那上传一个x.php;.jpg。文件试试,上传成功了不过是图片格式文件,那换成x.jpg;php,也上传成功了还是当作php格式执行,写:就不行,这个就是安全狗,语句分号就当作结束了,所以后面的.php就没有匹配到,而数据包又把它当作正常的命名执行了,就会以最后的.php,文件执行。

换行

 这个就是很明显在php,直接换行,而在程序里面的换行后面会自动跟着一个/n,安全狗在识别的时候就识别成x.p\nh\np,所以不会拦截,上传成功了

数据包识别这种写法,但是安全狗在匹配的时候就被/n给干扰了,

怎么样都可以,全换行了数据包也能识别。

重复匹配

安全狗是匹配的filename,我们可以把filename写多一点,

这里先写两个jpg文件,第一个叫x第二个叫y,结尾加上;,表示结束。上传测试一下以那一个filename为准,上传的结果是y上传上去了,所以是以最后一个filename值为准。这也算一种递归循环,比如之前说过的php过滤一次,那些文件后缀写成pphphp,过滤一个php,刚刚好就是给php文件。

既然这里知道是以最后一个为准,那我前面写多少个filename值都无所谓了,就写多一点,和垃圾数据溢出很像但不是垃圾数据溢出,这是让他一直匹配,匹配到崩溃不管了都过去吧,最后写一个php的后缀文件,上传一下看看成功了,

 这里我们还可以

把前面的值复制到filenam里面来,这样子安全狗在匹配的时候,先匹配content,正常继续匹配,匹配filename里面又匹配到了content,后面看到name的值等于upload,安全狗在匹配到content相当于把前面忽略不计了,就忘了前面是filename的值,而误认为x.php,没有值给他的,没有给参数,所以就相当于绕过,但是在数据包里filename的值还是等于x.php,上传成功

这就是典型的重复数据,把数据自带的正常的数据写道filename里面去,实现x.php,给他绕过。

 把下面的值写进filename里面也不影响,不过是在后面加了一个分号;   

 上传成功了,只是名字有点不一样,但是php文件就可以。安全狗匹配到分号以为就结尾了。不匹配后面。

 

这里发现一个机遇/也可以绕过。 

测试还要一个思路解释fuzz

在百度搜索fuzz web字典     fuzzdb  都可以搜到字典

下载好一个字典,放在自己可以找到目录地方

因为刚刚测试网站是上传个php,所以我们用php的字典,打开看一下它的源码

 字典里面就写了很多种,可以支持php文件解析的后缀上传,该如何测试,把数据表发送到这个模式下

 把它作为条件去变化

 

找好路径,选择和字典

 

 数据包不能过大,过大安全狗会封主本地ip,

然后这样开始测试。

这种就是用工具去跑,我们称之为    fuzz模糊测试

最后一个知识点

安全修复

如何写出一个安全的验证形式呢,要从她的验证方式做文章,

后端验证:采用服务端验证模式    尽量不采用前端验证

后缀检测:基于黑白名单过滤    双重验证都用上

MIME检测:基于上传自带类型检测

内容检测:文件头,完整性检测

用三种更加安全,检测miem,又检查内容,

自带函数过滤:参考uploads函数

自定义函数过滤:function check_file(){}

waf防护产品:宝塔,云盾,安全公司产品等

 和一个函数get_image_pointeerl,这个只接受图片信息,就定死了必须上传一个图片上来,

对方有上传漏洞才能进行上传绕过,如果没有上传漏洞就只能上传个图片没有上面用,没有办法能判断有没有上传漏洞,因为在测试的时候就可能被waf拦截了,只能硬着头去绕过,先绕过了才能判断有没有。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库索引结构(1)概念

常见的索引 主键和二级索引 MySQL学习笔记-主键索引和二级索引_mysql中主键索引和二级索引的区别_爱因诗贤的博客-CSDN博客 MYSQL-主键索引与二级索引_mysql二级索引存在哪个文件_青苔小榭的博客-CSDN博客 采用主键索引的好处:如果元素的位置发生修改,那…

【随笔记】全志 T507 PF4 引脚无法被正常设置为中断模式的问题分析

相关信息 硬件平台:全志T507 系统版本:Android 10 / Linux 4.9.170 问题描述:PF4 无法通过标准接口设置为中断模式,而 PF1、PF2、PF3、PF5 正常可用。 分析过程 一开始以为是引脚被其它驱动占用引起,或者该引脚不具…

Mybatis中处理特殊SQL处理逻辑

文章目录 0、前言1、模糊查询2、动态表名3、获取自增的组件4、批量删除 0、前言 在MyBatis中可能会有一些特殊的SQL需要去执行,一般就是模糊查询、批量删除、动态设置表名、添加功能获取自增的主键这几种,现在分别来进行说明。 为了方便演示 &#xff0…

OA管理痛点解决:从“硬编码”到“低代码”

低代码开发平台是一种逐渐流行起来的软件开发方式,它可以以快速且简单的方式构建各种应用程序,从而帮助企业快速响应市场变化和满足不断变化的业务需求。在企业的日常管理工作中,OA系统是一种非常常见的应用程序,它可以帮助企业管…

C++每日一练:饿龙咆哮-逃离城堡(避坑指南)非负整数求和

文章目录 前言一、题目二、解题代码及思路1、思路2、代码 三、非负整数求和总结 前言 饿龙这一题要说难度嘛,还真是挺简单的,但要满分也是有坑的!本文就记录了笔者解题过程,希望能对读者使用C编程有所启发。至于非负整数求和代码…

redis高级篇三(分片集群)

一)进行测试Sentinel池: 集群的定义:所谓的集群,就是通过增加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态 之前的哨兵模式是存在着一些问题的,因为如果主节点挂了,那么sentinel集群会选举新的s…

斯坦福、Nautilus Chain等联合主办的 Hackathon 活动,现已接受报名

由 Stanford Blockchain Accelerator、Zebec Protocol、 Nautilus Chain、Rootz Lab 共同主办的黑客松活动,现已接受优秀项目提交参赛申请。 在加密行业发展早期,密码极客们就始终在对区块链世界基础设施,在发展方向的无限可能性进行探索。而…

如何用Python进行屏幕录制?

文章目录 引言gpt3.5给出的代码更换截图函数——ImageGrab.grab禁用imshow解决递归现象摄像头录制代码后期需求 引言 关于屏幕录制这个功能需求,之前用过基于ffmpeg的Capture录屏软件,但是fps拉高以后会变得很卡,声音也同样出现卡顿。也自己…

nodej+vues汽车销售4s店服务平台商城系统购物车积分兑换7z9d2

在经济快速发展的带动下,汽车服务平台的发展也是越来越快速。用户对汽车服务信息的获取需求很大。在互联网飞速发展的今天,制作一个汽车服务平台系统是非常必要的。本系统是借鉴其他人的开发基础上,用MySQL数据库和nodejs定制了汽车服务平台系…

【MySQL】事务

事务是一组操作的集合,我们将一组操作视为一个整体,所以事务里面的操作的时候要么同时成功,要么同时失败,之所以会有事务也是因为我们在实际生活中会用到 最典型的例子就是转账操作:A向B进行转账,A这边扣款成功的同时B那边一定是收款成功的,如果没有事务的话就会出现A扣款成功但…

LMS,RGB,XYZ色彩空间转换

前言 首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R,G,B,而是波长分别为700nm,546.1nm,435.8nm的单色红光,单色绿光,单色蓝光。sRGB中的RGB中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB…

网络安全里的主要岗位有哪些?小白如何快速入门?

入门Web安全、安卓安全、二进制安全、工控安全还是智能硬件安全等等,每个不同的领域要掌握的技能也不同。 当然入门Web安全相对难度较低,也是很多人的首选。主要还是看自己的兴趣方向吧。 本文就以下几个问题来说明网络安全大致学习过程👇 网…

SpringCloud微服务调用方式(RestTemplate)

服务调用方式 RPC和HTTP 无论是微服务还是SOA,都面临着服务间的远程调用。那么服务间的远程调用方式有哪些呢? 常见的远程调用方式有以下2种: RPC:Remote Produce Call远程过程调用,类似的还有 。自定义数据格式&am…

learn C++ NO.4 ——类和对象(2)

1.类的6个默认成员函数 1.1.默认成员函数的概念 在 C 中,如果没有显式定义类的构造函数、析构函数、拷贝构造函数和赋值运算符重载函数,编译器会自动生成这些函数,这些函数被称为默认成员函数。 class Date { };初步了解了默认成员函数&am…

STL-常用算法(二.拷贝 替换 算术 集合)

开篇先附上STL-常用算法(一)的链接 STL-常用算法(一.遍历 查找 排序)_小梁今天敲代码了吗的博客-CSDN博客 目录 常用拷贝和替换算法: copy函数示例:(将v1容器中的元素复制给v2) replace函数示例&#…

Java 9 - 18 各个版本新特性总结

【 Java 9 - 18 各个版本新特性总结,B站视频介绍】https://www.bilibili.com/video/BV1PT411P7Wn?vd_source5a3a58ca0e99223ffb58cddf2f3a7282 一、模块化引入 模块是 Java 9 中新增的一个组件,可以简单理解为是package的上级容器,是多个pa…

gitlab建立新分支提交,cherry-pick部分更新

gitlab介绍 GitLab是一个基于Git的在线代码托管和协作平台,提供源代码管理、单元测试、CI/CD构建、代码审查等功能。它是一个开放源代码的Git仓库管理系统,使用 Ruby on Rails 构建GitLab 不仅具有自己的 Git 仓库管理系统,还具有很多其他的…

网络协议与攻击模拟-11-DHCP协议原理

DHCP 协议 1、掌握 DHCP 的工作原理 2、会在 Windows server 上去部署 DHCP 服务 3、抓流量 .正常 收到攻击后 一、 DHCP 1、 DHCP 基本概念 dhcp (动态主机配置协议):主要就是给客户机提供 TCP / IP 参数( IP 地…

App外包开发上线Google Play流程

完成App开发后需要在各大应用市场上线,国内的应用市场比较多,各自的规则也不相同,上线审核也比较复杂;国外上线主要是Google Play市场,它更重视隐私的保护,必须严格按照规范来保护个人隐私,因此…

【C++】模板的一点简单介绍

模板 前言泛型编程函数模板概念格式函数模板的原理函数模板的实例化 类模板类模板的定义格式类模板的实例化 前言 这篇博客讲的是模板的一些基本知识,并没有那么深入,但是如果你是为了过期末考试而搜的这篇博客,我觉得下面讲的是够了的。 之…