哈哈哈哈哈哈,评价是大粪题

写毕设很烦,不如吃一下这大粪题,看一个下午能不能解完

裸的 fury 反序列化,而且也不是用的 spring 框架
反序列化获取 object 后直接调用了一遍 toString
那么就不用管 readObject 什么的,其实就跟原生反序列化差不多
得找从 toString 到 rce 的链子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HttpUtil.createServer(8888).addAction("/", request, response -> {
String result;
String data = request.getParam("data");
if (data == null) {
response.write(IOReaderUtil.readToString("/tmp/desc.txt"), ContentType.TEXT_PLAIN.toString());
}
try {
Fury fury = Fury.builder().withLanguage(Language.JAVA).requireClassRegistration(false).build();
Object deserialize = fury.deserialize(Base64.getDecoder().decode(data));
result = deserialize.toString();
} catch (Exception e) {
result = e.getMessage();
}
response.write(result, ContentType.TEXT_PLAIN.toString());
}).start();

看一遍依赖项

  1. cn.hutoolJSONObject#put 可以调用非 jdk 类的 getter 方法

需要找 toString 到 put 的可能链

  1. InvokerTransformer 中还是可以 invoke 调到 rce 的

想着有无从 getter 到 rce 或者从 toString 到 rce

  1. ……看了一下午,发现想歪了,是要打二次反序列化