heapdump泄露Shiro key从而RCE

admin 2022年12月5日21:08:55评论111 views字数 1295阅读4分19秒阅读模式

1. 简介

我搭建了一个Spring heapdump泄露shiro key从而RCE的漏洞环境,Github地址:https://github.com/P4r4d1se/heapdump_shiro_vuln
漏洞利用条件:

  • Spring Shiro环境

  • 存在heapdump文件泄露

  • 存在可利用链

2. 漏洞原理

Shiro相关的漏洞原理和调试分析已经有很多大佬分享过了,这里不再赘述,这里主要针对这个漏洞环境进行说明:
(1)Spring其实是有自己默认安全框架的,叫Spring Security,但可能有的开发用Shiro用习惯了,将Spring Securiy替换成了Shiro,这种情况并不少见,比如若依就是Spring shiro。

heapdump泄露Shiro key从而RCE

(2)在有key的情况下,即使是最新版的Shiro也一样存在漏洞,而且在很多时候都会因为开发、部署等问题导致shiro key的泄露。
(3)Shiro大于1.2.4的版本中,在没有开发人员人工干预的情况下key改为了随机生成,这个随机生成是在每次启动Web环境的时候,重启前这个key不会改变,可以在JVM虚拟机内存里找到。

heapdump泄露Shiro key从而RCE

(4)Spring的heapdump文件就是从JVM虚拟机内存导出的。
综上所述导致了这个组合漏洞的产生。

3. 漏洞演示

加载漏洞环境后,可以看到Shiro版本为1.8.0:


heapdump泄露Shiro key从而RCE


访问8080端口的/actuator/heapdump获取heapdump文件:


heapdump泄露Shiro key从而RCE



获取其中的shiro key,我常用的有两种方式:
(1)JDumpSpider:https://github.com/whwlsfb/JDumpSpider
这个小工具可以自动爬取heapdump中的变量信息,比较方便,坏处是可能会漏掉没在爬取列表中的信息。
直接运行:java -jar JDumpSpider.jar heapdump即可自动获取变量信息,这里获取到ShiroKey:

heapdump泄露Shiro key从而RCE

(2)jvisualvm.exe:Java自带的工具,默认路径为:JDK目录/bin/jvisualvm.exe
这个工具需要手动去找想要的信息,在过滤里输入org.apache.shiro.web.mgt.CookieRememberMeManager,圈出来的16个字节的值就是key:

heapdump泄露Shiro key从而RCE

用一个Python小脚本转成base64编码后的Shiro key:

用一个Python小脚本转成base64编码后的Shiro key:

import base64
import struct

print(base64.b64encode(struct.pack('<bbbbbbbbbbbbbbbb', 109,-96,12,-115,33,59,24,112,44,124,56,110,-15,59,1,-41)))

heapdump泄露Shiro key从而RCE

使用获得的key进行利用成功:


heapdump泄露Shiro key从而RCE


重新启动服务器再次获取shiro key,可以看到key改变了,验证了漏洞原理的第3点,每次启动生成一个随机key:


heapdump泄露Shiro key从而RCE


改用新的key仍然可进行利用:


heapdump泄露Shiro key从而RCE


转自原文链接:https://xz.aliyun.com/t/11908


原文始发于微信公众号(渗透测试研究中心):heapdump泄露Shiro key从而RCE

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年12月5日21:08:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   heapdump泄露Shiro key从而RCEhttps://cn-sec.com/archives/1446131.html

发表评论

匿名网友 填写信息