Advertisement

YAML Payload: Spring Cloud SnakeYAML 反序列化一键注入 CMDShell 和 ReGeorg

  •  5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:None


简介:
本文章介绍了如何利用Spring Cloud与SnakeYAML中的反序列化漏洞来注入CMDShell及ReGeorg,详细讲解了YAML Payload的构造方法和应用场景。 自述文件Spring Cloud SnakeYAML一键注册cmd shell和reGeorg利用条件:可以POST请求目标网站的/env接口设置属性;可以POST请求目标网站的/refresh接口刷新配置(存在spring-boot-starter-actuator依赖);目标使用的spring-cloud-starter版本小于1.3.0.RELEASE;目标能够访问攻击者的HTTP服务器(即可以从内网发起对外网络请求)。此方法仅在JDK 1.8及Spring 1.x环境下测试通过,其他环境请自行验证。利用步骤如下:编译class文件然后打包成jar包 ``` cd yaml-payload javac src/artsploit/AwesomeScriptEngineFactory.java -cp ./lib javac src/artsploit/Tunnel.java -cp ./lib ```

全部评论 (0)

还没有任何评论哟~
客服
客服
  • YAML Payload: Spring Cloud SnakeYAML CMDShell ReGeorg
    优质
    本文章介绍了如何利用Spring Cloud与SnakeYAML中的反序列化漏洞来注入CMDShell及ReGeorg,详细讲解了YAML Payload的构造方法和应用场景。 自述文件Spring Cloud SnakeYAML一键注册cmd shell和reGeorg利用条件:可以POST请求目标网站的/env接口设置属性;可以POST请求目标网站的/refresh接口刷新配置(存在spring-boot-starter-actuator依赖);目标使用的spring-cloud-starter版本小于1.3.0.RELEASE;目标能够访问攻击者的HTTP服务器(即可以从内网发起对外网络请求)。此方法仅在JDK 1.8及Spring 1.x环境下测试通过,其他环境请自行验证。利用步骤如下:编译class文件然后打包成jar包 ``` cd yaml-payload javac src/artsploit/AwesomeScriptEngineFactory.java -cp ./lib javac src/artsploit/Tunnel.java -cp ./lib ```
  • 基于SnakeYAML的Java YAML解析与方法
    优质
    简介:本文介绍了一种利用SnakeYAML库实现的Java程序中YAML文件的高效解析和序列化的方法。 在Java开发过程中经常需要解析YAML文档并将它们转换为Java对象或者将现有的Java对象序列化成YAML格式,这时可以使用SnakeYAML库来完成这一操作。 为了能够在项目中应用SnakeYAML, 需要在项目的Maven配置文件里添加相应的依赖项。例如: ```xml org.yaml snakeyaml 1.25 ``` 在使用SnakeYAML时,`Yaml`类是主要的入口点,用于加载和解析YAML文档。由于这个库不是线程安全的,在不同线程中需要创建不同的实例。 要从字符串或输入流读取并解析一个YAML文件, 可以通过调用 `load()` 方法来实现: ```java Yaml yaml = new Yaml(); InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(customer.yaml); Map obj = yaml.load(inputStream); System.out.println(obj); ``` SnakeYAML提供了基本的解析和序列化功能。除了将文档加载到 `Map` 对象中,还可以使用 `dump()` 方法来实现Java对象到YAML格式的转换。 对于自定义类型的数据结构,可以创建一个特定类(如Customer),然后利用SnakeYAML将其从YAML文件映射为该类型的实例: ```java Customer customer = yaml.loadAs(inputStream, Customer.class); ``` 此外,库还支持自动将值转成隐式数据类型。比如数字1.0会被识别为浮点数,整型42会转换为Integer类型等。 SnakeYAML同样可以处理嵌套的复杂对象结构,在解析时能够根据文档中的定义构建对应的Java对象层次关系。 总结来说,使用SnakeYAML库可以帮助开发者在Java项目中高效地实现对YAML文件的操作。包括但不限于基本操作、自定义类型的映射以及隐式类型转换和复杂的嵌套数据处理等功能。
  • Java使用SnakeYAML解析Yaml文件
    优质
    本教程介绍如何利用Java编程语言结合SnakeYAML库来解析YAML格式的配置文件,涵盖基本概念及示例代码。 Java解析Yaml文件jar包资源需要使用相应的库或工具来实现读取和处理yaml格式的配置文件的功能。在项目开发过程中,可以通过引入相关依赖来简化这一过程,并确保代码能够正确地加载并应用这些配置信息到实际的应用场景中去。
  • Shiro-EXP:针对 Apache Shiro 的漏洞检测利用工具,支持内存马
    优质
    Shiro-EXP是一款专为Apache Shri设计的安全测试工具,主要用于检测与利用其反序列化漏洞,并能实现一键式内存马注入功能。 项目介绍基于Apache Shiro反序列化漏洞进行利用链的探测,并附带内存马。在利用过程中需要修改POST请求中的两处数据:Header头RememberMe字段值以及携带的数据(由于payload设定,data中须指定名为c的参数值)。当探测到利用链后,根据提示将屏幕输出的payload粘贴至POST请求Header头RememberMe字段处;至于data携带的数据,则可根据需要自行决定。本段落末尾附有内存马,可直接使用或替换为生成的特定命令字节码片段。 Apache Shiro框架提供了记住密码的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。服务端对rememberMe的cookie值先进行base64解码然后AES解密再反序列化,从而导致漏洞出现。
  • C++中的JSON
    优质
    本文介绍在C++编程语言中实现JSON数据的序列化与反序列化的常用方法及库工具,帮助开发者高效处理数据交换。 关于C++ JSON序列化与反序列化的相关内容可以参考博客文章《TragicGuy》中的分享。
  • C#代码的
    优质
    本篇文章主要介绍在C#编程语言中如何实现对象的序列化与反序列化的操作方法,并探讨其应用场景和注意事项。 在C#编程中,序列化与反序列化是至关重要的技术手段,它们能够将对象的状态转换为数据格式以实现存储或网络传输的目的。本段落详细探讨了C#中的高级序列化及反序列化机制,并提供了如何在实际项目中有效利用这些工具的指导。 1. **定义** - 序列化是指把一个对象的状态转化为可以持久化的形式(例如XML、JSON、二进制等),以便该状态可以在不同的时间和环境中传输或存储。 - 反序列化则是将已序列化的数据恢复为原来的对象状态的过程,是序列化的逆操作。 2. **内置的序列化技术** - BinaryFormatter:这是.NET Framework提供的默认序列化器,它以二进制格式保存对象的状态。此方法适合本地存储但不适合跨平台和网络传输。 - XmlSerializer:用于将对象转换为XML文档的形式,这种格式易于阅读且理解,并适用于不同平台间的通信需求。 - DataContractSerializer:这是一种更灵活、高效的XML序列化器,通常被用在WCF(Windows Communication Foundation)服务中。 - JsonSerializer:.NET Core引入了System.Text.Json库来提供JSON的序列化和反序列化功能。该库性能优良且易于使用。 - protobuf-net:这是Google Protocol Buffers技术在C#中的实现版本,提供了高效的二进制序列化能力。 3. **自定义序列化** - 使用`[Serializable]`属性标记类以表明它可以被序列化。 - 通过实现ISerializable接口来提供定制化的序列化逻辑,并使用GetObjectData方法控制哪些字段应当参与序列化进程。 - 利用OnSerializing、OnSerialized、OnDeserializing和OnDeserialized四个事件处理程序,在序列化的生命周期中执行特定操作。 4. **配置与忽略属性** - 使用`[IgnoreDataMember]`或`[NonSerialized]`属性来排除某些字段的参与,使它们不被纳入到序列化过程。 - `DataContract`和`DataMember`特性允许更加细致地控制序列化的细节如字段排序及是否必需等。 5. **示例代码** ```csharp [XmlRoot(Person)] public class Person { [XmlElement(Name)] public string Name { get; set; } [XmlElement(Age)] public int Age { get; set; } } XML序列化实例: var person = new Person{Name=John,Age=30}; var xmlSerializer = new XmlSerializer(typeof(Person)); using (var writer = new StringWriter()) { xmlSerializer.Serialize(writer, person); Console.WriteLine(writer.ToString()); } JSON序列化示例: var jsonSerializer = new JsonSerializer(); using (var writer = new StringWriter()) { jsonSerializer.Serialize(writer, person); Console.WriteLine(writer.ToString()); } ``` 6. **性能与选择** - 二进制格式(如BinaryFormatter)通常在速度上优于XML和JSON,但其兼容性可能受限于不同的运行时环境。 - JSON序列化提供更好的可读性和跨平台支持,尽管这可能会导致数据量增大。 - Protobuf技术则在效率及数据大小方面表现优异,特别适用于大量数据的传输。 7. **安全性与考虑** - 序列化的实施可能导致安全风险如敏感信息泄露或遭受序列化攻击。因此,在处理可能包含敏感内容的数据时应格外谨慎,并避免对不可信来源进行反序列化操作。 - 为了确保网络传输中的安全性,建议使用加密或其他安全协议来保护已序列化的数据。 8. **应用场景** - 数据持久性:将对象的状态保存至磁盘并在程序启动后恢复该状态。 - 网络通信:通过转换为适合于跨网发送的数据格式来进行服务间的交互。 - 缓存机制:把对象转化为字符串形式并存储在缓存系统中以提高访问速度。 9. **总结** C#中的序列化与反序列化技术是多元化的,开发者可以根据项目需求选择最合适的方案。理解各种序列化器的特点、适用场景以及安全注意事项对于编写高效且安全的代码至关重要,在实际应用开发过程中结合具体情况来决定最佳策略是非常必要的。
  • C#中的对象
    优质
    本教程深入讲解了C#中如何实现对象的序列化与反序列化技术,包括使用BinaryFormatter、Json.NET等方法进行数据持久化及网络传输。 对象序列化的介绍 .NET支持多种方式来实现对象的序列化: - 二进制序列化:将对象转换为二进制格式后进行存储或传输,使用BinaryFormatter类完成这一操作,该类位于System.Runtime.Serialization.Formatters.Binary命名空间中。 - SOAP序列化:生成符合SOAP协议的数据表示形式,便于通过网络进行传递。此功能由System.Runtime.Serialization.Formatters.Soap命名空间中的SoapFormatter类提供。 - XML序列化:将对象转换为XML格式的字符串,使用XmlSerializer 类实现,并且该类位于System.Xml.Serialization命名空间中。 需要注意的是,在采用XML序列化时,私有数据成员不会被包含在内。
  • C# 中的对象
    优质
    本文将探讨在C#编程语言中如何实现对象的序列化与反序列化技术,包括常见的JSON、XML格式转换,并介绍常用的序列化库。 通过一个章节来讲解序列化与反序列化的概念,并详细介绍BinaryFormatter、SoapFormatter 和 XmlSerializer 这三种序列化方式的细节,希望对大家有所帮助。
  • Spring Boot 系四:@Value 解属性总结
    优质
    本篇为Spring Boot系列教程第四部分,主要讲解和总结了@Value注解在项目中的应用,包括如何使用它来注入各种类型的属性值。通过实例解析其功能与灵活性,帮助开发者更好地理解和利用这一特性。 Spring Boot系列四:Spring @Value 属性注入使用总结一 本段落主要对Spring框架中的@Value注解进行详细介绍,并给出实际应用示例来帮助读者更好地理解和掌握其用法,适用于希望深入了解属性配置机制的开发者参考学习。