Entschlüsseln Sie den SSL-Datenverkehr mit dem Befehlszeilenprogramm openssl 9

447
David B

Nachdem darauf hingewiesen wurde, dass der Client das erweiterte Hauptgeheimnis anforderte, und ich antwortete auch damit, dass ich das Hauptgeheimnis entschlüsselte, als würden wir nicht das erweiterte Hauptgeheimnis wie definiert verwenden. Ich habe die Codierung auf meinem Server geändert, um zu antworten zurück, um das erweiterte Hauptgeheimnis nicht zu verwenden, und durchlief meine gleiche Prozessgliederung in meinen vorherigen Beiträgen Teil 6, Teil 7 und letzter Teil 8

Durchlaufen den gleichen Prozess wie Gliederung mit erweitertem Hauptgeheimnis, das nicht vom Server gesendet wurde, entschlüsselte ich die verschlüsselte Handshake-Nachricht. Ich glaube richtig, da der (14) -Client fertig ist und ordnungsgemäß aufgefüllt wird

$cat encmsg.bin | openssl aes-256-cbc -d -K $key -iv $iv -nopad |xxd 0000000: 1400 000c a5de 1f35 2324 e871 be46 82a0 .......5#$.q.F.. 0000010: a1a0 d659 86b6 1c7f 043d d548 9a62 1e9d ...Y.....=.H.b.. 0000020: 23c6 f8d5 0b0b 0b0b 0b0b 0b0b 0b0b 0b0b #............... 

Für meinen Proof-of-Concept möchte ich die Validierung des verifizierten fertigen Clients für den Client überspringen und sofort mit der Nachricht "Server beendete" antworten. Ich glaube, um das zu berechnen, möchte ich das openssl so füttern, wie ich wo gewesen bin

data =

handshake_messages All of the data from all messages in this handshake (not including any HelloRequest messages) up to, but not including, this message. This is only data visible at the handshake layer and does not include record layer headers 

Aber ich bin darüber etwas verwirrt, weil der RFC auch im selben Abschnitt sagt:

 The value handshake_messages includes all handshake messages starting at ClientHello up to, but not including, this Finished message. 

Ich glaube, das würde die ersten 5 Bytes ausschließen 16 03 03 00 ?? Ich würde es für den Header sehen und obwohl die Hallo-Nachrichten ein Handshake-Protokoll anzeigen, werden sie ebenfalls ausgeschlossen. Daher würde ich aus meinem Wireshark-Protokoll Folgendes hinzufügen: Certificate, Client Key Exchange und Encrypted Handshake Message (da ich jedoch etwas verwirrt bin, könnte dies mit anfangen.) das clienthello und auch das serverhello beinhaltet im Grunde alles bis auf diesen Punkt, ausgenommen die Header-Datensätze)

dann Aufruf von openssl

seed = "server finished"+data (data=above)  key = master secret openssl dgst -sha256 -mac hmac -macopt hexkey:$key <seed -binary >a1 

Diese wird dann verschlüsselt und zurückgesendet, wenn die verschlüsselte Handshake-Nachricht meines Servers korrekt ist.

0

0 Antworten auf die Frage