shiro安全
type
status
date
slug
tags
summary
category
icon
password
渗透和awd里面都遇到了,web手说这个容易…那就看看呗,反正也得多看java,这把当个web手呗
Shiro-550反序列化漏洞(CVE-2016-4437)
漏洞简介
shiro-550主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。
特征:
cookie中含有rememberMe字段
修复建议:
- 更新shiro到1.2.4以上的版本。
- 不使用默认的加密密钥,改为随机生成密钥。
漏洞原理
在Apache Shiro<=1.2.4版本中AES加密时采用的key是硬编码在代码中的,于是我们就可以构造RememberMe的值,然后让其反序列化执行。
Primary Cocnerns(基本关注点):
- Authentication(认证):经常和登录挂钩,是证明用户说他们是谁的一个工作
- Authorization(授权):访问控制的过程,即,决定‘谁’可以访问‘什么
- Session Management(会话管理):管理用户特定的会话,即使在非web或是EJB的应用中
- Crytography(加密):通过加密算法保证数据的安全,且易于使用
Supporting Features(辅助特性):
- Web Support(网络支持):web support API可以帮助在web应用中方便的使用shiro
- Caching(缓存):保证安全操作使用快速有效
- Concurrency(并发):支持多线程应用
- Testing(测试):支持集成单元测试
- Run As(以..运行):可以假定用户为另一个用户
- Remeber Me:记住用户,无需再次登录
一、Shiro服务器识别身份加解密处理的流程
1、加密
- 用户使用账号密码进行登录,并勾选”Remember Me“。
- Shiro验证用户登录信息,通过后,查看用户是否勾选了”Remember Me“。
- 若勾选,则将用户身份序列化,并将序列化后的内容进行AES加密,再使用base64编码。
- 最后将处理好的内容放于cookie中的rememberMe字段。
2、解密
- 当服务端收到来自未经身份验证的用户的请求时,会在客户端发送请求中的cookie中获取rememberMe字段内容。
- 将获取到的rememberMe字段进行base64解码,再使用AES解密。
- 最后将解密的内容进行反序列化,获取到用户身份。
二、Key
AES加密的密钥Key被硬编码在代码里
Shiro-721反序列化漏洞(CVE-2019-12422)
Shiro550和Shiro721的区别:
漏洞指纹
- URL中含有Shiro字段
- cookie中含有rememberMe字段
- 返回包中含有rememberMe
漏洞介绍
在Shiro721中,Shiro通过AES-128-CBC对cookie中的
rememberMe
字段进行加密,所以用户可以通过Padding Oracle
加密生成的攻击代码来构造恶意的rememberMe
字段,进行反序列化攻击,需要执行的命令越复杂,生成payload需要的时间就越长。漏洞原理
由于Apache Shiro cookie中通过 AES-128-CBC 模式加密的rememberMe字段存在问题,用户可通过Padding Oracle 加密生成的攻击代码来构造恶意的rememberMe字段,用有效的RememberMe cookie作为Padding Oracle Attack 的前缀,然后制作精心制作的RememberMe来执行Java反序列化攻击
攻击流程
登录网站,并从cookie中获取RememberMe。使用RememberMe cookie作为Padding Oracle Attack的前缀。加密syserial的序列化有效负载,以通过Padding Oracle Attack制作精心制作的RememberMe。请求带有新的RememberMe cookie的网站,以执行反序列化攻击。攻击者无需知道RememberMe加密的密码密钥。
AES-128-CBC
属于AES加密算法的CBC模式,使用128位数据块为一组进行加密解密,即16字节明文,对应16字节密文,,明文加密时,如果数据不够16字节,则会将数据补全剩余字节
- 若最后剩余的明文不够16字节,需要进行填充,通常采用PKCS7进行填充。比如最后缺3个字节,则填充3个字节的0x03;若最后缺10个字节,则填充10个字节的0x0a;
- 若明文正好是16个字节的整数倍,最后要再加入一个16字节0x10的组再进行加密
Padding Oracle Attack原理
Padding Oracle攻击可以在没有密钥的情况下加密或解密密文
Shiro Padding Oracle Attack(Shiro填充Oracle攻击)是一种针对Apache Shiro身份验证框架的安全漏洞攻击。Apache Shiro是Java应用程序中广泛使用的身份验证和授权框架,用于管理用户会话、权限验证等功能。
Padding Oracle Attack(填充Oracle攻击)是一种针对加密算法使用填充的安全漏洞攻击。在加密通信中,填充用于将明文数据扩展到加密算法块大小的倍数。在此攻击中,攻击者利用填充的响应信息来推断出加密算法中的秘密信息。
Shiro Padding Oracle Attack利用了Shiro框架中的身份验证过程中的一个漏洞,该漏洞允许攻击者通过填充信息的不同响应时间来确定身份验证过程中的错误。通过不断尝试不同的填充方式,攻击者可以逐步推断出加密秘钥,并最终获取访问权限。
这种攻击利用了填充错误的身份验证响应来获取关于秘密信息的信息泄漏,然后根据这些信息进行进一步的攻击。为了防止Shiro Padding Oracle Attack,建议及时更新Apache Shiro版本,确保已修复该漏洞,并采取其他安全措施,如使用安全的加密算法和密钥管理策略。
Shiro 认证绕过漏洞(CVE-2020-1957)
漏洞原理
在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造
..;
这样的跳转,可以绕过Shiro中对目录的权限限制。URL请求过程:
- 客户端请求URL:
/xxx/..;/admin/
- Shrio 内部处理得到校验URL为
/xxxx/..
,校验通过
- SpringBoot 处理
/xxx/..;/admin/
, 最终请求/admin/
, 成功访问了后台请求。
Shiro 身份验证绕过 (CVE-2020-13933)
漏洞简介
CVE-2020-11989的修复补丁存在缺陷,在1.5.3及其之前的版本,由于shiro在处理url时与spring仍然存在差异,依然存在身份校验绕过漏洞由于处理身份验证请求时出错,远程攻击者可以发送特制的HTTP请求,绕过身份验证过程并获得对应用程序的未授权访问。
该漏洞产生的原因主要是
shiro
层在处理url
上和spring
上存在差异,主要是在处理;
上的问题,通过构造含有;
符号的url
即可绕过shiro
在权限上的处理,而spring
不负责权限管控,所以最终会导致权限绕过。ant
风格的路径仅出现一个*
时才能成功,而**
无法绕过,*
:匹配一个或者多个任意的字符。:匹配零个或者多个目录。
Shiro 授权绕过 (CVE-2022-32532)
漏洞简介
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。
1.9.1 之前的 Apache Shiro,RegexRequestMatcher 可能被错误配置为在某些 servlet 容器上被绕过。在正则表达式中使用带有
.
的 RegExPatternMatcher 的应用程序可能容易受到授权绕过。漏洞概述
2022年6月29日,Apache 官方披露 Apache Shiro 权限绕过漏洞(CVE-2022-32532),当 Apache Shiro 中使用 RegexRequestMatcher 进行权限配置,且正则表达式中携带“.”时,未经授权的远程攻击者可通过构造恶意数据包绕过身份认证。
上一篇
反序列化初探
下一篇
不同的android hook姿势
Loading...