Shiro反序列化漏洞原理详解及复现
漏洞介绍:
pache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。
影响版本:
Apache Shiro < 1.2.4
漏洞复现
1.采用vulhub的shiro环境docker-compose up -d,访问8080端口测试是否成功
![图片[1]-Shiro反序列化漏洞原理详解及复现](http://www.20xiaohai.cn/wp-content/uploads/2023/10/image-31-1024x500.png)
2.Shiro是一款开源安全框架,用于身份验证、授权和会话管理
在登录时,勾选记住密码,随意输入账户密码,查看响应报文
![图片[2]-Shiro反序列化漏洞原理详解及复现](http://www.20xiaohai.cn/wp-content/uploads/2023/10/image-32-1024x774.png)
响应包里有Set-Cookie:rememberMe=deleteMe,就说明这是shiro框架,
3.是否存在漏洞我们只能去赌它用的是默认密钥
客户端在点击remember me的时候,服务器会生成一个cookie,cookie采取banse64以及aes的加密手段,在存在漏洞的shiro版本,aes的加密存在默认的密钥
kPH+bIxk5D2deZiIxcaaaA==
漏洞利用:
我们可以用shiro反序列化漏洞利用工具来进行利用
![图片[3]-Shiro反序列化漏洞原理详解及复现](http://www.20xiaohai.cn/wp-content/uploads/2023/10/image-33.png)
![图片[4]-Shiro反序列化漏洞原理详解及复现](http://www.20xiaohai.cn/wp-content/uploads/2023/10/image-34.png)
shiro漏洞原理
Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会将用户信息加密,加密过程:用户信息=>序列化=>AES加密=>base64编码=>RememberMe Cookie值。如果用户勾选记住密码,那么在请求中会携带cookie,并且将加密信息存放在cookie的rememberMe字段里面,在服务端收到请求对rememberMe值,先base64解码然后AES解密再反序列化,这个加密过程如果我们知道AES加密的密钥,那么我们把用户信息替换成恶意命令,就导致了反序列化RCE漏洞。在shiro版本<=1.2.4中使用了默认密钥kPH+bIxk5D2deZiIxcaaaA==,这就更容易触发RCE漏洞。
所以我们Payload产生的过程:
命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值
漏洞防御
升级shiro版本






















