Shiro反序列化漏洞原理详解及复现

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反序列化漏洞原理详解及复现

2.Shiro是一款开源安全框架,用于身份验证、授权和会话管理

在登录时,勾选记住密码,随意输入账户密码,查看响应报文

图片[2]-Shiro反序列化漏洞原理详解及复现

响应包里有Set-Cookie:rememberMe=deleteMe,就说明这是shiro框架,

3.是否存在漏洞我们只能去赌它用的是默认密钥

客户端在点击remember me的时候,服务器会生成一个cookie,cookie采取banse64以及aes的加密手段,在存在漏洞的shiro版本,aes的加密存在默认的密钥

kPH+bIxk5D2deZiIxcaaaA==

漏洞利用:

我们可以用shiro反序列化漏洞利用工具来进行利用

图片[3]-Shiro反序列化漏洞原理详解及复现
图片[4]-Shiro反序列化漏洞原理详解及复现

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版本

© 版权声明
THE END
喜欢就支持一下吧
点赞258 分享