0x01 Shiro介绍
Apache Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能,Shiro框架直观、易用、同时也能提供健壮的安全性。
Apache Shiro反序列化漏洞分为两种:Shiro-550、Shiro-721
0x02 Shiro-550 反序列化漏洞
CVE-2016-4437
漏洞原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的Cookie,在服务端对rememberMe的Cookie值先base64解码然后AES解密在反序列化,就导致了反序列化RCE漏洞。
影响范围
Apache Shiro <= 1.2.4
原因分析
Apache Shiro默认使用了CookieRememberMeManager,其处理Cookie的流程:得到rememberMe的Cookie值 -> Base64解码 -> AES解密 ->反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。
rememberMe生成过程:序列化->AES加密->Base64编码->生成rememberMe内容
服务端接收Cookie值时:检索Cookie中的rememberMe内容->Base64解密->AES解密(加密密钥硬编码) ->反序列化(未做处理)
AES的加密密钥在Shiro的1.2.4之前版本中使用的是硬编码,其默认密钥的base64编码后的值可在代码中找到,只要找到密钥后就可以通过构造恶意的序列化对象进行编码,加密,然后作为Cookie加密发送,服务端接收后会解密并触发反序列化漏洞。
漏洞特征
Shiro反序列化的特征:在返回包的Set-Cookie中存在rememberMe=deleteMe 字段
如可去发现
一种情况是多半发生在登录处,返回包中包含 rememberMe=deleteMe 这个字段
如下图:
另一种情况是直接发送源数据包,返回的数据包中不存在关键字,可以通过在发送数据包的Cookie中增加字段
rememberMe=deleteMe
然后查看返回包中是否存在关键字
工具自动检测
自动检测Shiro反序列化(burpsuite插件) ---- ShiroScanner
添加插件,自动发现
效果如下:
实战漏洞攻击
直接上工具
检测出存在漏洞,进行利用
注入内存马,连接WebShell
在尝试反弹Shell到VPS
0x03 Shiro-721 反序列化漏洞
Shiro Padding Oracle Attack
漏洞详情
Apache Shiro 存在高危代码执行漏洞。该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
漏洞原理
由于Apache Shiro cookie中通过 AES-128-CBC模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行。
影响版本
Apache Shiro < 1.4.2 版本
漏洞指纹
Set-Cookie:rememberMe=deleteMe
URL中有shiro字样
有一些时候服务器不会主动返回 rememberMe=deleteMe,直接发包即可。
利用技巧
1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进行利用, 看起来不是很好利用 但实际上有一些网站是开放注册的, 而且这个洞不需要知道服务端密钥 所以后续的利用还是可以同Shiro-550一样利用, 而且这里是AES加密的, 自带过WAF属性 ;
2.如果攻击没有生效, 可以试一下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe。
攻击流程
1.登录网站(勾选Remember),并从Cookie中获取合法的RememberMe。
2.使用RememberMe cookie作为Padding Oracle Attack的前缀。
3.加密 ysoserial 的序列化 payload,以通过Padding Oracle Attack制作恶意RememberMe。
4.重放恶意RememberMe cookie,以执行反序列化攻击。
工具推荐
参考链接:
https://github.com/inspiringz/Shiro-721
https://www.cnblogs.com/xiaozi/p/13239046.html
https://www.cnblogs.com/backlion/p/14077791.html
https://github.com/longofo/PaddingOracleAttack-Shiro-721