引言
工作中接触到shiro反序列化漏洞,看了看原理,
原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单。
影响版本
Apache Shiro < 1.2.4
特征判断
登录页面通常包含记住我的复选框,返回包中包含site-cookie:rememberMe=deleteMe字段。
过坑过程
发现可疑目标
通过以上信息,结合shiro的特征,基本上漏洞就存在了。
脚本测试
github里找到了大神们的脚本,测试了半天,看提示应该是存在漏洞,但是key却没有拿到。
找到脚本大神请教,修改python脚本中默认的key值,把注释掉的key值全部恢复,重新跑一下脚本问题依然存在。
怎么办?
怎么办?好不容易发现个疑似漏洞却挖不出来。。。。
继续搞
在大神的提醒下,试试gcm工具,上网查了一下gcm是个啥?
shiro的升级版,大概意思是使用默认的key值了,而是使用加密后的key值,暂且这么理解吧,反正我也记不住了,需要时可以去查。
找到了一个脚本工具shiro-exploit-master,github链接:https://github.com/Ares-X/shiro-exploit
按照说明执行,结果,结果见下图:
成功执行任意代码。