讲师中心 微信公众号
AI工具推荐 视频效率加速

怎样应对基于Base64或Hex编码绕过WAF的SQL注入

夏敏大大_9750

夏敏大大_9750

发布时间:2026-11-06 10:36:01

|

216人浏览过

|

来源于php中文网

原创

因为PHP的base64_decode()对非法字符静默跳过,而WAF未模拟该容错解码行为,导致其规则匹配的是污染前字符串,后端却还原出真实恶意payload,造成检测视图不一致。

怎样应对基于base64或hex编码绕过waf的sql注入

Base64编码绕过WAF时,PHP后端为什么可能“放行”?

因为PHP的base64_decode()函数在遇到非法字符(如@、!、%)时默认会静默跳过,不报错也不中断解码。WAF若只做简单字符串匹配(比如查union select),而没模拟PHP这层行为,就看不到真实还原后的SQL payload。

常见错误现象:?id=MTIz能正常访问,?id=VVNIU0VMSUVDVA==(UNIONSELECT的base64)却被拦截——说明WAF做了base64检测;但?id=U@!NIONSE@!LECT却成功执行,暴露了它没做“容错解码”。

  • 不要只检查原始参数是否含base64_字样,要实际调用base64_decode($input, true)(PHP 8.2+)并捕获ValueError来判断是否为有效编码
  • 对解码后的内容再做一次WAF规则扫描,而不是仅扫原始参数
  • 若业务逻辑允许,可限制base64输入长度(如超过128字符直接拒绝),避免长payload绕过内存检测

十六进制编码(0x…)绕过的关键检测点

MySQL原生支持0x414243这种写法表示字符串ABC,攻击者常把' or 1=1 --转成0x27206f7220313d31202d2d,绕过对单引号和空格的规则。

容易踩的坑:WAF只正则匹配0x[0-9a-fA-F]+就拦截,结果把合法的十六进制ID(如user_id=0x1a2b)也误杀。

  • 检测必须结合上下文:只有出现在SQL关键字附近(如WHERE、AND、OR之后)的0x...才需重点审查
  • MySQL中0x后必须是偶数位十六进制字符,奇数位(如0x123)会报错,可用此做快速过滤
  • 注意0x与空格/括号之间无强制分隔,WHERE0x27=0x27也是合法语法,WAF不能只靠空格切分token

如何让WAF真正“看见”解码后的内容?

核心不是堵死所有编码形式,而是统一解码视图。WAF与后端必须使用相同的字符集、解码顺序、容错策略,否则永远存在“保安看单号,收件人拆包裹”的错位。

  • 对URL参数先做urldecode(),再做utf8_decode()(若后端用GBK,此处应为mb_convert_encoding(..., 'GBK', 'UTF-8'))
  • 对疑似base64字段,用base64_decode($s, true)尝试解码;失败则保留原值;成功则将解码结果加入检测队列
  • 禁用多层嵌套编码(如base64(base64('union'))),可在WAF层限制base64解码深度≤1
  • 记录解码链路日志:原始值→第一次解码→第二次解码→最终送入规则引擎的字符串,便于回溯绕过路径

为什么“加干扰字符”在Base64绕过里特别危险?

像U@!NIONSE@!LECT这类变体,不是所有WAF都能识别。有些规则引擎会把@!当作噪声过滤掉再匹配,有些则直接按字面串查——结果就是同一套规则,在不同WAF版本或配置下表现不一致。

更隐蔽的是PHP的base64_decode()对末尾填充字符=的宽松处理:UU5JT1...=和UU5JT1...(缺=)可能都解出相同结果,但WAF若严格校验base64格式,就会漏掉后者。

真正难防的不是编码本身,而是WAF与业务代码在“什么算合法输入”上缺乏共识。比如后端接受trim($input)后再解码,WAF却没做trim,那 UU5JT1... (首尾空格)就能穿过去。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4803

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

991

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1269

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6821

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3523

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6800

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

9441

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1270

2024.04.29

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP开发基础之数据库篇(PDO)
PHP开发基础之数据库篇(PDO)

共10课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn