2017-09-03 5 views
0

J'ai suivi un cours de piratage éthique. Une partie du cours consiste à créer un script Python qui trouve le mot de passe pour un fichier zip verrouillé, à partir d'un fichier texte de liste de mots de passe (espérons que cela a du sens!) - itérativement à travers un fichier texte essayant chaque mot de passe. Le script ne fonctionne pas, ne fait pas d'erreur, et l'instructeur dit "bon, ça marche pour moi" - pas utile. Voici le script:Le script de piratage éthique ne fonctionne pas - aucun message d'erreur

import optparse 
import zipfile 
from threading import Thread 

def extract_zip(zfile, password): 
    try: 
     zfile.extractall(pwd=password) 
     print("[+] Password Found: " + 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, arg) = 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=extract_zip, args=(zFile, password)) 
     t.start() 

if __name__ == '__main__': 
    main() 

Les deux autres fichiers sont un fichier texte avec une liste de mots de passe et un mot de passe fichier zip protégé où l'un des mots de passe du fichier de texte déverrouiller. Dans le cours il y a un fil mentionnant que optparse est déprécié, et argparse est son remplacement - mais même réécrire le script avec cela ne fonctionne pas. A défaut de fermer cette partie du cours, je cherche de l'aide pour savoir pourquoi cela ne fonctionne pas.

Merci d'avance pour toute aide à ce sujet.

+0

Avez-vous débogué votre débogage de code à la condition if responsable de l'extraction du mot de passe et voyez que vous pourriez faire une erreur de lecture de fichier. –

+0

Je ne sais pas comment faire ça - encore. J'ai essayé d'utiliser un débogueur mais c'est au-delà de ma connaissance en ce moment.En regardant le code, est le (options, arg) le problème? – Steve

+1

installez pycharm et allez sur youtube pour le débogage en python c'est facile. –

Répondre

-1

J'exécuter votre code à l'aide python3 il excuted sans problème, je l'ai fait il y a longtemps c'est un livre appelé quelque chose de violent

le password.txt doit contenir cette ligne

victime: HX9LLTdc/Jide: 503 : 100: Iama victime:/home/victime:/bin/sh racine: DFNFxgW7C05fo: 504: 100: Markus Hess:/root:/bin/bash

et la commande devrait ressembler à python stack.py - f evil.zip -d mots de passe.txt

0

Par mon commentaire ci-dessus - j'ai ajouté le code ci-dessous juste en dessous de la déclaration "essayer":

password = bytes(password.encode('utf-8'))

... puis a changé

print('[+] Password Found: ' + password + '\n')

à

print("[+] Password Found: " + (password.decode("utf-8")) + '\n')

Maintenant, je reçois le mot de passe imprimé sur la console, et le fichier zip est décompressé. Voici le code de travail final.

import optparse 
import zipfile 
from threading import Thread 


def extract_zip(zfile, password): 
    try: 
     password = bytes(password.encode('utf-8')) 
     zfile.extractall(pwd=password) 
     print("[+] Password Found: " + (password.decode("utf-8")) + '\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 is None) | (options.dname is 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=extract_zip, args=(zFile, password)) 
     t.start() 


if __name__ == '__main__': 
    main() 

La façon dont je trouve cela était en changeant le « sauf » déclaration d'imprimer des exceptions à la console:

except Exception as e: print(e) 

De là, j'ai eu quelques problèmes à résoudre, mais au moins j'avais erreurs à travailler avec. Une fois que le mot de passe a été enregistré avec succès sur la console, je change l'instruction d'exécution en "pass" - je n'ai pas besoin de voir les mots de passe qui ont échoué!

J'espère que cela aide quelqu'un d'autre à résoudre les mêmes problèmes que j'avais.