2026-10-23 16:19:35
大小写混合:许多过滤器仅针对特定大小写的SQL关键字(如小写select)进行过滤,攻击者可通过混合大小写绕过,例如使用SeLect或SELect替代select。
编码绕过:通过URL编码、十六进制编码或Unicode编码转换SQL语句中的字符。例如:
用%20代替空格;
用0x73656c656374(十六进制)或u0073u0065u006cu0065u0063u0074(Unicode)代替select。
注释干扰:在SQL关键字中插入注释符号(如/* */或--)干扰过滤器判断。例如:
sel/*comment*/ect;
se-- lect(通过注释截断后续字符)。
字符串拆分:将关键字拆分为多个部分并用连接符拼接。例如:
MySQL中:sel' 'ect或concat('s','elect');
SQL Server中:sel+ect。
函数替换:利用数据库函数替代关键字功能。例如:
用char(115,101,108,101,99,116)(ASCII码转字符)代替select;
用substring()或mid()提取字符串片段。
双写关键字:针对删除关键字的过滤器,双写关键字以保留有效部分。例如:
输入sselectelect,过滤器删除select后剩余select;
类似方法适用于union(uunionion)或and(aandnd)。
参数污染:将恶意代码分散到多个参数中,绕过单参数过滤。例如:
参数1:id=1;
参数2:order by 1--;
组合后可能形成完整攻击语句。
逻辑漏洞利用:通过修改业务逻辑执行未授权操作。例如:
修改订单价格字段为负数;
篡改用户权限字段提升权限。
特殊字符与时间盲注:
使用全角字符(如SELECT)或异形字符绕过过滤;
时间盲注通过延迟函数(如sleep(5))推断数据库信息。
参数化查询(预编译语句):
将SQL语句与用户输入分离,避免直接拼接;
示例:Java中使用PreparedStatement,Python中使用cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))。
严格输入验证:
使用白名单验证输入格式(如仅允许数字、字母);
示例:正则表达式^d+$验证ID字段为纯数字。
最小权限原则:
数据库账户仅授予必要权限(如仅查询权限,无删除或修改权限)。
特殊字符转义:
对单引号、双引号、反斜杠等字符进行转义处理;
示例:PHP中mysqli_real_escape_string()函数。
Web应用防火墙(WAF):
部署WAF(如ModSecurity)拦截恶意请求;
定期更新WAF规则以应对新型攻击。
安全审计与错误处理:
定期审查代码中的SQL拼接操作;
生产环境隐藏详细错误信息(如MySQL错误号、堆栈跟踪)。
数据库特性利用:
MySQL:使用反引号(`)引用表名/列名绕过关键字过滤;
SQL Server:用[]包裹标识符(如[select]);
Oracle:用双引号("select")或同义词绕过。
存储过程与二次注入:
避免允许用户自定义存储过程;
防范二次注入:对存储到数据库的数据再次过滤。
宽字节注入防御:
设置字符集为UTF-8(禁用GBK等宽字节编码);
在转义前统一字符集处理。
WAF规则分析:
定期测试WAF规则漏洞(如尝试sel%0bect绕过正则匹配);
结合多阶段攻击(如先XSS获取Cookie,再SQL注入)。
常用工具:
SQLMap:自动化检测与利用SQL注入漏洞;
Burp Suite:拦截/修改HTTP请求,手动构造注入语句;
OWASP ZAP:扫描Web应用,标记潜在注入点;
Nessus:商业漏洞扫描器,检测数据库配置问题。
测试注意事项:
授权测试:确保获得合法授权,避免法律风险;
数据保护:使用测试数据库或备份数据,防止生产数据泄露;
结果记录:详细记录漏洞位置、利用方式及修复建议。