
Proof-of-Concept-Tools zur Erforschung von NTLM-Relaying-Angriffen auf ADFS
Dieses Repository enthält zwei Hilfsprogramme: NTLMParse und ADFSRelay. NTLMParse ist ein Tool zum Dekodieren von base64-kodierten NTLM-Nachrichten und zum Anzeigen von Informationen über die zugrunde liegenden Eigenschaften und Felder innerhalb der Nachricht. Die Untersuchung dieser NTLM-Nachrichten ist hilfreich, wenn das Verhalten einer bestimmten NTLM-Implementierung erforscht wird. ADFSRelay ist ein Proof-of-Concept-Tool, das im Rahmen der Forschung zur Machbarkeit von NTLM-Relay-Angriffen auf den ADFS-Dienst entwickelt wurde. Dieses Tool kann genutzt werden, um NTLM-Relay-Angriffe auf ADFS durchzuführen. Wir haben außerdem einen Blogbeitrag veröffentlicht, der ADFS-Relay-Angriffe detaillierter behandelt [1].
Um das NTLMParse-Tool zu verwenden, müssen Sie lediglich eine Base64-kodierte Nachricht an die Anwendung übergeben, und es dekodiert die relevanten Felder und Strukturen innerhalb der Nachricht. Der folgende Ausschnitt zeigt die erwartete Ausgabe von NTLMParse, wenn es aufgerufen wird:
➜ ~ pbpaste | NTLMParse
(ntlm.AUTHENTICATE_MESSAGE) {
Signature: ([]uint8) (len=8 cap=585) {
00000000 4e 54 4c 4d 53 53 50 00 |NTLMSSP.|
},
MessageType: (uint32) 3,
LmChallengeResponseFields: (struct { LmChallengeResponseLen uint16; LmChallengeResponseMaxLen uint16; LmChallengeResponseBufferOffset uint32; LmChallengeResponse []uint8 }) {
LmChallengeResponseLen: (uint16) 24,
LmChallengeResponseMaxLen: (uint16) 24,
LmChallengeResponseBufferOffset: (uint32) 160,
LmChallengeResponse: ([]uint8) (len=24 cap=425) {
00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000010 00 00 00 00 00 00 00 00 |........|
}
},
NtChallengeResponseFields: (struct { NtChallengeResponseLen uint16; NtChallengeResponseMaxLen uint16; NtChallengeResponseBufferOffset uint32; NtChallengeResponse []uint8; NTLMv2Response ntlm.NTLMv2_RESPONSE }) {
NtChallengeResponseLen: (uint16) 384,
NtChallengeResponseMaxLen: (uint16) 384,
NtChallengeResponseBufferOffset: (uint32) 184,
NtChallengeResponse: ([]uint8) (len=384 cap=401) {
00000000 30 eb 30 1f ab 4f 37 4d 79 59 28 73 38 51 19 3b |0.0..O7MyY(s8Q.;|
00000010 01 01 00 00 00 00 00 00 89 5f 6d 5c c8 72 d8 01 |........._m\.r..|
00000020 c9 74 65 45 b9 dd f7 35 00 00 00 00 02 00 0e 00 |.teE...5........|
00000030 43 00 4f 00 4e 00 54 00 4f 00 53 00 4f 00 01 00 |C.O.N.T.O.S.O...|
00000040 1e 00 57 00 49 00 4e 00 2d 00 46 00 43 00 47 00 |..W.I.N.-.F.C.G.|
Nachfolgend finden Sie eine Beispiel-NTLM-AUTHENTICATE_MESSAGE-Nachricht, die zum Testen verwendet werden kann:
TlRMTVNTUAADAAAAGAAYAKAAAACAAYABuAAAABoAGgBYAAAAEAAQAHIAAAAeAB4AggAAABAAEAA4AgAAFYKI4goAYUoAAAAPqfU7N7/JSXVfIdKvlIvcQkMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwAQQBDAHIAbwBzAHMAZQByAEQARQBTAEsAVABPAFAALQBOAEkARAA0ADQANQBNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADDrMB+rTzdNeVkoczhRGTsBAQAAAAAAAIlfbVzIctgByXRlRbnd9zUAAAAAAgAOAEMATwBOAFQATwBTAE8AAQAeAFcASQBOAC0ARgBDAEcAVQA0AEcASABPADAAOAA0AAQAGgBDAE8ATgBUAE8AUwBPAC4ATABPAEMAQQBMAAMAOgBXAEkATgAtAEYAQwBHAFUANABHAEgATwAwADgANAAuAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABQAaAEMATwBOAFQATwBTAE8ALgBMAE8AQwBBAEwABwAIAIlfbVzIctgBBgAEAAIAAAAIADAAMAAAAAAAAAABAAAAACAAABQaOHb4nG5F2JL1tA5kL+nKQXJSJLDWljeBv+/XlPXpCgAQAON+EDXYnla0bjpwA8gfVEgJAD4ASABUAFQAUAAvAHMAdABzAC4AYwBvAG4AdABvAHMAbwBjAG8AcgBwAG8AcgBhAHQAaQBvAG4ALgBjAG8AbQAAAAAAAAAAAKDXom0m65knt1NeZF1ZxxQ=
Das einzige erforderliche Argument für ADFSRelay ist die URL des ADFS-Servers, der für einen NTLM-Relay-Angriff angegriffen werden soll. Drei optionale Argumente sind -debug zum Aktivieren des Debug-Modus, -port zum Festlegen des Ports, auf dem der Dienst lauschen soll, und -help zum Anzeigen des Hilfemenüs. Ein Beispiel-Hilfemenü ist unten dargestellt:
➜ ~ ADFSRelay -h
Usage of ADFSRelay:
-debug
Enables debug output
-help
Show the help menu
-port int
The port the HTTP listener should listen on (default 8080)
-targetSite string
The ADFS site to target for the relaying attack (e.g. https://sts.contoso.com)
➜ ~
[1] https://www.praetorian.com/blog/relaying-to-adfs-attacks/