2016-11-12 7 views
0

Ich versuche diese Hausaufgaben zu machen https://www.root-me.org/en/Challenges/Cryptanalysis/File-PKZIP Wenn ich eine Funktion schreibe, um es zu knacken.Warum pkzip akzeptieren zwei Passwörter?

import subprocess from time import sleep 

file = open('/home/begood/Downloads/SecLists-master/Passwords/' 
      'rockyou-75.txt', 'r') lines = file.readlines() file.close() for line in lines: 
    command = 'unzip -P ' + line.strip() + ' /home/begood/Downloads/ch5.zip' 
    print command 
    p = subprocess.Popen(
     command, 
     stdout=subprocess.PIPE, shell=True).communicate()[0] 
    if 'replace' in p: 

     print 'y\n' 
    sleep(1) 

Es Passwort-stop = scooter:

unzip -P scooter /home/begood/Downloads/ch5.zip replace readme.txt?   [y]es, [n]o, [A]ll, [N]one, [r]ename: 

aber wenn ich es verwenden, um zu entpacken, sagte sie:

inflating: /home/begood/readme.txt 
    error: invalid compressed data to inflate 

Und es echtes Passwort ist: 14535. Warum pkzip akzeptieren zwei Passwort?

Antwort

1

Ich vermute, dass die verwendete Verschlüsselung die alte, sehr schwache Verschlüsselung ist, die Teil des ursprünglichen PKZIP-Formats war.

Diese Verschlüsselungsmethode hat einen 12-Byte-Salzkopf vor den komprimierten Daten. Von der PKWare Spezifikation:

Nachdem der Header entschlüsselt wird, soll der letzte 1 oder 2 Byte in Buffer das höherwertige Wort/Byte des CRC sein für die Datei ist entschlüsselte, gespeichert in Intel Low- Byte/High-Byte-Reihenfolge. Versionen von PKZIP vor 2.0 verwendet eine 2-Byte-CRC-Prüfung; Eine 1-Byte-CRC-Prüfung wird für Versionen nach 2.0 verwendet. Dies kann verwendet werden, um zu testen, ob das angegebene Passwort korrekt ist oder nicht.

Es war ursprünglich zwei Bytes in der 1.0-Spezifikation, aber in der 2.0-Spezifikation und in der zugehörigen Version von PKZIP wurde der Prüfwert auf ein Byte geändert, um Passwort-Suchen wie das, was Sie mehr tun schwer. Das Ergebnis ist, dass ungefähr eines von 256 zufälligen Passwörtern dazu führt, dass diese erste Prüfung bestanden wird, und dann fortfahren, um zu versuchen, die falsch entschlüsselten komprimierten Daten zu dekomprimieren, nur dann in einen Fehler zu laufen.

Also weit, weit mehr als zwei Passwörter, die "akzeptiert" werden. Es wird jedoch nicht sehr viele Bytes dekomprimierter Daten benötigen, um zu erkennen, dass das Passwort dennoch falsch war.

+0

Sieht aus wie ein Padding Oracle Angriff in RSA! – Mr2uang

Verwandte Themen