Shiro反序列化漏洞(CVE-2016-4437)+docker靶场+工具利用

news2024/11/27 16:42:00

一、Shiro反序列化漏洞-CVE-2016-4437原理

将java对象转换为字节序列(json/xml)的过程叫序列化,将字节序列(json/xml)恢复为java对象的过程称为反序列化。

Shiro框架提供了“记住我”的功能,用户登陆成功后会生成经过加密并编码的cookie,cookie的key为RememberMe,cookie的值是经过序列化的,使用AES加密,再使用base64编码,服务端在接收cookie时:
检索key的值Base64解码,AES解密进行反序列化时未过滤处理,造成漏洞
攻击者使用shiro默认的密钥构造恶意序列化对象进行编码来伪造用户的cookie,服务器反序列化时触发漏洞
有的用户使用开源shiro框架,并没有修改配置文件中的默认密钥,即密钥泄露

二、docker靶场搭建

进入shiro靶场目录,输入命令:docker-compose up -d
在这里插入图片描述
访问:locathost:8080,有“记住我”功能
在这里插入图片描述
输入admin:vulhub,选中“记住我”,抓包,直接发送源数据包,观察返回的数据包中是否存在关键字:
在这里插入图片描述

三、工具利用

下载shiro利用工具:shiro_attack-2.2.jar
本地cmd进入工具目录,前提已安装并配置好java环境
在这里插入图片描述
其中date中存在的文件,里面包含上百个shiro开源默认密钥在这里插入图片描述
在这里插入图片描述

命令: java -jar .\shiro_attack-2.2.jar
在这里插入图片描述

输入相关的信息,爆破出密钥:
在这里插入图片描述

检测当前利用链:
在这里插入图片描述
命令执行:uname -a
在这里插入图片描述
执行成功

四、修复建议

1、使用开源shiro框架时,修改默认密钥
2、代码审计,全局搜索 “setCipherKey(Base64.decode(” 关键字,或者"setCipherKey"方法,Base64.decode()中的字符串就是shiro的密钥,要确保该密钥的安全性
3、WAF拦截Cookie中长度过大的rememberMe值

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JPA 概述及常用注解详解、SpringDataJpa 使用指南

JPA(Java Persistence API)是 Java 标准中的一套ORM规范(提供了一些编程的 API 接口,具体实现由 ORM 厂商实现,如Hiernate、TopLink 、Eclipselink等都是 JPA 的具体实现),借助 JPA 技术可以通过…

Unity3D 入门

文章目录 拖拽快捷键资源商店地形构建器 拖拽快捷键 首先看到Scene界面,我们布置游戏场景中的游戏对象基本是在这个界面完成的 鼠标滚轮键按住:能够拖拽平面,不移动对象鼠标右键按住:能够旋转我们观察界面的视角,不移…

快速理解并实现权限控制

什么是权限控制? 权限控制是指在一个系统或应用中对用户或角色的操作进行限制和管理的过程。它用于确保只有经过授权的用户或角色能够执行特定的操作或访问特定的资源。权限控制是信息安全和访问控制的重要组成部分。 权限控制的主要目的是保护系统的安全性和完整性&#xf…

GEE:支持向量机(SVM)分类参数说明和官方案例

作者:CSDN @ _养乐多_ 本文记录了在GEE平台上进行支持向量机(SVM)分类使用ee.Classifier.libsvm的说明和官方案例。 文章目录 一、函数介绍1.1 GEE上说明1.2 函数说明二、官方案例一、函数介绍 1.1 GEE上说明 ee.Classifier.libsvm(decisionProcedure, svmType, kernelTyp…

CentOS5678 repo源 地址 阿里云开源镜像站

CentOS5678 repo 地址 阿里云开源镜像站 https://mirrors.aliyun.com/repo/ CentOS-5.repo https://mirrors.aliyun.com/repo/Centos-5.repo [base] nameCentOS-$releasever - Base - mirrors.aliyun.com failovermethodpriority baseurlhttp://mirrors.aliyun.com/centos/$r…

Springboot JPA 集成多租户

背景: ​ iot-kit项目用的是jpa,不是mybatis,项目中需要引入多租户 参考文章: 【讲解多租户的实现与原理】 https://www.bilibili.com/video/BV1F84y1T7yf/?share_sourcecopy_web&vd_source981718c4abc87423399e43793a5d3…

pytest实现用例间参数传递的方式

pytest实现用例间参数传递的方式 一、通过conftest创建全局变量二、使用tmpdir_factory方法 我们在做接口自动化测试的时候,会经常遇到这种场景:接口A的返回结果中的某个字段,是接口B的某个字段的入参。如果是使用postman,那我们可…

前端精度丢失处理

前端操作数据时,如果数据超出一定范围会出现精度丢失的问题,这是因为,在传输过程中,数据类型被转换成Number,Number的精度范围在2^53之间,即 -9007199254740991 ~ 9007199254740991,超出范围就会…

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1

Unity游戏源码分享-迷你高尔夫球游戏MiniGolfConstructionKitv1.1 有多个游戏关卡 工程地址:https://download.csdn.net/download/Highning0007/88052881

Unity游戏源码分享-射酒瓶游戏Demo

Unity游戏源码分享-射酒瓶游戏Demo 工程地址:https://download.csdn.net/download/Highning0007/88052883

财务报表制作:哪些软件值得推荐?

当今,企业需要准确、及时地制作各种会计报表,以便管理者更好地掌握财务状况。然而,使用传统的纸质方式进行制表常常会出现复杂、繁琐等问题,降低制表效率。因此,使用会 计软件成为了制表的首选。 传统制作财务报表的方…

前端理解的HTTP缓存(缓存的过程/策略/控制机制/作用和应用)

目录 一、HTTP缓存有什么作用? 二、 浏览器的缓存策略有哪些? 1、强缓存(Expires、Cache-control) 2、协商缓存(Last-Modified、ETag) 3、缓存过程是什么? 三、浏览器缓存控制机制有哪些&…

八股文(消息队列)

文章目录 1. RabbitMQ特点2. 如何保证消息的可靠性3. RabbitMQ消息的顺序性4. 实现RabbitMQ的高可用性5. 如何解决消息队列的延时以及过期失效问题?6. RabbitMQ死信队列7. RabbitMQ延迟队列8.RabbitMQ的工作模式9. RabbitMQ消息如何传输10. 核心概念10.1 生产者和消…

MATLAB 常用函数小结

文章目录 【 生成 】随机数零或一其他 【 提取 】【 统计 】【 算法 】【 文件 】 【 生成 】 随机数 rand() rand(a,b) 生成区间 (0,1) 内均匀分布的随机数字组成的 axb 列矩阵。 均值0.5,方差1/120.08333。k*rand(a,b) 生成区间 (0,k) 内服从均匀分布的随机数字组…

华为OD机试真题 Java 实现【分割数组的最大差值】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

layui实现选项卡(万字博客!!!)

今日金句 努力不一定会被看到,但成功会 文章目录 前言一、什么是Tab选项卡二、Tab分类2.1 默认风格2.2 动态Tab2.3 Hash Tab2.4 简洁Tab2.5 卡片Tab2.6 响应式Tab2.7 带删除的Tab2.8 Js代码 三、实例3.1 引入html代码3.2 编写Js代码3.3 优化1:对应名称、…

javascript编写奇迹mu原版(含服务端)(7) 地图界面

其实主要的功能还是聊天,打怪我打算弄成自动的。可以传送到地图怪密集的地方打怪,然后获得经验和道具,也可发广告收消息。地图上那些是石头等不可移动的区域。怪和人都还没标上去,暂时想的是在地图上标一个红色的点。

人工智能自然语言处理:N-gram和TF-IDF模型详解

人工智能自然语言处理:N-gram和TF-IDF模型详解 1.N-gram 模型 N-Gram 是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成了长度是 N 的字节片段序列。 每一个字节片段称为 gram,对所…

第一阶段-第九章 Python的异常、模块与包

目录 一、了解异常  1.学习目标  2.什么是异常  3.bug单词的诞生  4.本节的演示  5.本小节的总结 二、异常的捕获方法  1.学习目标  2.为什么要捕获异常  3.如何进行异常的捕获(异常为常规的、指定的、多个时,捕获所有异常、异常else、f…

跟我一起从零开始学python(八)全栈开发

前言 回顾之前讲了python语法编程 ,必修入门基础和网络编程,多线程/多进程/协程等方面的内容,后续讲到了数据库编程篇MySQL,Redis,MongoDB篇,和机器学习前面没看的也不用往前翻,系列文已经整理…