💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
[TOC] ## Fastjson 简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。 fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。 除了这个fastjson以外,还有Google开发的Gson包,其他形式的如net.sf.json包,都可以实现json的转换。方法名称不同而已,最后的实现结果都是一样的。 ## 常见的利用方式 1. 反序列化常用的两种利用方式,一种是基于rmi,一种是基于ldap。 2. RMI是一种行为,指的是Java远程方法调用。 3. JNDI是一个接口,在这个接口下会有多种目录系统服务的实现,通过名称等去找到相关的对象,并把它下载到客户端中来。 4. ldap指轻量级目录服务协议。 ## 存在的限制 * 基于rmi的利用方式:适用jdk版本:JDK 6u132,JDK 7u131,JDK 8u121之前; * 在jdk8u122的时候,加了反序列化白名单的机制,关闭了rmi远程加载代码。 * 基于ldap的利用方式,适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前。 * 在Java 8u191更新中,Oracle对LDAP向量设置了相同的限制,并发布了CVE-2018-3149,关闭了JNDI远程类加载。 * 可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。 ## 常见的漏洞 * fastjson 1.2.24反序列化导致任意命令执行漏洞(CVE-2017-18349) * Fastjson 1.2.47远程命令执行漏洞 ## 检测目标是否存在Fastjson 未知目标是否使用 Fastjson ,但站点有原始报错回显 **如果站点有原始报错回显**,可以用不闭合花括号的方式进行报错回显,报错中往往会有fastjson的字样 **无回显**,通过DNS回显的方式盲区分 Fastjson 和 Jackson 我使用以下payload测试 ``` {"zeo":{"@type":"java.net.Inet4Address","val":"745shj.dnslog.cn"}} ``` 最终收到dnslog 最新版本1.2.67依然可以通过dnslog判断后端是否使用fastjson ``` {"@type":"java.net.Inet4Address","val":"dnslog"} {"@type":"java.net.Inet6Address","val":"dnslog"} ```