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已经触发,也不知道能不能成功

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

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

相关文章

UML 类图

面向对象设计主要就是使用 UML 的类图,类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据。 类(class /struct&…

MySQL 存储过程 循环处理数据 while repeat

最近搞数据,需要搞搞mysql 的存储过程,很多忘记了,就查查,然后总结下。。 文章目录 介绍循环repeat方式循环while方式外传 介绍 MySQL存储过程中使用循环处理数据 存储过程就像一份写好的由多条SQL组合的代码,这份SQ…

全流程R语言Meta分析核心技术教程

详情点击链接:全流程R语言Meta分析核心技术教程 一,Meta分析的选题与检索 1、Meta分析的选题与文献检索 1)什么是Meta分析? 2)Meta分析的选题策略 3)精确检索策略,如何检索全、检索准 4)文献的管理与清洗,如何制定文…

【Acwing291】蒙德里安的梦想(状态压缩dp)详细讲解

题目描述 题目分析 显而易见的重要事实 首先,需要明白一个很重要的事实: 所有的摆放方案数所有横着摆放且合理的方案数 这是因为,横着的确定之后,竖着的一定会被唯一确定,举一个例子: ------唯一确定-…

gma 2 教程(二)数据操作:6.NumPy数组交互

gma 栅格数据集可以通过 ToArray 方法将栅格数据转为NumPy数组,也提供将NumPy数据转换为栅格数据(集)的方法。 读取NumPy数组到数据集 (一)函数简介   (二)示例 保存NumPy数组到文件 &…

C++笔记之智能指针和单例、依赖注入结合使用

C笔记之智能指针和单例、依赖注入结合使用 code review! 文章目录 C笔记之智能指针和单例、依赖注入结合使用例1.一个类不使用单例,另一个类使用单例例2.两个类都使用单例,并且通过getInstance()传入类的实例例3.std::make_unique不能访问私有的构造函…

5.基于多能互补的热电联供型微网优化运行

MATLAB代码链接:基于多能互补的热电联供型微网优化运行 MATLAB代码:基于多能互补的热电联供型微网优化运行 关键词:多能互补 综合需求响应 热电联产 微网 优化调度 参考文档:《基于多能互补的热电联供型微网优化运行》基本完全…

【云原生】Docker的数据管理(数据卷、容器互联)

目录 一、数据卷(容器与宿主机之间数据共享) 二、数据卷容器(容器与容器之间数据共享) 三、 容器互联(使用centos镜像) 总结 用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据…

【android12-linux-5.1】【ST芯片】HAL移植后配置文件生成报错

根据ST官方源码移植HAL源码后,执行readme指示中的生成配置文件指令时报错ST_HAL_ANDROID_VERSION未定义之类,应该是编译环境参数问题。makefile文件中是自动识别配置的,参数不祥就会报错,这里最快的解决方案是查询确定自己android…

Docker去除sudo权限

Docker去除sudo权限 使用docker命令时,每次都要sudo提权,否则就会报错提示无权限。 1.查看docker用户组及成员 sudo cat /etc/group | grep docker2.添加docker用户组 sudo groupadd docker3.添加用户到docker组 sudo gpasswd -a ${USER} docker4.增…

selenium Chrome驱动下载地址

Chrome驱动官方最新版下载地址:https://googlechromelabs.github.io/chrome-for-testing/ 有稳定版,开发版等版本可以选择下载 选择 操作系统复制下载链接直接下载

机器学习笔记之优化算法(十九)牛顿法与正则化

机器学习笔记之优化算法——再回首:牛顿法与正则化 引言回顾:经典牛顿法及其弊端牛顿法:算法步骤迭代过程中可能出现的问题正则化 Hessian Matrix \text{Hessian Matrix} Hessian Matrix与相应问题 引言 本节我们介绍经典牛顿法在训练神经网络过程中的迭…

【Flink实战】Flink中的分流

Flink中的分流 在Flink中将数据流切分为多个子数据流,子数据流称为”旁路输出数据流“。 #mermaid-svg-bnbf0HOpEUsgi9nh {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bnbf0HOpEUsgi9nh .error-icon{…

c++ 实现一个简单的自定义报文协议

思路&#xff1a; 将发送的数据按照长度和body的方式一次放入一个大的buffer中&#xff0c;4个字节存放body长度&#xff0c;后面存放报文&#xff0c;依次放入数据。 后续如果想要存储复杂类型&#xff0c;可以拓展头部信息&#xff0c;比如数据类型等 #include <stdio.h&…

如何在不使用任何软件的情况下将 PDF 转换为 Excel

通常&#xff0c;您可能会遇到这样的情况&#xff1a;您需要的数据不在 Excel 工作表中&#xff0c;而是以数据表形式出现在 PDF 文件中。为了将此数据放入 Excel 工作表中&#xff0c;如果您尝试将数字复制并粘贴到电子表格中&#xff0c;则列/行将无法正确复制和对齐。因此&a…

java八股文面试[Spring]——如何实现一个IOC容器

什么是IOC容器 IOC不是一种技术&#xff0c;只是一种思想&#xff0c;一个重要的面向对象编程的法则&#xff0c;它能指导我们如何设计出松耦合&#xff0c;更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象&#xff0c;从而导致类与类之间高耦合&#xff0c;难于…

从零开始配置Jenkins与GitLab集成:一步步实现持续集成

在软件开发中&#xff0c;持续集成是确保高效协作和可靠交付的核心实践。以下是在CentOS上安装配置Jenkins与GitLab集成的详细步骤&#xff1a; 1.安装JDK 解压JDK安装包并设置环境变量&#xff1a; JDK下载网址 Java Downloads | Oracle 台灣 tar zxvf jdk-11.0.5_linux-x64_b…

关于ros工作空间devel下setup.bash的理解

在创建了ros的工作空间之后 在工作空间的devel文件夹中存在几个setup.*sh形式的环境变量设置脚本 使用source命令运行这些脚本文件&#xff0c;则工作空间的环境变量设置可以生效&#xff08;如可以找到该工作空间内的项目&#xff09;。 source devel/setup.bash 设置环境变量…

# Go学习-Day6

文章目录 Go学习-Day6封装继承接口 Go学习-Day6 个人博客&#xff1a;CSDN博客 封装 类似java的类的封装&#xff0c;这里我们利用大小写和工厂模式来实现封装的功能略过 继承 相似的类具有相似的方法&#xff0c;反复绑定相同的方法&#xff0c;代码冗余&#xff0c;所以引…

Zipkin开源的分布式链路追踪系统

Zipkin是一款开源的分布式链路追踪系统,主要功能包括: 1. 采集跟踪数据 - Zipkin client库负责收集并上报各服务的请求信息。 2. 存储跟踪数据 - 存储层默认采用Zipkin自带的基于内存的快速存储,也支持整合MySQL、Cassandra等外部存储。 3. 查询接口 - 提供RESTful API进行跟…