bootstrap框架漏洞_学生会私房菜【202008011期】Apache Shiro 1.2.4反序列化漏洞

565855718b278c4188b86d5b479d4cb7.png

学生会私房菜

学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题。

本期文档内容为:《Apache Shiro 1.2.4反序列化漏洞》

7f23201647d2f73fcf3a45fec9ed23b4.png作者介绍:Chow

一名来自网络工程专业的安全爱好者,目前在国科学习安全课程,同时也在国科安全团体进行安全的实战练习,本次分享的内容是CVE-2016-4437的漏洞,希望可以帮助大家更好理解这个漏洞。

0x00简介

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

Shiro的“记住我”功能是设置cookie中的rememberMe值来实现。当后端收到来自未经身份验证的用户的请求时,它将通过以下操作来寻找他们记住的身份:

  1. 检索cookie中的rememberMe的值

  2. Base64解码

  3. 使用AES解密

  4. 反序列化

漏洞的原因在于第三步,AES的密钥是硬编码的,导致攻击者可以构造rememberMe的值,触发Java反序列化,进而在目标上执行任意命令。

0x01影响范围

Apache Shiro <= 1.2.4

0x02漏洞分析

(PS.此处对Java代码不是很熟悉,参考了网上分析)

从官方issue上来看,存在几个重要的点:

1.rememberMe cookie

2.Base 64 decode

3.Decrypt using AES

4.Java serialization

加密过程:

7931b8764e2cebd77b9720cdd0521ef8.png

首先调用forgetIdentity构造方法处理request和response请求,包括在response中加入cookie信息,然后调用rememberIdentity函数,来处理cookie中的rememberme字段。跟进rememberIdentity函数:

4301470c459baac57dda6087b18c18d1.png

rememberIdentity函数首先调用getIdentityToRemember函数来获取用户身份,接着跟进rememberIdentity构造方法:

6d7818fefe61951236431328c4f9c1cd.png

调用convertPrincipalsToBytes方法将accountPrincipals转换为字节形式。跟进此函数

22378acb8e2b877c54d5166c5f241839.png

转换过程是先序列化用户身份"id",在对其进行encrypt,跟进encrypt函数:

b7db6fd7736e8d591e730caf9389c3b4.png

encrypt函数就是调用AES加密对序列化后的"id"进行加密,加密的密钥由getEncryptionCipherKe

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值