shiro小记

shiro小记

Shiro具体功能

 1)身份认证/登录,验证用户是不是拥有相应的身份
 2)用户访问权限控制验证,验证某个已认证的用户是否拥有某个权限,如:验证某个用户是否拥有某种角色权限或者验证某个用户对某个资源是否具有某个权限。
 3)会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中。在非 web 或 EJB 容器的环境下可以任意使用Session API。
 4)加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。
 5)Web支持,可以非常容易的集成到Web环境。 Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率。
 6)shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去
 7)Remember Me(记住我)服务,获取用户关联信息而无需登录。
 8)启用单点登录(SSO)功能。
 9)等等。

Shiro漏洞原理

 1)Shiro框架提供了记住我这个功能(RemeberMe),用户登陆成功后会生成一个经过加密的Cookie。其Cookie的Key的值为RememberMe,Value的值是先序列化,然后AES加密,最后Base64编码得到的结果。
 这个服务端解析cookie的正向流程是:检索RemeberMe cookie的值—>Base64解码—>AES解码—>反序列化。出现漏洞的原因是在反序列化时未进行任何过滤,所以导致会触发远程代码执行漏洞。需注意只要RemeberMe的AES加密密钥泄露,无论shiro是什么版本都会导致反序列化漏洞。
 2)我们已知正向流程了那么反向流程也就出来了为:恶意命令—>序列化—>AES加密—>base64编码—>发送Cookie。
 Shiro1.2.4版本之前AES的加密密钥为硬编码在代码中,其默认密钥的Base64编码后的值为kPH+bIxk5D2deZiIxcaaaA==,之后版本官方去掉了硬编码的密钥,通过每次随机生成一个密钥来解决反序列化漏洞。可通过各种途径搜索收集密钥然后爆破以提高对该漏洞的利用成功率。

Shiro漏洞指纹

请求包的cookie中存在rememberMe字段,可发送rememberMe=1等字段测试
查看响应包中是否存在set-Cookie: rememberMe=deleteMe
URL中是否存在shiro字样
有时候服务器不会主动返回remeberMe=deleteMe,直接发包即可

posted @ 2022-08-15 16:22  木捏牛  阅读(30)  评论(0编辑  收藏  举报