没人比我更懂waf之一点寒芒先到随后枪出如龙
字数 846 2025-08-20 18:17:41
Oracle数据库注入与WAF绕过技术详解
1. 数据库类型判断方法
1.1 MSSQL特有识别方法
-
延时判断:
id=1';waitfor delay '0:0:5' --若成功延时5秒,则为MSSQL
-
TOP关键词:
id=1' and (select top 1 'aaa')='aaa -
系统表识别:
id=1' and (select count(*) from sysobjects)>0 and '1'='1 -
字符串连接:
select 'a'+'bc' -- 结果为abc
1.2 MySQL特有识别方法
-
注释符:
id=1' and 1=1 # -
特有函数:
select CURRENT_DATE; select now(); -
系统表识别:
id=1' and (select count(*) from information_schema.TABLES)>0 and '1'='1 -
延时函数:
id=1' and (select BENCHMARK(100000,MD5('ADMIN'))) and '1'='1 -
字符串连接:
select 'a' 'bc' -- 结果为abc
1.3 Oracle特有识别方法
-
NVL2函数:
id=1' and (select NVL2('a','aaa','b')='aaa -
错误信息识别:
ORA-01756:quoted string not properly terminated ORA-00933:SQLcommand not properly ended -
系统表识别:
id=1' and (select count(*) from sys.user_tables)>'0 -
DUAL表要求:
select 'aaa' from dual -- Oracle必须指定表名 -
字符串连接:
select 'a' || 'bc' -- 结果为abc
2. WAF绕过实战技巧
2.1 基础绕过方法
-
AND绕过:
- 通过变形或编码绕过对"and"关键词的检测
-
函数替代:
- 使用数据库特有函数替代通用函数
2.2 高级绕过技术
-
Content-Type修改:
- 将
application/json改为application/text或其他类型 - 原理:WAF可能依赖Content-Type头来解析和检测请求
- 将
-
JSON格式利用:
- 在JSON格式注入中,WAF可能无法正确解析非常规格式
-
错误信息利用:
- 分析WAF返回的错误信息,定位被过滤的关键点
3. 实战案例解析
-
案例背景:
- 目标存在SQL注入漏洞
- 有WAF防护,检测关键字严格
-
攻击步骤:
- 首先判断数据库类型为Oracle
- 尝试爆错注入未成功
- 修改Content-Type头绕过WAF检测
- 使用sqlmap自动化工具完成数据拖取
-
关键突破点:
原始请求头: Content-Type: application/json 修改后请求头: Content-Type: application/text
4. 防御建议
-
对WAF的改进:
- 不依赖Content-Type头进行检测
- 对所有输入进行规范化处理
-
代码层面防御:
- 使用参数化查询
- 最小权限原则
-
日志监控:
- 监控Content-Type异常的请求
- 记录所有SQL错误信息
5. 总结
通过修改Content-Type头绕过WAF是一种有效的技术手段,特别是在JSON格式的注入场景中。关键在于理解WAF的工作原理和检测逻辑,找到其解析流程中的薄弱环节。同时,熟练掌握各种数据库的特有语法和函数对于判断数据库类型和构造有效payload至关重要。