网站首页 > java教程 正文
前言
Apache Shiro是一个功能强大且灵活的开源安全框架,可以干净地处理身份验证,授权,企业会话管理和加密。
漏洞分析
当Shiro接收到来自未经身份验证的用户的请求时,如果cookie中携带了rememberMe字段,它将对其值进行Base64解码,AES解密,Java序列化(ObjectInputStream)反序列化等一系列命令。
但是,在Shiro <= 1.2.4的版本中,Shiro使用的AES解密密钥是固定的,默认值为kPH+bIxk5D2deZiIxcaaaA==。此时,如果利用特定的rememberMe值,可以利用该漏洞,执行远程代码。
尽管经过多个版本更新,官方为解决反序列化漏洞本身,而是将固定的key改为随机生成。所以,哪怕使用Shiro的最新版本,如果开发者使用自定义的方式替代随机生成的key或者使用网上一些开源代码,仍有可能存在该漏洞。
Shiro发现
通过利用Shiro提供的RememberMe功能。在请求的Cookie中设置rememberMe,值为简单的字符串。服务器在解析rememberMe时,会在base64解码时抛出异常,调用removeFrom在响应中设置rememberMe=deleteMe。
这种情况可以用来检测是否使用Shiro。
key检测和利用
如上文所示,当从cookie中检测到rememberMe的字段时,Shiro会进行解码解码反序列化操作。当这一系列操作成功的话,就会得到用户信息;失败时,会在响应中设置rememberMe=deleteMe。
因此,可以构造特定的payload与常用的key进行ASE加密,来检测key是否正确。在Shiro 1.4.2版本中,将ASE的加密方式从CBC改为了GCM,在检测时需要通过两种方式分别进行测试。以下的测试使用的为GCM的方式。
当使用错误的key时:
当使用正确的key时:
当知道了key之后,就可以通过反序列化漏洞来执行命令。
对远程服务器执行命令:
总结
当使用Apache Shiro时尽量使用高版本的Shiro,尽可能避免使用硬编码的key。当使用的开源项目中用到了Shiro,查看是否存在该漏洞。
猜你喜欢
- 2024-12-01 fastjson 发布关于“反序列化远程代码执行漏洞”的安全公告
- 2024-12-01 PHP反序列化知识点总结
- 2024-12-01 漏洞预警|Apache Dubbo 存在反序列化漏洞
- 2024-12-01 PayPal严重漏洞可通过不安全的JAVA反序列化对象
- 2024-12-01 Apache Dubbo 被曝出“高危”远程代码执行漏洞
- 2024-12-01 序列化与反序列化——FastJSON、Jackson、Gson性能测试
- 2024-12-01 漏洞预警|Apache MINA SSHD反序列化漏洞
- 2024-12-01 【预警通报】关于WebLogicT3存在反序列化高危漏洞的预警通报
- 2024-12-01 Fastjson全版本远程代码执行漏洞曝光,降维发布预警
- 2024-12-01 【预警通报】关于ApacheOFBizRMI反序列化远程代码 执行高危漏洞的预警通报
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)