当前位置: 首页 > news >正文

WEB安全--Java安全--shiro721反序列化漏洞

一、前言

既然我把shiro721和shiro550分开写,就说明两者是有区别的

不过两者的概念和作用也是大相径庭的,这里就不再赘述

可以参考上一篇文章:

WEB安全--Java安全--shiro550反序列化漏洞-CSDN博客

二、shiro721

2.1、原理

区别于shiro550的固定AES_key加密,shiro721用到的加密方式是AES-CBC,而且其中的AES加密的key基本猜不到了,是系统随机生成的。

但是服务端对请求包中的Cookie处理方式和shiro550的方式相同,也就意味着如果能伪造恶意的rememberMe字段的值且目标含有可利用的攻击链的话,还是能够进行RCE的。

所以现在的问题就是:如何知道AES-CBC的加密key呢?

通过Padding Oracle Attack攻击可以实现破解AES-CBC加密过程进而实现rememberMe的内容伪造。

 

2.2、Padding Oracle Attack

原理

Padding Oracle Attack 是一种针对使用填充方案的对称加密算法的攻击方式,尤其是那些使用 CBC(Cipher Block Chaining)模式的算法。攻击者可以利用填充错误消息(padding error messages)来逐步解密加密的消息。

而shiro721的AES加密算法正好采用的是CBC模式,通过工具爆破即可实现突破。

步骤

1、获取密文:攻击者首先需要获得目标的加密消息(密文)

2、构造攻击:攻击者会对密文的最后一个块进行修改。由于填充错误的反馈,攻击者可以逐字节地猜测填充的内容

3、逐字节解密:攻击者将密文块的最后一个字节修改为不同的值,并发送解密请求。根据服务器的响应(是填充错误还是成功),攻击者可以判断出填充是否正确。例如,假设最后一个字节是 0x01,如果攻击者将其修改为 0x00,0x01,0x02 等,观察服务器的响应。如果没有错误反馈,说明填充正确,攻击者就可以确定原始明文的最后一个字节

4、重复过程:攻击者逐步修改密文的每个字节,直到解密出整个明文。通过对每个块进行类似的操作,攻击者可以逐步得到完整的明文

2.3、利用条件

1、知道已经登陆用户的合法Cookie

2、目标服务器含有可利用的攻击链

2.4、利用思路总结

1、客户端首次用账号密码登录,勾选记住密码

2、响应包中的set-Cookie中存放着加密的用户信息密文

3、客户端再次访问服务端,请求包中的Cookie中就会存在rememberMe: 加密的用户信息密文

4、拦截这个请求包

5、构造payload(如CC链),将payload>>序列化>>AES加密>>base64编码

#参考ysoserial工具
java -jar ysoserial.jar CommonsBeanutils1 "touch /tmp/123" > payload.class

6、复制请求包中的rememberMe后的值

7、将其中的remember Me字段复制下来输入到shiro_exp工具中进行爆破和利用

python shiro_exp.py http://<hackerIP>/login.jsp <remember Me> payload.class

8、最终会生成恶意的rememberMe 密文,我们使用这个payload密文替换请求包中的rememberMe中的加密的用户信息密文

9、放包(请求包),服务端接收到我们更改后的请求包

10、JVM取出Cookie中的rememberMe中的密文进行>>base64解码>>AES解密>>反序列化

11、反序列化的readObject()触发CC链,实现命令执行

相关文章:

  • Mysql数据库详解
  • 【linux】Web服务—搭建nginx+ssl的加密认证web服务器
  • PostgreSQL中的全页写
  • 在Linux服务器上部署Jupyter Notebook并实现ssh无密码远程访问
  • 通信安全堡垒:profinet转ethernet ip主网关提升冶炼安全与连接
  • Jenkins 最佳实践
  • 探索大型语言模型(LLM)的开源学习路径:mlabonne/llm-course 深度解析
  • 文本分类任务Qwen3-0.6B与Bert:实验见解
  • 人工智能100问☞第24问:什么是生成对抗网络(GAN)?
  • 多模态大语言模型arxiv论文略读(七十九)
  • C# DataGridView 选中所有复选框
  • Centos7系统(最小化安装)安装zabbix7版本详细文章、nginx源代码配置、php源代码、mysql-yum安装
  • CSS面试题汇总
  • 【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
  • 微信小程序:封装表格组件并引用
  • C++之unordered_map/unordered_set模拟实现
  • conda创建环境常用命令(个人用)
  • STM32就业前景和下载KEIL软件(保姆级)
  • Vue3中setup运行时机介绍
  • FC7300 DMA MCAL 配置引导
  • 中央提级巡视后,昆明厅官郭子贞接受审查调查
  • 商务部召开全国离境退税工作推进会:提高退税商店覆盖面,扩大入境消费
  • 上海虹桥国际咖啡文化节开幕,推出茶咖文化特色街区、宝妈咖啡师培训
  • 清雪车司机未拉手刹下车导致溜车被撞亡,事故调查报告发布
  • “免签圈”扩容,旅游平台:今年以来巴西等国入境游订单显著增加
  • 严打金融黑灰产,今年来上海警方破获各类经济犯罪案件690余起