浅谈json参数解析对waf绕过的影响
字数 1558 2025-08-29 08:31:42
JSON参数解析对WAF绕过的影响 - 深度技术分析
0x00 背景介绍
在Web应用安全领域,WAF(Web应用防火墙)是保护网站免受攻击的重要防线。然而,由于HTTP协议支持多种数据传输格式,特别是JSON格式的广泛使用,使得攻击者可以利用JSON解析特性绕过WAF防护。
本文详细分析JSON格式数据在PHP+MySQL环境中解析时的特殊字符处理机制,以及如何利用这些特性绕过WAF防护。
0x01 基础概念
1.1 传统SQL注入示例
考虑以下PHP代码:
<?php
$id = $_GET['id'];
$sql = "select * from article where id=$id";
mysql_query($sql,$conn);
?>
攻击者可通过构造URL进行注入:
article.php?id=1 and 1=1
1.2 WAF防护原理
WAF通过检测HTTP请求中的恶意关键字(如"and 1=1")进行阻断。攻击者常用变形手法绕过:
and/**/1=1and%0a1=1and+1=1
0x02 JSON解析特性
2.1 JSON转义字符
JSON格式数据在解析时会进行特殊字符转义:
\"→"\\→\\n→ 换行符\uXXXX→ Unicode字符
2.2 测试环境
- PHP 5.4.39
- MySQL 5.1.73
- 测试代码:
<?php
include_once 'global.php';
$id = json_decode($_GET['id'])->id;
for($i = 0; $i < strlen($id); $i++) {
printf("%x",ord($id[$i]));
echo ",";
}
$arc = getArticleInfo($id);
?>
0x03 编码探测与分析
3.1 URL编码探测
测试URL格式:
http://127.0.0.1/phpaacms/show.php?id={"id":"31 and%(00-FF)1=1"}
测试结果:
- 仅
%20(空格)和%2B(+)能被正确解析并作为SQL分隔符 - 其他常见分隔符(
%0A,%0B等)无法被json_decode解析
3.2 转义字符探测
测试URL格式:
http://127.0.0.1/phpaacms/show.php?id={"id":"31 and\%(00-FF)1=1"}
有效转义字符:
\f(%66)\n(%6E)\r(%72)\t(%74)
这些字符被解析后可作为MySQL单词分隔符。
3.3 Unicode编码探测
测试URL格式:
http://127.0.0.1/phpaacms/show.php?id={"id":"31 and\u00(00-FF)1=1"}
有效Unicode编码:
\u0009(制表符)\u000A(换行)\u000B(垂直制表符)\u000C(换页)\u000D(回车)\u0020(空格)\u002B(+)
3.4 单词内插入测试
测试URL格式:
http://127.0.0.1/phpaacms/show.php?id={"id":"31 an\%(00-FF)d 1=1"}
测试结果:
- 所有转义字符都会破坏SQL语法
- 无法在单词内部插入转义字符实现绕过
3.5 十六进制编码测试
\00-\FF格式:
http://127.0.0.1/phpaacms/show.php?id={"id":"31 and(00-FF) 1=1"}
\x00-\xFF格式:
http://127.0.0.1/phpaacms/show.php?id={"id":"31 and\x(00-FF)1=1"}
测试结果:
- 两种格式均无法被json_decode正确解析
0x04 有效绕过字符总结
在JSON环境下,以下字符可作为MySQL分隔符绕过WAF:
| 类型 | 有效字符 |
|---|---|
| URL编码 | %20 (空格), %2B (+) |
| 转义字符 | \f, \n, \r, \t |
| Unicode编码 | \u0009, \u000A, \u000B, \u000C, \u000D, \u0020, \u002B |
0x05 实战绕过案例
5.1 针对某云WAF的绕过
-
URL编码绕过:
%20被拦截%2B未被拦截
-
转义字符绕过:
- 使用
\r,\f,\n,\t均未被拦截
- 使用
-
注释符变形:
传统/**/可能被拦截,但JSON格式下可使用:{\"id\":\"1 and\/**\/1=1\"}\/会被解析为/,形成有效分隔符
0x06 防御建议
-
WAF改进方向:
- 加强对JSON格式数据的深度解析
- 考虑JSON解码后的实际执行效果
- 增加对转义字符和Unicode编码的检测
-
开发建议:
- 使用参数化查询而非字符串拼接
- 对JSON解析后的数据进行严格过滤
- 实施最小权限原则
0x07 结论
JSON参数解析的特殊性为WAF绕过提供了新的途径。WAF产品需要充分考虑业务系统的数据交互流程,特别是各种编码格式的解析细节,才能有效防御此类绕过攻击。同时,开发者应从源头避免SQL注入漏洞的产生,而非单纯依赖WAF防护。