首页 游戏 软件 资讯 排行榜 专题
首页
数据库
SQL注入如何绕过WAF防火墙拦截_通过编码转换与特殊字符混淆绕过

SQL注入如何绕过WAF防火墙拦截_通过编码转换与特殊字符混淆绕过

热心网友
88
转载
2026-04-28

SQL注入如何绕过WAF防火墙拦截:编码转换与特殊字符混淆的艺术

URL编码和双重编码常失效,因WAF在解析阶段即完成多轮解码与规范化;真正有效的是利用WAF盲区如Unicode编码%u0027、十六进制0x27或数据库特有语法如MySQL条件注释/*!50700 SELECT*/。

SQL注入如何绕过WAF防火墙拦截_通过编码转换与特殊字符混淆绕过

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

SQL注入绕过WAF时,URL编码和双重编码为什么常失效

很多朋友一提到绕过WAF,首先想到的就是URL编码,甚至双重编码。但现实往往很骨感:为什么%2527这样的把戏经常失灵?核心原因在于,现代WAF(无论是ModSecurity这样的开源方案,还是主流的云WAF)在请求解析的早期阶段,就已经完成了URL解码,并且通常会进行多轮规范化处理。简单来说,你发送的%2527(即%27的二次编码),WAF会层层解码,最终看到的还是那个赤裸裸的单引号',该触发的规则一样会触发。

  • 那么,什么编码才真正有效?关键在于找到WAF解析链条上的“盲区”。例如,某些WAF规则集不处理%u0027这种Unicode编码形式。但这里有个陷阱:数据库得认才行。MySQL就不吃%u0027这一套,需要换成数据库本身支持的格式。
  • MySQL环境下,可以尝试0x27(十六进制字面量)来表示单引号字符,或者在特定上下文里直接用'。当然,前提是SQL语句的上下文允许这种十六进制字符串参与拼接。
  • 如果是PostgreSQL,可以试试E'\x27'(带转义的十六进制字符串),部分WAF的规则可能没有覆盖到E''这种特殊的字符串语法。
  • 所以,别再盲目套用%27%2527的公式了。一个实用的测试方法是:构造像id=1%2527%2520OR%25201%253D1%2520--这样的payload,观察响应。如果还是被直接拦截,那就基本可以断定,目标WAF已经解码到了原始字符,这条路走不通。

用注释符和空格变形绕过关键词检测

WAF的另一大武器是基于正则表达式的关键词匹配,比如UNION SELECTOR 1=1这类经典模式。好消息是,像MySQL、MariaDB这类数据库,对空白符和注释的容忍度极高,这给我们留下了操作空间。而且,不同数据库版本支持的注释语法也有细微差别,这恰恰是WAF规则难以全覆盖的地方。

  • 用注释代替空格:这是经典手法。例如,把SELECT username FROM users写成SELECT/**/username/**/FROM/**/users。如果WAF的正则规则只是简单地锚定SELECT\s+FROM,那么这种写法就能成功溜过去。
  • 利用MySQL条件注释:这是一个高级技巧。例如/*!50700 SELECT*/,其中的SQL语句只在MySQL版本号大于等于5.7.00时才会执行。这种数据库特有的语法,WAF的通用规则极少覆盖。
  • 使用非常规空白符:除了常见的空格%20,还可以尝试%09(水平制表符Tab)、%0a(换行)、%0c(换页)。这些比单纯的+号要隐蔽得多。不过要注意一点:PHP的$_GET超全局变量默认会把+号转换成空格,但会保留%09的原义,这点差异在构造payload时需要留意。
  • 注释符的选择:尽量避免使用-- (注意后面有个空格),可以改用#或块注释/*abc*/。部分WAF对行注释符#的过滤并不严格,尤其是当它出现在参数值末尾时。

利用函数别名与等价表达式替换敏感操作符

如果WAF采用的是黑名单机制,过滤了UNIONSELECTAND等关键词,那么思路就要转向寻找“语义等价但字面不同”的写法。目标是让数据库引擎能正确执行,同时让WAF的规则识别不出来。

  • 操作符替换:在MySQL中,逻辑AND完全可以用&&代替。对于AND 1这种布尔条件,甚至可以写成LIKE 'a'='a'这样的表达式来绕过检测。
  • 拆分关键词:对于UNION SELECT这样的组合,可以在中间插入注释,变成UNION/*foo*/SELECT。或者,用括号改变语法树结构,写成UNION (SELECT ...)
  • 列数探测的隐蔽方法:探测列数时,不一定非要暴力使用ORDER BY 100。可以尝试嵌套SELECT子查询并用JOIN连接,例如:SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c...。这种复杂的嵌套语法,WAF规则很少会去覆盖其中的逗号分隔细节。
  • 文件读取的绕过:当LOAD_FILE()函数被盯上时,可以尝试将文件路径转换为十六进制格式。例如:SELECT LOAD_FILE(0x2f6574632f706173737764)(对应/etc/passwd)。这样做既能绕过对常见路径字符串的检测,又避免了使用引号。

为什么堆叠注入(Stacked Queries)在多数场景下根本走不通

看到注入点有个分号;,很多人会兴奋地想到堆叠注入。但这里必须泼一盆冷水:WAF没有拦截分号,绝不代表后端应用程序能执行多条SQL语句。成败的关键,在于数据库驱动和应用程序接口(API)层是否允许执行多语句查询。

  • 以经典的PHP为例,古老的mysql_query()函数根本就不支持多语句执行。较新的mysqli_multi_query()函数虽然支持,但出于安全考虑,绝大多数Web应用在编码时并不会启用这个选项。所以,即使WAF放行了id=1; DROP TABLE users--这样的payload,PHP代码调用mysqli_query($conn, $sql)时,也会直接返回一个“Commands out of sync”错误。
  • 这个情况在其他语言中也类似。Python的pymysql库默认关闭多语句执行(multi=True)。Go语言的database/sql标准库同样不支持,除非进行显式配置。
  • 堆叠注入唯一比较常见的可行场景,可能是在使用sqlmap这类自动化工具进行渗透测试时。例如使用sqlmap --batch -p id --dbms=mysql --technique=S参数,工具会先用布尔盲注或时间盲注确认注入存在性,然后再尝试堆叠注入。但即便如此,成功率也完全取决于后端代码的配置,并非WAF放行就能成功。
  • 因此,不要把; SELECT当作万能钥匙。一个有用的判断方法是:仔细观察应用程序的错误信息,如果其中间出现了mysqli_num_rows()pg_fetch_array()这类函数名,其实就暗示了底层使用的数据库驱动类型,从而可以推断堆叠注入的可能性。

总而言之,一次成功的SQL注入绕过,实际上是WAF规则粒度、数据库特定版本语法以及应用程序驱动配置这三者交集的产物。最容易被忽略的一点是:WAF可能“聪明”地放过了你的SELECT语句,但后端代码在拼接SQL之前,可能用一个intval()函数就把输入强制转成了整数,导致所有字符型payload在第一步就被截断了。所以,首要任务是确认:你的输入,真的进入SQL拼接环节了吗?

来源:https://www.php.cn/faq/2316697.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

SQL注入如何绕过WAF防火墙拦截_通过编码转换与特殊字符混淆绕过
数据库
SQL注入如何绕过WAF防火墙拦截_通过编码转换与特殊字符混淆绕过

SQL注入如何绕过WAF防火墙拦截:编码转换与特殊字符混淆的艺术 URL编码和双重编码常失效,因WAF在解析阶段即完成多轮解码与规范化;真正有效的是利用WAF盲区如Unicode编码%u0027、十六进制0x27或数据库特有语法如MySQL条件注释 *!50700 SELECT* 。 SQL注入绕过

热心网友
04.28
解决Docker for Mac中使用Xdebug连接宿主机失败的问题
编程语言
解决Docker for Mac中使用Xdebug连接宿主机失败的问题

解决Docker for Mac中使用Xdebug连接宿主机失败的问题 为什么 127 0 0 1 在 Docker for Mac 里连不上宿主机的 PhpStorm? 问题根源在于网络隔离。容器内部的 127 0 0 1 指向的是容器自身,而非你运行 PhpStorm 的 Mac 宿主机。这就导

热心网友
04.28
Java 11应用连接Oracle为何慢_分析GC与驱动设置
数据库
Java 11应用连接Oracle为何慢_分析GC与驱动设置

ORA-12170超时90%非数据库问题,而是DNS解析阻塞、JDBC驱动注册异常、RAC跨节点通信或JDK GC策略不匹配所致,需分别从nslookup测试、删除Class forName、检查v$session、调整G1参数等入手排查。 ORA-12170超时90%不是数据库问题,而是DNS卡在

热心网友
04.28
Oracle RAC如何配置防火墙策略?开放RAC所需通信端口
数据库
Oracle RAC如何配置防火墙策略?开放RAC所需通信端口

Oracle RAC防火墙配置:避开那些让你心跳停止的“坑” 给Oracle RAC配置防火墙,可不是只开个1521端口那么简单。firewalld的默认规则会悄无声息地阻断HAIP(169 254 x x)、私网UDP以及动态端口等关键流量,结果就是集群心跳直接“停摆”,或者实例死活起不来。 配置

热心网友
04.28
如何配置IPv6集群_Grid Infrastructure支持双栈网络部署
数据库
如何配置IPv6集群_Grid Infrastructure支持双栈网络部署

Oracle Grid Infrastructure IPv6 配置全指南:版本兼容性、SCAN VIP设置、防火墙规则与OCR路径优化 IPv6地址格式与GI安装程序兼容性问题 在Oracle Grid Infrastructure中部署IPv6网络,首要任务是确认版本兼容性。官方完整支持始于19

热心网友
04.27

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

三国问鼎山河攻城玩法是什么-三国问鼎山河如何玩攻城
游戏攻略
三国问鼎山河攻城玩法是什么-三国问鼎山河如何玩攻城

三国问鼎山河:攻城略地制胜攻略与核心技巧解析 想要在《三国问鼎山河》的乱世中崛起并最终一统天下?掌握高效攻城玩法无疑是展现你战略眼光与操作实力的核心环节。这不仅是兵力的正面较量,更是对玩家战术智慧、资源调配与团队协作能力的全方位考验。 战前准备:深度侦察与精准布阵 成功的攻城战始于万全的准备。切忌盲

热心网友
04.29
时空猎人觉醒职业推荐时空猎人觉醒全职业觉醒技能与强度分析
游戏攻略
时空猎人觉醒职业推荐时空猎人觉醒全职业觉醒技能与强度分析

职业选择:决定你的战斗节奏与成长路径 在《时空猎人:觉醒》的世界里,选对职业,几乎就决定了你接下来的战斗体验和成长效率。当前版本三大职业体系,风格迥异,各有千秋,分别对应着不同的操作习惯和养成策略。下面,我们就结合实战表现、技能机制和不同阶段的适配性,来聊聊更具参考价值的职业选择思路。 枪械师:远程

热心网友
04.29
币圈虚拟货币交易深度最佳的七大加密货币交易所客户端下载大全
web3.0
币圈虚拟货币交易深度最佳的七大加密货币交易所客户端下载大全

币圈交易深度最强的七大加密货币交易平台 对于交易者而言,平台的流动性深度是决定交易体验和策略执行效率的关键。一个深度足够的市场,意味着大额订单能迅速成交,同时滑点成本更低。今天,我们就来盘点一下在交易深度方面表现最为突出的七大加密货币交易所,并附上相关的客户端获取信息,供您参考。 币圈虚拟货币交易深

热心网友
04.29
人生导师美式要饭兑换码大全人生导师美式要饭礼包激活码分享
游戏攻略
人生导师美式要饭兑换码大全人生导师美式要饭礼包激活码分享

这是一款以黑色幽默解构生存困境的独立游戏 粗粝的手绘风格,勾勒出一座霓虹闪烁的虚构都市。在这里,你将扮演一名初来乍到的流浪者,身无分文,举目无亲。唯一的目标?就是活下去,撑过接下来的每一个昼夜。没有强制的主线,也没有明确的任务提示,游戏呈现的是一套真实到近乎残酷的底层生存逻辑:翻检垃圾桶,寻找可能存

热心网友
04.29
洛克王国世界巨灵石怎么获取-洛克王国世界巨灵石获取方法
游戏攻略
洛克王国世界巨灵石怎么获取-洛克王国世界巨灵石获取方法

洛克王国世界巨灵石速刷攻略:高效获取全渠道解析 在洛克王国中,世界巨灵石是至关重要的核心资源,无论是用于兑换稀有装备、高级道具,还是招募强力宠物,都不可或缺。资源积累的效率,直接决定了玩家冒险旅程的推进速度与体验深度。那么,如何系统性地高效获取世界巨灵石呢?本文将为您全面梳理几条已验证的高效路径与实

热心网友
04.29