0x01 前言
上次通过shiro反序列化拿下靶机后便谋生了想要看看他的key到底是怎么生成的想法,于是有了本篇文章。
0x02 梅开二度
还是老三样,这次遇到了一个合适的小羔羊,通过目录扫描发现heapdump
下载 heapdump 文件到本地,使用MemoryAnalyzer 分析,找到 shiro key
还不知道怎么找key的同学可以参考往期文章 Springboot Heap Dump实战利用分析
使用shiro反序列化漏洞综合利用工具进行测试,漏洞利用成功
0x04 KEY生成分析
接下来就是进行源码分析了,通过遍历目录找到 springboot 框架程序是打包成jar包运行的,在d:orderq 目录下面的order.jar 文件。
使用msf 进行文件的上传下载,把order.jar 下载回本地
jar包下载回本地,修改后缀成zip 格式,然后解压缩得到下面的文件。
现在的问题是我想把shiro的key找出来,这个key放在哪里呢?之前的key是通过heapdump文件分析出来的,我现在想从网站源代码找到这个key ,shiro的key 一般存放在两个地方,一个是springboot的配置文件,另一个是硬编码写在代码里面;通过查看配置文件,并没有找到shiro的key,如下图:
那这个key只能从源代码中才能找到,通过分析发现大部分网站的shirokey都是写在shiro-core-1.4.0.jar这个文件里面的,于是反编译shiro-core-1.4.0.jar;
通过使用 jadx 反编译 shiro-core-1.4.0.jar发现,shiro key 是动态生成的,一般都是写在org.apache.shiro.mgt.AbstractRememberMeManager这个java类里面的;如下图红色方框里面的代码就是用来自动生成shiro key。
0x05 反序列化分析
上面我已经分析了shiro key 是怎么生成的, 下一步我们来分析下,shiro 反序列化漏洞是怎么形成的。
通过反编译shiro-core-1.4.0.jar ,我发现shiro反序列化漏洞形成的原因分为两步,第一步是使用aes 解密客户端发送过来的cookie ;第二步是由于使用了java 里面的对象输入流ObjectInputStream,并调用readObject()方法触发了反序列化漏洞。具体的漏洞代码如下:
通过上面这段代码可以看到,第一步是解密cookie 字符串,第二步是反序列化。
第一步的解密函数的具体实现在包org.apache.shiro.crypto 下面的JcaCipherService类中可以找到,如下图红色方框里面的代码:
第二步的反序列化函数的具体实现在包org.apache.shiro.io 下面的DefaultSerializer类中可以找到,如下图红色方框里面的代码:
Shiro 反序列化漏洞最终形成。
0x06 免责声明
本文仅限于技术研究学习,切勿将文中技术细节用作非法用途,如有违者后果自负。
关于我们
“TERRA星环”安全团队正式成立于2020年,是贵州泰若数字科技有限公司旗下以互联网攻防技术研究为目标的安全团队。团队核心成员长期从事渗透测试、代码审计、应急响应等安服工作,多次参与国家、省级攻防演练行动,具备丰富的安服及攻防对抗经验。
团队专注于漏洞挖掘、漏洞研究、红蓝对抗、CTF夺旗、溯源取证、威胁情报、代码审计、逆向分析等研究。对外提供安全评估、安全培训、安全咨询、安全集成、应急响应等服务。
原文始发于微信公众号(TERRA星环安全团队):渗透测试|从实战分析Shiro反序列化漏洞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论