https://y4er.com/posts/wangdingbei-badbean-hessian2/.

https://xz.aliyun.com/t/10916#toc-29

https://paper.seebug.org/1814/#_1

https://github.com/bitterzzZZ/CVE-2021-43297-POC

这个 hessian 反序列化找到了 cve,但是不知道怎么用,当时找到了上面三个文章

# MyBean.toString

image-20220828201031737

题目给的 MyBean 可以调用 getter 方法

然后利用那个 cve 去调用这个 MyBean

# Hessian2Input.expect

image-20220828201421781

这里调用 toString 方法,然后跟着文章看到 Hessian2Input.readString ()

# Hessian2Input.readString

这里是 Hessian2 反序列化的开始。接下来就是如何在 readString () 中调用到 .expect() 了,然后触发 expect() 中的 readObject ()

image-20220828201813261

一共 256 个 case,从 .read() 中读取 tag:

image-20220828201931395

如果读到的 tag 不满足 case,那么调用 this.expect("string", tag);

# 问题

调试的时候发现了一点问题,根据 Y4er 师傅说的,在调用 readObject 时候 tag 为 67,然后在 readString 的时候 tag 任为 67

断点在 Hessian2Input.readObject

image-20220829103040186

跟进

image-20220829103137661

这里会调用 readBuffer 函数,并且最终 this._buffer[this._offset++] & 255 的结果是 67

但是看此时的 buffer,buffer [0] 是 67, buffer [1] 是 27

image-20220829103305882

然后跟进到 readString

image-20220829103434490

image-20220829103634670

此时的 offset 为 1,读出来的 tag 值为 27

image-20220829103656235

image-20220829103742038

就会走到这里

image-20220829104433968

# 发现

根据文章所说,我们在重写 Hessian2Output.writeString 的时候会对 aaa 字符串的 buffer 赋值为 67

image-20220829111648622

但是实际上无论赋值多少 buffer [0] 都会给到 67

image-20220829111729040

image-20220829111759271

# 解决

想要搞清这个问题,我们从 writeObject 开始

image-20220829141313185

image-20220829130911360

跟进

image-20220829141437915

进入

image-20220829141515781

可以看到这里会直接赋值为 67,因为此时 offset 为 0,所以 buffer [0] 赋值为 67

image-20220829141605804

然后又调用了 writeString

此时就是其他的类了,这样就是先在这里把长度写入,此处 value 为 obj,所以长度是 3

image-20220829141733871

然后进入这里

image-20220829141856172

image-20220829141942359

将其写入 buffer,然后返回

接着往下走就是和之前一样的了

image-20220829142036185

所以我们重写 writeString 的效果就是让第一个值为 67,现在的需求是让第一个第二个都是 67

那么只需要在原本的方法里面加一个

image-20220829142514263

没加之前 buffer 只有一个 67

image-20220829142618727

加了之后就有两个 67

image-20220829142651575

这样在第二次 read 的时候读取的 tag 也为 67

image-20220829142742036

最终调用 JNDI

image-20220829142814098

image-20220829142913030

请我喝[茶]~( ̄▽ ̄)~*

miku233 微信支付

微信支付

miku233 支付宝

支付宝

miku233 贝宝

贝宝