SQL注入的进阶利用与防御绕过技术详解
字数 1310 2025-11-14 02:00:43
SQL注入的进阶利用与防御绕过技术详解
1. 题目描述
SQL注入是攻击者通过将恶意SQL代码插入应用程序的输入参数,从而操纵数据库查询的漏洞。进阶利用涉及更复杂的技巧,如联合查询、布尔盲注、时间盲注、堆叠查询等;防御绕过则针对WAF(Web应用防火墙)或过滤机制,通过混淆、编码或特殊字符绕过检测。
2. 攻击原理回顾
- 基础SQL注入:通过输入
' OR 1=1 --使查询条件永真,绕过登录验证。 - 漏洞根源:用户输入未经过滤或过滤不严,直接拼接进SQL语句。
3. 进阶利用技术
步骤1:信息搜集
- 判断注入点类型(数字型/字符型):
- 数字型:
id=1 AND 1=1(正常) vsid=1 AND 1=2(异常)。 - 字符型:
id='1' AND '1'='1'(需闭合引号)。
- 数字型:
- 确定数据库类型(如MySQL、PostgreSQL)通过特有函数(如
version())。
步骤2:联合查询(Union-Based)
- 使用
UNION SELECT提取数据:- 先通过
ORDER BY N确定列数(N递增直至报错)。 - 示例:
' UNION SELECT 1,2,database() -- - 联合查询要求前后列数一致,且数据类型兼容。
- 先通过
步骤3:布尔盲注(Boolean-Based Blind)
- 适用于无回显但存在真假状态差异的场景(如页面内容变化)。
- 示例(MySQL):
' AND SUBSTRING((SELECT database()),1,1)='a' -- - 通过逐个字符判断,自动化工具(如SQLMap)可加速过程。
- 示例(MySQL):
步骤4:时间盲注(Time-Based Blind)
- 通过延时函数判断条件真假(如MySQL的
SLEEP(5)):' AND IF(1=1, SLEEP(5), 0) -- - 若页面响应延迟,说明条件成立。
步骤5:堆叠查询(Stacked Queries)
- 执行多条SQL语句(需数据库驱动支持):
'; DROP TABLE users; -- - 风险高但部分场景受限(如PHP+MySQL默认不支持)。
4. 防御绕过技术
步骤1:绕过关键词过滤
- 大小写混淆:
UnIoN SelEcT。 - 内联注释(MySQL):
/*!SELECT*/。 - 字符串拼接:
CONCAT('sel','ect')。 - 编码绕过:十六进制(
0x73656c656374)或URL编码(%53%45%4c%45%43%54)。
步骤2:绕过特殊字符过滤
- 引号绕过:用
CHAR(97)代替'a'。 - 空格绕过:用制表符(
%09)、换行符(%0A)或注释(/**/)。
步骤3:WAF特异性绕过
- 利用WAF解析差异:
- HTTP参数污染(HPP):
?id=1&id=2' UNION SELECT 1--。 - 分块传输编码(Chunked Encoding)扰乱WAF解析。
- HTTP参数污染(HPP):
5. 防御措施
- 预编译语句(Prepared Statements):绑定参数使输入不被解析为SQL代码。
- 输入验证:白名单过滤(如仅允许数字)。
- 最小权限原则:数据库账户禁用高危操作(如
DROP)。 - WAF辅助检测:但需定期更新规则以防绕过。
6. 总结
SQL注入进阶利用依赖对数据库结构和过滤逻辑的深度理解,而防御需结合代码安全、配置加固与多层检测。通过模拟攻击测试(如SQLMap)可验证防护有效性。