SQL注入如何绕过过滤机制?加强输入过滤的技巧

SQL注入如何绕过过滤机制?加强输入过滤的技巧
最新回答
煙味少女

2026-10-23 16:19:35

SQL注入绕过过滤机制的常见方法
  • 大小写混合:许多过滤器仅针对特定大小写的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注入)。

SQL注入测试工具与方法
  • 常用工具:

    SQLMap:自动化检测与利用SQL注入漏洞;

    Burp Suite:拦截/修改HTTP请求,手动构造注入语句;

    OWASP ZAP:扫描Web应用,标记潜在注入点;

    Nessus:商业漏洞扫描器,检测数据库配置问题。

  • 测试注意事项:

    授权测试:确保获得合法授权,避免法律风险;

    数据保护:使用测试数据库或备份数据,防止生产数据泄露;

    结果记录:详细记录漏洞位置、利用方式及修复建议。