private void ProcessKdcProxy(KdcProxyMessage proxyMessage, string source) { var message = proxyMessage.UnwrapMessage(); var kdcBody = new { AsReq = TryDecode(message, m => KrbAsReq.DecodeApplication(m)), AsRep = TryDecode(message, m => KrbAsRep.DecodeApplication(m)), TgsReq = TryDecode(message, m => KrbTgsReq.DecodeApplication(m)), TgsRep = TryDecode(message, m => KrbTgsRep.DecodeApplication(m)), KrbError = TryDecode(message, m => KrbError.DecodeApplication(m)) }; if (kdcBody.AsReq != null) { ExplodeObject(kdcBody.AsReq, $"AS-REQ ({source})"); } else if (kdcBody.AsRep != null) { ExplodeObject(kdcBody.AsRep, $"AS-REP ({source})"); } else if (kdcBody.TgsReq != null) { ExplodeObject(kdcBody.TgsReq, $"TGS-REQ ({source})"); } else if (kdcBody.TgsRep != null) { ExplodeObject(kdcBody.TgsRep, $"TGS-REP ({source})"); } else if (kdcBody.KrbError != null) { ExplodeObject(kdcBody.KrbError, $"Krb-Error ({source})"); } }
public void Message_TgsReqS4uProxy() { var file = ReadDataFile("messages\\tgs-req-app2-s4u-proxy"); var decoded = TestSimpleRoundtrip( "tgs-req-app2-s4u-proxy", file.Skip(4).ToArray(), v => KrbTgsReq.DecodeApplication(v), t => t.EncodeApplication().ToArray() ); Assert.IsNotNull(decoded); }
public void Message_TgsReqKrbTgtRenew() { var file = ReadDataFile("messages\\tgs-req-testuser-krbtgt-renew"); var decoded = TestSimpleRoundtrip( "tgs-req-testuser-krbtgt-renew", file.Skip(4).ToArray(), v => KrbTgsReq.DecodeApplication(v), t => t.EncodeApplication().ToArray() ); Assert.IsNotNull(decoded); }
public void TgsParse() { var tgsReqBytes = ReadDataFile("messages\\tgs-req-testuser-host-app03").Skip(4).ToArray(); var tgsReq = KrbTgsReq.DecodeApplication(tgsReqBytes); var paData = tgsReq.PaData.First(p => p.Type == PaDataType.PA_TGS_REQ); var apReq = paData.DecodeApReq(); var krbtgtKey = new KerberosKey(key: key); var krbtgt = apReq.Ticket.EncryptedPart.Decrypt(krbtgtKey, KeyUsage.Ticket, b => new KrbEncTicketPart().DecodeAsApplication(b)); Assert.AreEqual("testuser", krbtgt.CName.FullyQualifiedName); }
private static KrbApReq ExtractApReq(KrbTgsReq tgsReq) { var paData = tgsReq.PaData.First(p => p.Type == PaDataType.PA_TGS_REQ); return(paData.DecodeApReq()); }