Ich stieß auf dieses Python-Skript , das den Server auf die HeartBleed-Schwachstelle testet:
Wäre jemand in der Lage, den Inhalt des "Hallo" zu erklären, was wird gesendet und wie wurde dieser Inhalt aufgebaut?
Ich versuche nicht, dieses Skript böswillig zu benutzen. Ich wurde gebeten, einen Tomcat 7.0.2 Server auf die Sicherheitslücke zu testen: Ich habe überprüft, dass tcnative-1.dll openssl 1.0.1d verwendet, aber einige der eigenständigen Testtools, die ich getestet habe, berichten, dass dies nicht der Fall ist verwundbar.
hello
und hb
definieren Bytestrings lesbarer.
Die Funktion h2bin(x)
erledigt die ganze Arbeit:
so dass die Zeichenkette der Hexadezimalziffern alle Leerzeichen entfernt hat und dann von Hex in Byte dekodiert wird:
%Vor%Es ist nur eine kompakte Möglichkeit, eine Reihe von Bytes mit hexadezimaler Notation und zusätzlichen Leerzeichen anzugeben.
Die Hex-Daten selbst sind nur eine normale Heartbeat-Protokoll-Nachricht in rohen Bytes. Die Zeichenfolge hello
enthält eine TLS 1.1-Datensatznachricht , die durch das erste Byte identifiziert wird ( 16
hex, 22 dezimal) als Handshake-Record, Senden eines client_hello
(sechstes Byte ist 01
). Dabei wird lediglich eine TLS-Sitzung eingerichtet, die dem Server mitteilt, welche Verschlüsselungsarten der Client unterstützt. Es spielt keine Rolle, was darin enthalten ist, außer dass es dem Server mitteilt, dass der Client die Heartbeat-Erweiterung unterstützt (ein 00 0f
byte-Paar am Ende der Nachricht).
Es ist die hb
Nachricht , die wirklich interessant ist:
18
ist der Datensatz des Typs "heartbeat content type", 03 02
kennzeichnet die Protokollversion des TLS 1.1. Das 00 03
gibt an, wie groß die Nutzlast der Nachricht ist; 3 Bytes oder die gesamte zweite Zeile.
Die 3 Bytes der Nachricht selbst bestehen aus dem Heartbeat-Typ ( 01
oder 'request') und der Nachrichtenlänge ( 40 00
, 16384 Bytes), gefolgt von keine aktuelle Nachricht . Dies führt dazu, dass ein defekter SSL-Server eine Heartbeat-Antwort mit 16 KB Speicher zurücksendet. Die nicht vorhandene 0-Längenanforderungsnachricht wird zusammen mit dem Speicher ausgegeben, um die Anforderungslänge zu bilden.
Tags und Links python security openssl heartbleed-bug