如何判断靶标是否使用 FastJSON
1. 报错信息
通过构造特殊的请求来触发应用程序的报错,并从报错信息中寻找线索
构造畸形 JSON 数据: 向目标API发送一个格式错误的JSON(例如,
{"a": 1, "b": "2",}
,多一个逗号)。如果服务器返回的错误信息中包含com.alibaba.fastjson
、fastjson.JSONException
或其他与 Fastjson 相关的关键字,那么就可以确定目标使用了 Fastjson尝试特定语法: Fastjson 在处理一些特殊类型时有其独特的语法。你可以尝试发送一个包含
@type
字段的 JSON,例如{"@type":"java.lang.Class","val":"com.alibaba.fastjson.JSON"}
。如果服务器返回了与这个字段相关的解析错误,那么目标可能使用了 Fastjson
2. 数值型数据
FastJSON 会把 01 解析成 1
FastJSON 1.2.70 会把 NaN 解析成 0
Fastjson 1.2.37 会抛出异常
3. 注释符
FastJSON 支持注释符
4. 单引号
FastJSON 的 Feature.AllowSingleQuote
是默认开启的,支持使用单引号包裹字段名
5. 缺失值
FastJSON 正常解析,会把缺失的值忽略掉
6. 大小写
FastJSON 在反序列化的时候,是对大小写不敏感的
7. 特殊符号
FastJSON 1.2.36 版本及后续版本支持同时使用 _
和 -
对字段名进行处理