Zip-File Password Cracker
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Domaine | Sécurité offensive — cassage de mot de passe |
| Type | Script Python 2 (proof of concept) |
| Modules | zipfile, optparse, threading
|
| Voir aussi | Test de penetration · Rappel python |
Zip-File Password Cracker illustre l'extraction d'une archive ZIP protégée par mot de passe et le cassage par dictionnaire : le script essaie chaque mot d'un fichier de dictionnaire jusqu'à trouver le mot de passe qui permet l'extraction. Une variante multi-thread accélère le test. Exemples en Python 2.
Extraction d'un fichier
import zipfile
zFile = zipfile.ZipFile("evil.zip")
zFile.extractall(pwd="secret")
Avec gestion d'erreur :
import zipfile
zFile = zipfile.ZipFile("evil.zip")
try:
zFile.extractall(pwd="oranges")
except Exception, e:
print e
Cassage par dictionnaire
import zipfile
zFile = zipfile.ZipFile('evil.zip')
passFile = open('dictionary.txt')
for line in passFile.readlines():
password = line.strip('\n')
try:
zFile.extractall(pwd=password)
print '[+] Password = ' + password + '\n'
exit(0)
except Exception, e:
pass
Organisation en fonctions
import zipfile
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
return password
except:
return
def main():
zFile = zipfile.ZipFile('evil.zip')
passFile = open('dictionary.txt')
for line in passFile.readlines():
password = line.strip('\n')
guess = extractFile(zFile, password)
if guess:
print '[+] Password = ' + password + '\n'
exit(0)
if __name__ == '__main__':
main()
Version multi-thread
Chaque test de mot de passe est confié à un thread :
import zipfile
from threading import Thread
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Found password ' + password + '\n'
except:
pass
def main():
zFile = zipfile.ZipFile('evil.zip')
passFile = open('dictionary.txt')
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=extractFile, args=(zFile, password))
t.start()
if __name__ == '__main__':
main()
Ajout d'options en ligne de commande
import zipfile
import optparse
from threading import Thread
def extractFile(zFile, password):
try:
zFile.extractall(pwd=password)
print '[+] Found password ' + password + '\n'
except:
pass
def main():
parser = optparse.OptionParser("usage %prog -f <zipfile> -d <dictionary>")
parser.add_option('-f', dest='zname', type='string',
help='specify zip file')
parser.add_option('-d', dest='dname', type='string',
help='specify dictionary file')
(options, args) = parser.parse_args()
if (options.zname == None) | (options.dname == None):
print parser.usage
exit(0)
else:
zname = options.zname
dname = options.dname
zFile = zipfile.ZipFile(zname)
passFile = open(dname)
for line in passFile.readlines():
password = line.strip('\n')
t = Thread(target=extractFile, args=(zFile, password))
t.start()
if __name__ == '__main__':
main()
Voir aussi
- Test de penetration — panorama d'outils en Python
- Rappel python — rappels de syntaxe orientés sécurité