24 WEB漏洞-文件上传之WAF绕过及安全修复
目录
- WAF绕过
- 上传参数名解析:明确哪些东西能修改?
- 常见绕过方法:
- `符号变异-防匹配(' " ;)`
- 数据截断-防匹配(%00 ; 换行)
- 重复数据-防匹配(参数多次)
- 搜索引擎搜索fuzz web字典
- 文件上传安全修复方案
WAF绕过
safedog
BT(宝塔)
XXX云盾
宝塔过滤的比安全狗厉害一些,在真实情况下现在很多网站都是用宝塔
上传参数名解析:明确哪些东西能修改?
Content-Disposition: 表单数据,一般可更改
name:表单参数值,不能更改,改完之后,数据包是有问题的,跟前端的表单值会对不上,这样后端会无法判断你上传的地方,如果要更改,那前端得跟着一起更改
Filename:文件名,可以更改,但是更改的意义不大
Content-Type:文件MIME,视情况更改,如果对方是mime判断的话,修改之后可以达到绕过,那如果对方不是的话,那更改的意义就不是很大了
防护软件通过数据包文件里面的代码(用我们记事本打开看到的文件代码)里面是否存在后门判断出我们上传的数据包有问题,从而进行拦截的
代码的变异是我们后面要学习的,我们这篇文章现在不讲它
检测有参数值的,后面有数据的,其中文件名是比较关键的,如果后缀写成.php的,那绝对会被检测到。它拦截你就是检测到你php的关键字
我们常规的绕过思路,就是让他检测不到php,要么就是换一个脚本类型,然后这个脚本类型能够执行出php,两个方法都行,因为我们最终目的是让这个文件执行出脚本的后缀。
采用ph p去绕过,是可以成功的,但是不会被后台当成一个脚本去执行,这样子也是不行的
我们可以使用php. 、php 去绕过,最后发现被安全狗给拦截了。
常见绕过方法:
数据溢出-防匹配(xxx…)
把数据搞大,数据量过多的话,程序会按照程序的写法去里面找,但是数据太多了,程序也会有崩溃,或者匹配了多少条之后,他就找不下去了
有时候文件名过长的话,会把服务器搞崩;在form-data;那里添加大量的垃圾数据,末尾结束记得加个;,进行绕过最后绕过防护,上传脚本。

这是垃圾数据的一个典型情况,末尾是要加;,是有差异的。因为你加了;,默认name是一个表单,注意一下;不要在filename里面插,没有任何意义
符号变异-防匹配(' " ;)
;代表的是一对一的关系,结束了。没有带双引号的是程序自带的东西,带双引号里面的就是不固定的,一般在程序里面,将单引号括起来的话,基本上在程序开发里面单引号和双引号都可以。分号代表一个语句的结束,数据包截止的后面是没有分号的,如果加一个分号,那就代表后面还有
就是很多东西,他都存在一个函数替换,这个单引号和双引号,他能够实现的效果是一样的,我们为什么不把单引号变成双引号呢,防护软件可能检测的是双引号里面的东西,单引号的东西不检测呢,测试了一下,发现还是拦截了
我们可以去掉一个单引号或者双引号,相当与没有一个闭合,他会认为这个数据就是:.php,程序开发里面大家都知道,如果你把一些东西,没有用单引号和双引号括起来,会误认为是一个函数或者程序里面一个自带的东西,但是用双引号括起来的话,会认为是一个字符串
防护软件的匹配形式只能够自己去测试,才能知道是什么形式,是"qq.php,还是qq.php,:qq.php,如果相当于是第三种情况的话,我们就实现了绕过,那就是没有匹配到,因为他匹配到的话,那他绝对会实现拦截
安全狗现在的匹配规则是匹配单引号、双引号里面的东西,因为你不写,他就能够上传成功,相当于11.php没有匹配到,因为他没有接收到,他就绕过了,他如果接收到,绝对会拦截
在前面加可以绕过,在后面加就不能绕过,说明安全狗目前的匹配规则是取最后一个双引号,然后把前面的取出来
我这个测试是没有必要的,这只是说大家以后碰到同类的防护软件,不管是安全狗还是宝塔,安全公司里面的产品,那么大家在研究的时候,也是这么个研究方法,大家不要自己绕过就绕过了,我们学的是研究的方法后期只要脑瓜子灵活一点,是没有任何问题是可以绕过的,方法学不到,那讲了也是白讲,我希望大家学的是绕过的方法,以后自己就能做这个事情
绕过思路就是尽可能让他找不到php就可以了
“x”.php,绕过成功,上传的是.php,可以当.php执行。或者"x"x.php,上传成功是x.php,当我们知道方法就非常好玩了。
数据截断-防匹配(%00 ; 换行)
x.jpg;.php,它的意义是很明显的,因为安全狗也是程序,当它碰到截断,也是会截断的,后面的.php就没有匹配到,最后上传的后缀是.php就行了
换行相当于代码中有/n在中间了,如果程序当中用/n来表示换行,数据包识别我们这种写法,其实区块传输和换行是一个原理
filename=“x.p
h
p”
重复数据-防匹配(参数多次)
代码中匹配的递归循环,对方在验证你格式后缀的时候,如果他是单次验证,就会造成pphpph绕过

最后一个是filename=“x.php”;就可以了。这不是垃圾数据,垃圾数据会比这个多很多
filename=“Content-Disposition: form-data;name=“upload_file"x.php”,最后上传成功了,因为安全狗认为x.php是没有给filename的,但是他实际上是给了filename。借助原有数据包自带的正常的东西,把他作为干扰条件写到filename里面,就实现把x.php给绕过了。
/也可以做为一个条件去绕过,filename=”/jpeg;/x.php",/相当于一个截断,中间被注释了
#Payload:
大量垃圾数据缓冲溢出(Content-Disposition,filename等)
filename=“x.php
filename='x.php
filename=“a.jpg;.php”;
filename=“a.php%00.jpg”
filename=“Content-Disposition: form-data;name=“upload_file”;x.php”
filename=“x.jpg”;filename=“x.jpg”;…filename=“x.php”;
filename=”/jpeg;/x.php"
filename=
"
x
.
p
h
p
"
通过这篇文章,让大家明白研究的方法,我的研究方法就是不停的去测试,但是我们去测试总有一个先后顺序,前提条件下,我们得知道什么东西能改,什么东西不能改,这个注入语句核心类是不能改的,改的话,这个语句是会出问题的,那么最终的效果也是不能达到。同样的,我们在测试上传绕过也是这么个道理,你一定要知道那些地方,你不能动他。动他这个数据包就会有问题,那些地方你就不能改,你要对能修改的地方使劲的进行修改,然后在测试的时候,把每个waf的东西给搞清楚,以后你在研究他的时候就很容易上手,安全狗是目前比较容易过的WAF,有些东西其实都是一样的道理
搜索引擎搜索fuzz web字典
在做waf绕过的时候,fuzz是通常的一种方式

在filename=""这个地方加载字典进行变化,数据包发包量不要过大,不然安全狗的CC开关会直接封住你的IP。
这种就是全用工具去帮你跑,你就不要去思考问题,我们称之为fuzz模糊测试,就是用大量可能性在这里不断进行测试,其中抓到一种可以成功的可能,就完事了
假如你在入侵一个网站,你用100种方法去测试,FUZZ就是这么个情况
文件上传安全修复方案
后端验证:采用服务端验证模式
因为前端可以禁用js脚本运行,就可以绕过了
后缀检测:基于黑名单,白名单过滤
MIME检测:基于上传自带类型检测
内容检测:文件头,完整性检测
三种检测都上,比别人更安全,相关代码就几个函数,每个语言不一样,有些写的高级点的,就用面向对象的写法,写的低阶写个函数也行,在低阶点的,就在上传的那个点,写一个过滤就完事了,参考如下:
自带函数过滤:参考uploadlabs函数
getimage不上传图片就不会载入函数,只有上传图片才可以,所以它从理论上,已经把文件的属性给定义了。
自定义函数过滤:function check file(){}
把黑白名单两个都加在一起,既不是php,也不是jsp,他也必须是jpg,png常见的格式,这里可以搞双重验证,黑白两个都加,自己去查一下资料,检测传过来的参数名的值,看一下里面有没有关键字,php。
WAF防护产品:宝塔,云盾,安全公司产品等
其它语言也有相关函数,都是可以举一反三的
没有上传漏洞,再做绕过,始终是个0,没有办法判定是否存在上传漏洞,只能去盲猜。你既不能保证是否有漏洞,还得去测试是否能够绕过
前期一般是先绕过WAF,再去判定是否有上传漏洞,因为你有时候去判定是否有上传漏洞的时候,WAF已经触发,也不知道能不能成功
相关文章:
24 WEB漏洞-文件上传之WAF绕过及安全修复
目录 WAF绕过上传参数名解析:明确哪些东西能修改?常见绕过方法:符号变异-防匹配( " ;)数据截断-防匹配(%00 ; 换行)重复数据-防匹配(参数多次)搜索引擎搜索fuzz web字典文件上传安全修复方案 WAF绕过 safedog BT(宝塔) XXX云盾 宝塔过滤的比安全狗厉害一些&a…...
Python科研绘图--Task03
目录 图类型 关系类型图 散点图的例子 数据分布型图 rugplot例子 分类数据型图 编辑回归模型分析型图 多子图网格型图 FacetGrid() 函数 PairGrid() 函数 绘图风格、颜色主题和绘图元素缩放比例 绘图风格 颜色主题 绘图元素缩放比列 图类型 关系类型图 数据集变量…...
ssm端游游戏账号销售管理系统源码和论文
ssm端游游戏账号销售管理系统源码和论文069 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面…...
ssm+vue农家乐信息平台源码和论文
ssmvue农家乐信息平台源码和论文066 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 1、研究现状 国外,农家乐都被作为潜在的发展农村经济,增加农民收入的重要手段,让农户广…...
安装启动yolo5教程
目录 一、下载yolo5项目 二、安装miniconda(建议不要安装在C盘) 三、安装CUDA 四、安装pytorch 五、修改配置参数 六、修改电脑参数 七、启动项目 博主硬件: Windows 10 家庭中文版 一、下载yolo5项目 GitHub - ultralytics/yolov5:…...
封装redis 分布式锁 RedisCallback
RedisCallback 是redis 一个回调接口,在 Redis 连接后执行单个命令,返回执行命令后的结果。 如果在使用 RedisCallback 时,需要自动获取 Redis 连接资源,使用完毕后并释放连接资源。 RedisTemplate 类提供了一个 execute 方法&am…...
代码随想录算法训练营第17期第32天 | 122. 买卖股票的最佳时机 II、455.分发饼干、376. 摆动序列、53. 最大子序和
122. 买卖股票的最佳时机 II 我好像记得这道题是怎么写的,也不知道是福是祸 1. 收集每天的正利润就可以,收集正利润的区间,就是股票买卖的区间,而我们只需要关注最终利润,不需要记录区间 2.局部最优:收集…...
iOS HealthKit 介绍
文章目录 一、简介二、权限配置1. 在开发者账号中勾选HealthKit2. 在targets的capabilities中添加HealthKit。3. infoPlist需要配置权限 三、创建健康数据管理类1. 引入头文件2. 健康数据读写权限3. 检查权限4. 读取步数数据5. 写入健康数据 四、运行获取权限页面 一、简介 He…...
Windows平台Unity下播放RTSP或RTMP如何开启硬解码?
我们在做Windows平台Unity播放RTMP或RTSP的时候,遇到这样的问题,比如展会、安防监控等场景下,需要同时播放多路RTMP或RTSP流,这样对设备性能,提出来更高的要求。 虽然我们软解码,已经做的资源占有非常低了…...
模板方法模式在JDBCTemplate中的应用
上一篇中系统总结了模板模式的原理和使用,提到了模板方法和回调接口。回调接口和模板方法类之间的关系可以看作服务与被服务的关系,模板方法类想要回调接口做事,就要提供相应的资源,接口用提供的资源做事,完事后&#…...
如何在Debian中同步系统时间?Debian 系统时间配置(NTP服务)
A. 更新源,并安装ntpdate apt-get update apt-get install ntpdate ntpdate ntp1.aliyun.com 修改时区 修改设置Linux服务器时区 方法 A 命令 : “tzselect” 方法 B 仅限于RedHat Linux 和 CentOS 命令 : “timeconfig” 方法 C 适用于Debian 命令 : “dpkg-reconfigur…...
模板方法模式(十六)
相信自己,请一定要相信自己 上一章简单介绍了代理模式(十五), 如果没有看过, 请观看上一章 一. 模板模式 引用 菜鸟教程里面的 模板模式介绍: https://www.runoob.com/design-pattern/template-pattern.html 在模板模式(Template Pattern)…...
机器学习笔记之优化算法(十九)牛顿法与正则化
机器学习笔记之优化算法——再回首:牛顿法与正则化 引言回顾:经典牛顿法及其弊端牛顿法:算法步骤迭代过程中可能出现的问题正则化 Hessian Matrix \text{Hessian Matrix} Hessian Matrix与相应问题 引言 本节我们介绍经典牛顿法在训练神经网络过程中的迭…...
Java面试之单例模式的六种实现方式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么要用单例模式二、单例模式的六种实现2.1 饿汉式2.1.1 饿汉式代码实现2.1.2 饿汉式代码实现要点解析2.1.3 饿汉式代码实现优点2.1.4 饿汉式代码实现缺…...
re正则入门
🌸re正则入门 正则表达式 (Regular Expression) 又称 RegEx, 是用来匹配字符的一种工具. 在一大串字符中寻找你需要的内容. 它常被用在很多方面, 比如网页爬虫, 文稿整理, 数据筛选等等 简单的匹配 正则表达式无非就是在做这么一回事. 在文字中找到特定的内容, 比如…...
C++ Day5
目录 一、静态成员 1.1 概念 1.2 格式 1.3 银行账户实例 二、类的继承 2.1 目的 2.2 概念 2.3 格式 2.4 继承方式 2.5 继承中的特殊成员函数 2.5.1 构造函数 2.5.2析构函数 2.5.3 拷贝构造函数 2.5.4拷贝赋值函数 总结: 三、多继承 3.1 概念 3.2 格…...
el-element:自定义参数
希望在下拉框、输入框、多选框中添加自定义参数,这在项目中是非常常见的 1、 Select选择器中remote-method方法带自定义参数 :remote-method"(query)>{remoteMethod(query,自定义参数)}" remoteMethod(query, pid){ } 2、 el多选框方法追加参数&…...
“分布式”与“集群”初学者的技术总结
一、“分布式”与“集群”的解释: 分布式:把一个囊肿的系统分成无数个单独可运行的功能模块 集群: 把相同的项目复制进行多次部署(可以是一台服务器多次部署,例如使用8080部署一个,8081部署一个,…...
C++day5(静态成员、类的继承、多继承)
一、Xmind整理: 二、上课笔记整理: 1.静态数据成员静态成员函数(银行账户实例) #include <iostream>using namespace std;class BankAccount { private:double balance; //余额static double interest_rate; //利率 p…...
2023MySQL+MyBatis知识点整理
文章目录 主键 外键 的区别?什么是范式?什么是反范式?什么是事务?MySQL事务隔离级别?MySQL事务默认提交模式?MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗?MySQL支持哪几种时间类型&a…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
Unity VR/MR开发-VR开发与传统3D开发的差异
视频讲解链接:【XR马斯维】VR/MR开发与传统3D开发的差异【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
