黑客BinaryFormatter反序列化漏洞

0x00 前言BinaryFormatter和SoapFormatter两个类之间的区别在于数据流的格式不同,其他的功能上两者差不多,BinaryFormatter位于命名空间 System…

0x00序言 BinaryFormatter和SoapFormatter类之间的区别在于数据流的文件格式不同。其他功能类似。 BinaryFormatter坐落于命名空间 中。 System.Runtime.Serialization.Formatters.Binary它以二进制模式直接序列化对象。优势是它在.NET平台的不同版本号中迅速且适配。但是,使用没受信赖的二进制文件的反序列化可致反序列化系统漏洞和远程RCE进攻。在文中中,创作者从原理和编码财务审计的视角介绍和重现。 0x01 BinaryFormatter序列化 在使用BinaryFormatter类进行序列化的过程中,可以序列化使用[Serializable]申明的类。当然,一些不希望序列化的元素可以通过[NoSerialized]属性来避开。以下是一个说明问题的实例,首先定义TestClass对象

  定义了三个组员,并起动静态方法ClassMethod。序列化通过创建对象案例为组员分派值

  通常,使用Serialize获得序列化二进制文件内容,打开后显示的数据格式如下

  0x02 BinaryFormatter反序列化 2.2,反序列化使用方法

  反编码序列过程是将二进制数据转换为对象,并通过建立新对象来启用反序列化多个重载方法。可以看视图定义与SoapFormatter备份程序相同。 IRemotingFormatter和IFormatter插口由系统提供。几种不同的反编码序列方法是Deserialize,DeserializeMethodResponse,UnsafeDeserialize,UnsafeDeserializeMethodResponse。创作者通过建立新对象启用Deserialize方法实现的特定实现编码可以参照以下几点。

  反序列化TestClass类的组员名字的值。

  3.2,进攻向量 - ActivitySurrogateSelector 由于系统漏洞原则已在前一段文字中介绍过,因此文中不再沉余。对于并未阅读文章的人,请参阅《.NET高級编码财务审计(第八课) SoapFormatter反序列化系统漏洞》。彼此之间的唯一区别是BinaryFormatter类用以序列化数据。除此之外,通过启用ISerializationSurrogate来启用自定编码,我依然使用科学计算器在这里进行演试。转化成的二进制文件打开,如下如图。

  像以往一样通过BinaryFormatter类的Deserialize方法反序列化

  科学计算器会弹出来,但它也会抛出去异常,在web服务的情况下能回到500错误。

  2.2,进攻向量--WindowsIdentity 对于那些没有见到WindowsIdentity原理的人,请参照《.NET高級编码财务审计(第二课) Json.Net反序列化系统漏洞》,因为WindowsIdentity最后分析Base64编码数据,所以这儿序列化器被反序列化并弹出来科学计算器。

0x03编码财务审计透视图 3.2,UnsafeDeserialize 从编码财务审计的视角搜索系统漏洞的EntryPoint,UnsafeDeserialize提供比反序列化更好的性能。此方法需要传到两个必不可少主要参数。下一个主要参数可以为null。这不是很常见。需要知道的是,以下不是安全的编码:
  网络攻击可以通过简单地控制传送的字符串主要参数相对路径轻松实现反序列化系统漏洞进攻。 4.3,UnsafeDeserializeMethodResponse 与DeserializeMethodResponse对比,UnsafeDeserializeMethodResponse在性能上更好。此方法需要传送三个必不可少主要参数。下一个和第四个主要参数可以为null。这种方法不常见。只需要知道,以下不是安全编码: 图片13.png 3.2,反序列化 反序列化方法很常见。开发者通常使用此方法进行反序列化。此方法有两个重载。以下不是安全的编码。
  DeserializeMethodResponse 与Deserialize对比,DeserializeMethodResponse可以反序列化远程方法响应提供的Stream流。此方法需要传送三个必不可少主要参数。下一个和第四个主要参数可以为null。这种方法不常见。只需要知道,以下不是安全的编码:
  最后,使用此方法弹出来科学计算器并额外动画片。
  0x04引言 在实际开发设计中,BinaryFormatter 类从.NET Framework 2.0开始。官方建议使用BinaryFormatter而不是SoapFormatter。功能是BinaryFormatter可以尽快支持泛型等数据,在反序列化二进制文件时要注意数据本身的安全系数。不然将造成反序列化系统漏洞。最后,NET反序列化系列将同歩到htpp://github.Com/Ivan1ee/ htpp://ivan1ee.gitbook.io/ 创作者将继续发布高品质的.NET反序列化系统漏洞文章,欢迎大家继续注意,沟通,更多.NET安全和方法可以致力于试验室公共性手机号码。