Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】

这篇具有很好参考价值的文章主要介绍了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. 漏洞描述

apache shiro rememberme 1.2.4 反序列化过程命令执行漏洞,java,apache,java,安全,linux,数据结构
apache shiro rememberme 1.2.4 反序列化过程命令执行漏洞,java,apache,java,安全,linux,数据结构

目前厂商已经发布了新版本修复这个安全问题,请到厂商的主页下载: 

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()));
    }
}

apache shiro rememberme 1.2.4 反序列化过程命令执行漏洞,java,apache,java,安全,linux,数据结构

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>

apache shiro rememberme 1.2.4 反序列化过程命令执行漏洞,java,apache,java,安全,linux,数据结构

3.2. 调用重新生成
    /**
     * rememberMe管理器, cipherKey生成见{@code Base64Test.java}
     */
    @Bean
    public CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {
        CookieRememberMeManager manager = new CookieRememberMeManager();
        String aesEncryption = ShiroAESEncryption.ShiroAESEncryption();
        manager.setCipherKey(Base64.decode(aesEncryption));
        manager.setCookie(rememberMeCookie);
        return manager;
    }

apache shiro rememberme 1.2.4 反序列化过程命令执行漏洞,java,apache,java,安全,linux,数据结构

3.3. 生成工具类

apache shiro rememberme 1.2.4 反序列化过程命令执行漏洞,java,apache,java,安全,linux,数据结构

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版本文章来源地址https://www.toymoban.com/news/detail-606739.html

到了这里,关于Apache Shiro RememberMe 1.2.4 反序列化过程命令执行漏洞【原理扫描】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Java反序列化]—Shiro反序列化(一)

    IDEA搭建shiro550复现环境_普通网友的博客-CSDN博客 Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。在服务端对rememberMe的cookie值,先base64解码然后AES解密再反序列化,就导致了反序列化RCE漏洞。 那么,Payload产生的过程: 命令

    2024年02月06日
    浏览(43)
  • Shiro反序列化分析

    Shiro,一个流行的web框架,养活了一大批web狗,现在来对它分析分析。Shiro的gadget是CB链,其实是CC4改过来的,因为Shiro框架是自带 Commoncollections 的,除此之外还带了一个包叫做 CommonBeanUtils ,主要利用类就在这个包里 https://codeload.github.com/apache/shiro/zip/shiro-root-1.2.4 编辑shiro/s

    2024年03月24日
    浏览(44)
  • 漏洞复现——shiro反序列化

    今天咱们的主角是shiro反序列化命令执行漏洞。该漏洞在HVV等大型攻防项目中,经常被作为突破口。简单介绍了解一下还是很有必要的。废话不多说,进入正题。 一、漏洞描述: Apache Shiro是美国阿帕奇(Apache)软件基金会的一套用于执行认证、授权、加密和会话管理的Java安

    2024年02月09日
    浏览(41)
  • Apache Log4j Server (CVE-2017-5645) 反序列化命令执行漏洞

    Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码。 说明 内容 漏洞编号 CVE-2017-5645 漏洞名称 Apache Log4j Server 反序列化命令执行漏洞 漏洞评级 高危 影响范围 Apache Log4j 2.8.2之前

    2024年02月07日
    浏览(43)
  • Shiro反序列化漏洞综合利用工具Shiro Attack使用教程

    目录 漏洞扫描 利用链检测 执行命令 注入蚁剑内存马 将目标网站输入在目标地址栏中吗,点击爆破密钥,如果发现key,则可以利用

    2024年02月13日
    浏览(35)
  • Shiro1.2.4反序列化漏洞

    目录 Shiro1.2.4反序列化漏洞 一、JRMP协议 二、漏洞原理 三、复现步骤 四、修复和防御 ​JRMP全称为Java Remote Method Protocol,也就是Java远程方法协议。是RMI(Remote Method Invocation)工作的底层协议。 ​Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Co

    2024年02月01日
    浏览(36)
  • shiro反序列化漏洞学习(工具+原理+复现)

    工具准备 1.java8 C:Program FilesJava 2.冰蝎 C:UsersaliDesktoptoolsBehinder_v4.0.6 3.shiro反序列化 图形化工具 shiro attack2.2 C:UsersaliDesktoptoolsshiro_attack_2.2 4.shiro反序列化 命令行工具 C:UsersaliDesktoptoolsshiro_tool.jar 一.Shiro-550 CVE-2016-4437 序列化: 在Java中,把Java对象转换为字节序列(

    2023年04月08日
    浏览(48)
  • 【漏洞复现】Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

    感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 说明 内容 漏洞编号 CVE-2017-5645 漏洞名称 Log4j Server 反序列化命令执行漏洞 漏洞评级 高危 影响范围 Apache Log4j 2.8.2之前的2.x版本 漏洞描述 修复方案 1.1、漏洞描述 攻击者可以通过发送一个特别制作的2进

    2024年02月05日
    浏览(63)
  • shiro反序列化[cve_2016_4437]

    目录 什么是shiro? 漏洞原理 漏洞复现 修复方案 Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使

    2024年02月15日
    浏览(44)
  • RuoYi v4.2 Shiro反序列化漏洞

    反序列化漏洞 漏洞原理 反序列化漏洞是基于序列化和反序列化的操作,在反序列化——unserialize()时存在用户可控参数,而反序列化会自动调用一些魔术方法,如果魔术方法内存在一些敏感操作例如eval()函数,而且参数是通过反序列化产生的,那么用户就可以通过改变参数来

    2024年02月01日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包