一场实战中的Jboss反序列化绕过
2025-05-24 00:19:31

梦开始的地方

事出有因

一眼Jboss反序列化的路由,我们拿工具梭哈一下

极好的,存在反序列化的漏洞,但是真的会这么简单吗?

在进行命令执行时,则发生了报错。

我们先简单了解一下Jboss反序列化

该漏洞位于JBoss的HttpInvoker组件中的ReadOnlyAccessFilter过滤器中,其doFilter方法在没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致恶意访问者通过精心设计的序列化数据执行任意代码。

而在通常情况下,使用的都是cc的反序列化链

在我们的这次实战环境中出现了以下报错

可以发现调用栈进入了InvokerTransformer的readObject方法进行了检测,而默认配置是不允许进行反序列化的,这里的cc依赖的版本应该在3.2.2及以上,修复了反序列化漏洞。

真的无法战胜吗。。。?

好不容易找到一个存在漏洞的服务器,难道就要这样放弃吗?尝试一下cb的链子

curl http://xxxx/invoker/JMXInvokerServlet --data-binary @1 --output result.txt

失败,没有cb依赖。

再次尝试jboss自带的反序列化链,失败

尝试手搓了一条不在常规内的cc链,依然被过滤

只有URLDNS带来捷报。。。。接下来该怎么做呢

会赢的

既然URLDNS能够出网,那么我们可以尝试打一个依赖探测去查找可以利用的反序列化链

https://github.com/kezibei/Urldns/tree/main

https://github.com/vulhub/java-chains

利用hashmap反序列化key和value时,若value不存在则跳出循环,不会触发urldns链,在检测是否存在相关依赖

存在7u21,立马ping了一下试试,极好的,能够利用

在接下来打内存马的过程中发现似乎是jboss的版本太低了,和jmg生成的内存马不太兼容,因为时间问题,这里也没有去调试自己写个内存马,直接使用java实现的反弹cmd,执行命令上线c2了

Prev
2025-05-24 00:19:31