我的WafBypass之道(SQL注入篇)
字数 2317 2025-08-29 08:31:42
SQL注入WAF绕过技术详解
0x00 前言
本文总结了主流WAF的绕过技术,重点介绍突破WAF的思维方法和自动化绕过技术,而非简单罗列现有姿势。
0x01 WAF类型分析
主流WAF分类
-
云WAF:
- 通过CDN配置,DNS解析到CDN IP
- 请求先经过云WAF检测,通过后再转发给主机
-
主机防护软件:
- 预先安装在主机上
- 扫描和保护主机,监听Web端口流量
- 开源WAF(如mod_security、ngx-lua-waf)升级成本高
-
硬件防护设备:
- 专用硬件设备进行流量清洗和拦截
- 通过后再将数据包转发给主机
WAF规则库关系
- 百度云加速免费版基于CloudFlare
- 安全宝和百度云加速规则库相似
- 创宇云安全和腾讯云安全规则库相似
- 腾讯云安全和门神规则库相似
- 硬件WAF自身往往存在大量漏洞
0x02 常见绕过技术
数据库特性利用
-
注释:
#、--、/* */、;%00- 案例:
/**//**/绕过云锁
-
科学记数法:
1union、1from绕过安全宝&百度云加速&Imperva
-
空白字符:
- 各数据库支持的空白字符不同:
- SQLite3:0A 0D 0C 09 20
- MySQL5:09 0A 0B 0C 0D A0 20
- PosgresSQL:0A 0D 0C 09 20
- Oracle 11g:00 0A 0D 0C 09 20
- MSSQL:01-20
- 各数据库支持的空白字符不同:
-
特殊符号:
+、-、`、~、!、@、.、'、"、()、{}
-
SQL函数&关键字:
- MySQL:
union distinct、union distinctrowprocedure analyse()、updatexml()、extracavalue()- 数学函数:
exp()、ceil()、atan()、sqrt()等 - 字符串函数:
Mid()、Substr()、concat()等
- MSSQL:
IS_SRVROLEMEMBER()、IS_MEMBER()、HAS_DBACCESS()convert()、col_name()、object_id()
- MySQL:
-
逗号绕过:
limit 1 offset 0代替limit 0,1mid(version() from 1 for 1)代替mid(version(),1,1)
-
BIGINT溢出报错注入:
- 利用MySQL BIGINT数据类型构造溢出
容器特性利用
-
%特性:
- ASP+IIS环境中单一百分号
%会被忽略
- ASP+IIS环境中单一百分号
-
%u特性:
- IIS支持unicode解析,WAF可能不识别
- 案例:
s%u0065lect→select - 多种编码表示同一字符:
- 字母a:
%u0000、%u0041、%u0061等 - 单引号:
%u0027、%u02b9等 - 空白:
%u0020、%uff00等
- 字母a:
-
畸形协议&请求:
- ASP/ASP.NET允许
application/x-www-form-urlencoded方式提交 - PHP+Apache对协议定义不严格
- 利用multipart请求边界解析差异
- ASP/ASP.NET允许
通用特性
-
HTTP参数污染(HPP):
- 同一参数多次出现,不同容器处理不同:
- ASP.NET + IIS:
id=1,2,3 - ASP + IIS:
id=1,2,3 - PHP + Apache:
id=3
- ASP.NET + IIS:
- 同一参数多次出现,不同容器处理不同:
-
双重编码:
- 视场景而定,包括:
- unencode、base64、json、binary、querystring、htmlencode、unicode、php serialize
- 视场景而定,包括:
0x03 针对性绕过案例
阿里云盾绕过
-
自定义变量绕过:
id=1|@pwd:=(select username from users where id=4)/*ddd*/union/*ddd*/select null,@pwd -
科学计数法:
1' union/*!23000select*/user,password from users%23
腾讯云安全绕过
- 推理绕过:
1' union/*!50000select%0aall*/username from users%23 1' union/*!50000select%0adistinct*/username from users%23
云锁绕过
-
超长注释:
/*666666...(超长字符串)...666666*/ -
数据包长度绕过:
- 超过2329字节时不检测
安全狗绕过
- 超长查询字符串:
- 导致WAF宕机,Service Unavailable
Emoji绕过
- 愤怒脸Emoji:
%F0%9F%98%A0插入到%23与%0A之间- ASCII码超过127的字符可能导致WAF引擎无法检测
0x04 自动化Bypass技术
SQLMap Tamper脚本
- 常用脚本:
apostrophemask.py:UTF-8全角字符替换单引号base64encode.py:Base64编码between.py:用NOT BETWEEN和BETWEEN替换运算符concat2concatws.py:函数替换greatest.py:用GREATEST函数替换大于号space2comment.py:用/**/替换空格versionedkeywords.py:用MySQL注释包围关键字
系统化Fuzz方法
-
有毒标识模型:
- 将SQL关键字视为"位"
- 在"位"的两边插入各种符号(注释、运算符等)
- 计算公式:
Factor[((x^n)*4 + x*y)*m]- x:有毒标识
- n:位数
- y:数据库语法糖
- m:编码转换
-
传输过程测试点:
- 中间件特性/缺陷
- 特定条件下的WAF欺骗
0x05 总结
-
WAF绕过核心思想:
- 理解WAF工作原理
- 掌握数据库和容器特性
- 灵活组合各种绕过技术
- 注重细节和推理
-
未来方向:
- 文件上传WAF绕过
- Webshell防御绕过
- 权限提升WAF绕过
通过系统化的测试方法和不断积累的绕过技术,可以有效突破主流WAF的防护。关键在于理解WAF的检测机制,并针对性地构造绕过Payload。