2016-11-22 3 views
0

Ich habe ein Skript hier mit einigen grundlegenden Funktionen: Funktion 1 - wget, öffnet eine Webseite und speichert es in einer lokalen Variablen und schließt dann. Funktion 2 - kratzt diese Webseite für MD5-Hash-Werte. Funktion 3 - nimmt die Hash-Werte und knackt sie mit einem Wörterbuch häufig verwendeter Passwörter.Nicht sicher, wie man die Ausgabe von einer Funktion als Eingabe für eine andere

Mein Problem ist, meine Ausgabe von Funktion 2 zu erhalten und sie in Funktion 3 einzufügen. Dies liegt teilweise daran, dass die Ausgabe von Funktion 2 eine Liste ist und Funktion 3 nur nach Hashwerten sucht.

Sie werden wahrscheinlich mehr aus dem Lesen meines Codes zu verstehen, unten ist mein Code so weit.

import sys, hashlib, re, urllib 

def wget(url): # could import webpage_get and use wget() from there instead 
    '''Read the contents of a webpage from a specified URL''' 
    print '[+]---------------------------------------------------------------------------- ' #CHANGE THIS 
    # open URL 
    webpage = urllib.urlopen(url) # opens url like a file 
    # get page contents 
    page_contents = webpage.read() # reads content of webpage 
    return page_contents 
    page_contents = webpage.close() # close webpage 

def findmd5(text): 
    '''Find all md5 hash values''' 
    md5value = re.findall(r'([a-fA-F\d]{32})', text) 
    count = len(md5value) 
    print "[+] Total number of md5 hash values found: %s" % count 
    for x in md5value: 
     print x 


def dict_attack(passwd_hash): 

    dic = ['123','1234','12345','123456','1234567','12345678','password','qwerty','abc','abcd','abc123','111111','monkey','arsenal','letmein','trustno1','dragon','baseball','superman','iloveyou','starwars','montypython','cheese','123123','football','password','batman'] 


    passwd_found = False 
    for value in dic: 
     hashvalue = hashlib.md5(value).hexdigest() 
     if hashvalue == passwd_hash: 
      passwd_found = True 
      recovered_password = value 

    if passwd_found == True: 
     print '[+] Password recovered: %s'% (recovered_password) 
    else: 
     print '[-] Password not recovered' 


def main(): 
    # temp testing url argument 
    sys.argv.append('URL HERE!') 

    # Check args 
    if len(sys.argv) != 2: 
     print '[-] Usage: email_analysis URL/filename' 
     return 
    #call functions 
    try: 
     print '[+] md5 values found: ' 
     print findmd5(wget(sys.argv[1])) 
     print '[+] Cracking hash values: ' 


    except IOError: 
     print 'Error' 

if __name__ == '__main__': 
    main() 

Jede Hilfe wird sehr geschätzt!

+0

Ich sah eine Frage über genau diese Aufgabe vor weniger als einer Stunde. Kannst du mit deinem Klassenkameraden arbeiten? – TigerhawkT3

Antwort

0

wget: Setzen Sie die Rückgabeanweisung als letzte Anweisung.

findmd5: Vom Ausdruck der Ergebnisse wurde dahingehend geändert, dass sie an eine Variable in main zurückgegeben werden.

main: in for-Schleife hinzugefügt, um über gefundene Hashes zu iterieren und dict_attack auf jeden Wert anzuwenden.

Ich habe jedoch keine Pause oder Stop-Bedingung eingebaut, also selbst wenn gefunden, wird das Programm weiterlaufen. Es wird jedoch immer noch das gefundene Ergebnis gedruckt.

import sys, hashlib, re, urllib 

def wget(url): # could import webpage_get and use wget() from there instead 
    '''Read the contents of a webpage from a specified URL''' 
    print ('[+]---------------------------------------------------------------------------- ') #CHANGE THIS 
    # open URL 
    webpage = urllib.urlopen(url) # opens url like a file 
    # get page contents 
    page_contents = webpage.read() # reads content of webpage 
    page_contents = webpage.close() # close webpage 
    return page_contents 

def findmd5(text): 
    '''Find all md5 hash values''' 
    md5value = re.findall(r'([a-fA-F\d]{32})', text) 
    count = len(md5value) 
    print ("[+] Total number of md5 hash values found: %s" % count) 
    return md5value 


def dict_attack(passwd_hash): 

    dic = ['123','1234','12345','123456','1234567','12345678','password','qwerty','abc','abcd','abc123','111111','monkey','arsenal','letmein','trustno1','dragon','baseball','superman','iloveyou','starwars','montypython','cheese','123123','football','password','batman'] 


    passwd_found = False 
    for value in dic: 
     hashvalue = hashlib.md5(value).hexdigest() 
     if hashvalue == passwd_hash: 
      passwd_found = True 
      recovered_password = value 

    if passwd_found == True: 
     print ('[+] Password recovered: %s'% (recovered_password)) 
    else: 
     print ('[-] Password not recovered') 


def main(): 
    # temp testing url argument 
    sys.argv.append('URL HERE!') 

    # Check args 
    if len(sys.argv) != 2: 
     print ('[-] Usage: email_analysis URL/filename') 
     return 
    #call functions 
    try: 
     md5Values = findmd5(wget(sys.argv[1])) 
     for md5value in md5values: 
      dict_attack(md5value) 
      print ('[+] Cracking hash values: ') 


    except IOError: 
     print ('Error') 

if __name__ == '__main__': 
    main() 
+0

Vielen Dank dafür !! –

0

Billy, geben Sie eine Liste der gefundenen Hashes zurück, statt sie zu drucken (es sieht so aus, als ob Sie denken, es wäre bash, aber Sie müssen die Ausgabe einer Funktion nicht "drucken", wie Sie es getan haben Bash, in Python können Sie ein Array mit den gefundenen Elementen zurückgeben.

Ihre Regexp für den Hash verwendet \d, aber das beinhaltet auch -, es könnte etwas bringen, das ist kein MD5-Hash.

Verwandte Themen