Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】
文章目录
- 一、分析定位
- 1. 漏洞描述
- 2. 项目引发漏洞简述
- 二、 若依系统
- 2.1. 版本升级
- 2.2. 配置文件
- 2.3. 推荐做法
- 2.4. 栗子
- 2.5. 项目场景
- 三、Gus系统
- 3.1. shiro版本升级
- 3.2. 调用重新生成
- 3.3. 生成工具类
- shiro漏洞补充:
一、分析定位
1. 漏洞描述
目前厂商已经发布了新版本修复这个安全问题,请到厂商的主页下载: https://issues.apache.org/jira/browse/SHIRO-550
https://shiro.apache.org/download.html
2. 项目引发漏洞简述
若依/Guns管理系统使用了Apache Shiro,Shiro 提供了记住我(RememberMe)的功能,下次访问时无需再登录即可访问。系统将密钥硬编码在代码里,且在官方文档中并没有强调修改该密钥,导致框架使用者大多数都使用了默认密钥。攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞,进而在目标机器上执行任意命令。
检测漏洞:ShiroConfig.java 是否包含 fCq+/xW488hMTCD+cmJ3aQ==,如果是使用的默认密钥则需要修改,防止被执行命令攻击。
二、 若依系统
2.1. 版本升级
升级版本到 >=v.4.3.1(其实就是升级Shiro版本到1.7),并且重新生成一个新的秘钥替换cipherKey,保证唯一且不要泄漏。
2.2. 配置文件
若依官网做法:
# Shiro
shiro:cookie:# 设置密钥,务必保持唯一性(生成方式,直接拷贝到main运行即可)KeyGenerator keygen = KeyGenerator.getInstance("AES"); SecretKey deskey = keygen.generateKey(); System.out.println(Base64.encodeToString(deskey.getEncoded()));cipherKey: zSyK5Kp6PZAAjlT+eeNMlg==
2.3. 推荐做法
调用的方法随机生成最好,不然安全扫描还会有漏洞
2.4. 栗子
package com.gblfy.util;import org.apache.shiro.codec.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;/*** 生成一个Base64唯一字符串** @author guobin* @date 2020-12-06*/
public class ShiroAESEncryption {private final static Logger logger = LoggerFactory.getLogger(ShiroAESEncryption.class);public static void main(String[] args) throws NoSuchAlgorithmException{// 直接拷贝到main运行即可生成一个Base64唯一字符串KeyGenerator keygen = KeyGenerator.getInstance("AES");SecretKey deskey = keygen.generateKey();logger.info("生成新的Base64唯一字符串秘钥: {}", Base64.encodeToString(deskey.getEncoded()));}
}
2.5. 项目场景
在具体代码调用此方法生成唯一的base64码值
三、Gus系统
3.1. shiro版本升级
升级Shiro版本到 >=1.7,在调用的地方重新生成一个新的秘钥替换ConstDb.CIPHERKEY
Base64.decode(ConstDb.CIPHERKEY),保证唯一且不要泄漏。
<properties><!--全局编码设置--><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!--全局版本统一设置--><shiro.version>1.7.0</shiro.version></properties>
<!--shiro依赖和缓存--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>${shiro.version}</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>${shiro.version}</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-ehcache</artifactId><version>${shiro.version}</version></dependency><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>${ehcache2.version}</version></dependency>
3.2. 调用重新生成
/*** rememberMe管理器, cipherKey生成见{@code Base64Test.java}*/@Beanpublic CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {CookieRememberMeManager manager = new CookieRememberMeManager();String aesEncryption = ShiroAESEncryption.ShiroAESEncryption();manager.setCipherKey(Base64.decode(aesEncryption));manager.setCookie(rememberMeCookie);return manager;}
3.3. 生成工具类
package com.gblfy.util;import org.apache.shiro.codec.Base64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.NoSuchAlgorithmException;/*** 生成一个Base64唯一字符串** @author guobin* @date 2020-12-06*/
public class ShiroAESEncryption {private final static Logger logger = LoggerFactory.getLogger(ShiroAESEncryption.class);public static void ShiroAESEncryption() {KeyGenerator keygen = null;try {keygen = KeyGenerator.getInstance("AES");} catch (NoSuchAlgorithmException e) {e.printStackTrace();}SecretKey deskey = keygen.generateKey();logger.info("生成新的Base64唯一字符串秘钥: {}", Base64.encodeToString(deskey.getEncoded()));}public static void main(String[] args) {ShiroAESEncryption();}
}
shiro漏洞补充:
1.4
1.4.2
1.6
都存在漏洞建议升级到shiro1.7版本
Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】相关推荐
- 详述WebLogic反序列化远程命令执行漏洞的处理过程,云和恩墨技术通讯精选
各位亲爱的用户/读者朋友们: 为了及时共享行业案例,通告共性问题,达成知识共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>(5月刊),通过对过去一段时间的知识回顾和故障归纳,以期提供有 ...
- rmi远程反序列化rce漏洞_Oracle WebLogic 反序列化远程命令执行漏洞预警
报告编号:B6-2019-041901 报告来源:360-CERT 报告作者:360-CERT 更新日期:2019-04-19 0x00 事件背景 2019年4月17日,国家信息安全漏洞共享平台(CN ...
- Weblogic反序列化远程代码执行漏洞(CVE-2019-2725)
漏洞简述 2019年4月17日,CNVD 发布<关于Oracle WebLogic wls9-async组件存在反序列化远程命令执行漏洞的安全公告>,公告指出部分版本WebLogic中默认 ...
- Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 kali docker
Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 漏洞环境搭建 漏洞复现 反弹shell 题外话1 题外话2 影响版本:Apache Shiro <= 1.2.4 漏洞产生 ...
- jenkins java反序列化_Jenkins “Java 反序列化”过程远程命令执行漏洞
###漏洞原理 反序列化是指特定语言中将传递的对象序列化数据重新恢复为实例对象的过程,而在这个过程中会执行一系列的字节流解析和对象实例化操作用于恢复之前序列化时的对象.在原博文所提到的那些 Java ...
- 【Vulhub】Apache Log4j Server 反序列化命令执行漏洞复现(CVE-2017-5645)
脚本小子上线啦,开始复现以前出现实战环境的漏洞了,我会记录一些复现的漏洞(不会是全部),今天这个漏洞的原理我也不太会就知道是个Java反序列化的洞,只负责复现(脚本小子~). 漏洞介绍&环境搭 ...
- FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
#FastJson1.2.24反序列化导致任意命令执行漏洞(CVE-2017-18349)# 一.漏洞简介 Pippo是一款基于Java的Web框架.FastjsonEngine是其中的一个JSON处 ...
- 【vulhub】Apereo CAS 4.1 反序列化命令执行漏洞复现
楼主困了,这里就直接写上楼主自己的一些操作 详细过程可以看Apereo CAS 4.1 反序列化命令执行漏洞复现 特征: 1.网站根目录下有cas目录 2.如图所示,有apereo CAS图标 3.如 ...
- wpf window 不执行show 就不能load执行_Numpy反序列化命令执行漏洞分析(CVE-2019-6446)附0day...
1.介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算.NumPy 提供大量的 函数和操作,能够帮助程序员便利进行数值计算.在 NumPy 1.16.0 版本之前存在反序列 ...
最新文章
- 自动驾驶前沿报告!解密六大关键技术,全球人才分布
- 支持高并发的IIS Web服务器常用设置
- apache基于ip如何配置虚拟主机
- /proc/asound详细介绍
- 常犯的18个统计学错误, 避坑防雷指南!
- OPA 6 - module(Create Button Test);
- linux c之解决array subscript is not integer和AF_NET not undeclared
- YBTOJ洛谷P2042:维护数列(平衡树)
- java把控件跑挂了_Java代码动态修改 ConstraintLayout 内控件布局的辅助类
- 140. Word Break II
- 配置ssh信任(不通过密码验证ssh直接访问目标机器)
- LR中并发用户和集合点
- 金庸:为什么历史上没有一个国家能成功吞并中国?
- VR产品为什么没有火起来
- 工程伦理学_笔记(复习用)
- JSP程序设计——手机销售网后台设计
- 玩安卓从 0 到 1 之列表一键置顶
- 计算机保存不了自动还原,win7系统颜色校准无法保存开机自动还原默认的处理步骤...
- Linux下文件的读写
- Java SE 学习记录06