首页 > 其他分享 >Apache shiro 反序列化漏洞

Apache shiro 反序列化漏洞

时间:2022-11-04 18:37:29浏览次数:55  
标签:浏览器 rememberme Cookie shiro Apache 序列化 Shiro

Apache shiro简介

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

本文针对Shiro进行了一个原理性的讲解,从源码层面来分析了Shiro的认证和授权的整个流程,并在认证与授权的这个流程讲解冲,穿插说明rememberme的作用,以及为何该字段会导致反序列化漏洞。

反序列化漏洞的根源

shiro在用户登陆的时候,除了用户名和密码以外 还有一个可传递的选项,也就是shiro发序列化漏洞产生的根源,Rememberme。

Rememberme的核心作用时什么呢?就是用户在登录时勾选rememberme选项,Cookie中就会增加一个rememberme字段,该字段中会存储一些序列化数据,开发者可以指定rememberme字段的有效时间,同时开发者可以指定一些资源,这些资源允许携带rememberme字段的用户访问,由于rememberme是存储在浏览器中的,并在用户的每一次请求中被携带,所以只要不清除Cookie,用户就可以在rememberme的有效时间内,无需再次登陆,就可以访问指定资源。在不勾选rememberme的情况下,通常就是浏览器关闭,会话就会立刻结束,活着等待一段时间后结束,届时用户想要访问一些资源则需要重新登陆,勾选rememberme后,即使推出浏览器结束与服务端的会话,rememberme仍然存储在浏览器中,重新打开浏览器访问指定资源,浏览器在请求时仍会携带上rememberme,如此一来就不需要重新登陆了。

那么接下来就来分析rememberme是如何生成,以及如何实现无需登录即可访问指定资源的。

如果登陆的时候不勾选rememberme选项的情况下,Shiro是不会生成rememberme的,勾选了rememberme选项后,才会在认证的过程中生成该值。

生成rememberme的位置在DefaultSecurityManager的login方法中,如下图所示。

image-20221104181300823

位置就是在Shiro完成用户认证,生成一个新的Subject之后。跟进onSuccessfulLogin()方法,经过嵌套调用,来到AbstractRememberMeManager的onSuccessfulLogin方法

image-20221104181312034

在该方法中,会先判断此次请求中remebmberme字段是否存在,如果存在则调用rememberIdentity()方法,想要知道rememberme中存储了什么东西那么就要继续深入。

image-20221104181322157

这里是获取到了一个PrincipalCollection对象,继续深入。

image-20221104181330579

接下来就是将这个PrincipalCollection转化成byte数组。这个方法很关键,我们需要跟入看一下

image-20221104181339903

Shiro为什么会有反序列化漏洞,以及rememberme所传递的数据就究竟是什么,其实就是一个序列化后的PrincipalCollection对象,而这个encrypt就是通过AES来加密序列化后的数据,密钥呢?当然就是硬编码在AbstractRememberMeManager类中的这段base64编码后的字符串了,如下图所示

图片

最后的最后,Shiro会将这段加密后的数据base64编码一遍,然后放入Cookie中,至此Shiro生成rememberme的过程就结束了

image-20221104181402955

那么知道了rememberme是怎么加密生成的,那么自然也就可以很轻易的解密了,尤其还是在密钥硬编码在代码中的这种情况,下面是解密的demo

image-20221104181412887

那么反序列化漏洞产生的点在哪里呢?当用户在登录时勾选了rememberme的时候,Shiro会返回一个rememberme通过Cookie字段传递,然后存储在浏览器中,正常情况下当用户关闭浏览器或者手动删除浏览器中存储的SesseionID的时候,与服务端的当前会话就结束了,当下次打开浏览器再此访问服务端的时候,就需要重新登录。而勾选了rememberme的用户登录后,关闭浏览器后,会话同样会关闭,但是下次打开浏览器请求访问服务端的时候,Cookie中会携带Rememberme来进行请求,从而达到无需登录的效果。

漏洞的产生关键就在于再重新建立会话的这个过程,所以想要触发rememberme的话请求包中就不能有SessionID,删除SessionID后再携带rememberme进行一次请求就可以触发rememberme的反序列化点,如下图所示

image-20221104181423725

最终通过base64解码,然后AES解密,解密后的结果再经过反序列化,就还原成了一个PrincipalCollection对象,至此Shiro rememberme的生成以及作用,还有如何触发rememberme反序列化

image-20221104181438933

小结

Apache Shiro是一款相当优秀的认证授权框架,虽然在护网等大型攻防项目中,经常被作为突破口,但是仍然瑕不掩瑜,shiro的反序列化在流量识别中是比较容易判断的,因为序列化数据的传递必须要通过Cookie中的rememberme字段,但是纵使识别出来,但是如果不知道密钥的话,也无法得知传递的内容。

标签:浏览器,rememberme,Cookie,shiro,Apache,序列化,Shiro
From: https://www.cnblogs.com/gk0d/p/16858717.html

相关文章

  • Fastjson反序列化(二)
    前言Fastjson1.2.24版本的远程代码执行漏洞可谓是开辟了近几年来Fastjson漏洞的纪元。在Fastjson1.2.24版本反序列化漏洞初次披露之后,官方针对这个漏洞进行了修补。然......
  • BindingException异常/SqlSessionXXX报错/org.apache.ibatis.binding.BindingExceptio
    application.yml中设置了mapper.xml的扫描路径,但是忘记了config包下面又手动写了一个SessionFactoryConfig。写这个类是因为一开始报错:SqlFactoryXXX(记不清了)的异常,后来百......
  • Linux 下安装 Apache 并进行初步配置
    实验环境:Linux5.19.13-arch1-1konsole22.08.2apache2.4.54-2一.概述ApacheHTTPServer(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,是世界使用......
  • Apache(httpd)
    一、什么是Apache?     Apache(或httpd)服务,是Internet上使用最多的Web服务器技术之一,通俗来讲就是一个用于搭建网站的服务。有两个版本:http:超文本传输协议,通过......
  • 安装配置Apache
    在centos02安装DSN服务器,DNS区域名字为bdqn,Com,在DNS区域中添加www主机指向网站服务器在centos01安装Apache服务器优化Apache服务,客户端使用​​www.bdqn.com​​访问网站......
  • shiro源码篇 - 疑问解答与系列总结,你值得拥有
    开心一刻小明的朋友骨折了,小明去他家里看他。他老婆很细心的为他换药,敷药,然后出去买菜。小明满脸羡慕地说:你特么真幸福啊,你老婆对你那么好!朋友哭得稀里哗啦的说......
  • piapiapia(代码审计、反序列化逃逸、函数绕过)
    wp进入题目,一个登录框,F12和源代码没有看到提示,robots.txt也没有东西。于是试一试访问www.zip,没想到有源码,省了扫描目录的时间。里面有6个php文件,使用Seay审计代码,简单看......
  • GSON 特殊类型支持序列化和反序列化,如LocalDateTime
      GSON特殊类型支持序列化和反序列化,如LocalDateTime DateTimeFormatterdateTimeFormatter=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss");Gsong......
  • 使用cpolar发布树莓派网页(apache2网页的发布)
    在上篇介绍中,我们成功的在本地树莓派上建立起一个简单网页,不过在通常情况下,树莓派并不会随身携带,而是将其放在固定的地方(如家里),想要在其他地方访问到树莓派上的网页,就需要将......
  • Apache设置外网访问
    我的win7系统,apache2.2首先找到apache配置文件httpd.conf,找到如下一块配置:OptionsFollowSymLinksAllowOverrideNoneOrderdeny,allowDenyfromall将最后一个Denyfromal......