fastjson反序列化漏洞

Fastjson

特点:速度快、使用广泛、测试完备、使用简单、功能完备

使用方法
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.44</version>
</dependency>

工程:fastjson-vul
对象类:User.java
测试类:JsonTest.java

结果

序列化的时候,会调用成员变量的get方法,私有成员变量不会被序列化

反序列化的时候,会调用成员变量的set方法,public修饰的成员全部自动赋值

反序列化方法

JSON.parseObject() 返回实际类型对象 √

User user1 = JSON.parseObject(serializedStr, User.class);

JSON.parse() 返回JsonObject对象

Object obj1 =JSON.parse(serializedStr);
type自省
{name= 'wuya', age=66, flag=true, sex='boy',address='null'}

子类中包含接口或抽象类的时候,类型丢失

{"@type":"com.wuya.test.User","age":33,"flag":false,"name":"wuya"}

漏洞原理

流程

  1. 序列化字符准备类名、dataSourceName属性和autoCommit属性
  2. JdbcRowSetImpl反序列化,调用
    JdbcRowSetImpl的setAutoCommit()
  3. setAutoCommit()调用connect()
  4. connect()调用lookup()连接到LDAP/RMI服务器
  5. 下载恶意代码到本地,执行,攻击发生
Fastjson在序列化的时候,会调用成员变量的get方法,私有成员变量不会被序列。
Fastjson在反序列化的时候,会调用成员变量的set方法,public修饰的成员全部自动赋值。
原理:由于它在反序列一个对象的时候会去自动调用这个对象的set方法,所以如果这个set方法中有一些危险的操作,那么就会导致漏洞的产生。

利用思路:上面说了在fastjson反序列化的时候会自动调用对象的set方法,所以我们就有了利用思路,如果我们可以找到一个类,并且这个类中有set方法,这个类的set方法中有一些敏感操作,并且每次运行任意java代码的时候又必须调用这个类,那我们就可以利用这个漏洞了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值