ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Чужие Статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Брутальная простота
  #1  
Старый 09.02.2007, 14:33
Аватар для fYt
fYt
Познающий
Регистрация: 11.01.2007
Сообщений: 82
Провел на форуме:
592893

Репутация: 108
По умолчанию Брутальная простота

Брутальная простота

Из этой статьи Вы подчерпнёте полезную информацию относительно того, как следует обходиться с разнообразными дампами бд. В частности, дампами форумов. А кто ещё совсем маленький и неопытный, узнает много всего интересного и познавательного - в бруте ничего сложного нет, нужно только не промахиваться мимо кнопочек. Я дам несколько действенных советов относительно брута хэшей и посоветую тем кто недопёр сам, что и как брутить. И также экслюзивно для читатейлей журнала и специально для журнала Xakepy.ry выложу скрипт, написанный для работы с базами. Оговорюсь, что для успешного применения всего, описанного ниже, понадобятся следующие инструменты:

- PHP 4.3.3 и выше
- Passwords Pro, есть такой программ полезный
- руки и голова в полном боекомплекте

Итак, допустим Вы каким-то образом заполучили дамп базы данных. И причём не один :-D (нет и не два), а целую кучу. Упустим каким именно образом. Пусть это будут дампы форумов. Причём дампы таблицы пользователей (ну а что ещё то надо? ). При обретении сего полезного кладезя данных перед Вами сразу встаёт один из двух возможных путей:

а) кудаб загнать всё это добро
б) чем бы разложить все эти кучи одинаковых баз данных по полочкам для дальнейшего
1) брута админских, асечных, и мыльных паролей
2) сортировки по мыльным базам в зависимости от содержания сайта/форума (мало ли Вы злобный спамер или крабер).


Ни для кого думаю не является открытием, что пароль на форуме и пароль на мыле или номере аськи совпадает у 70% пользователей. Ведь тогда надо для каждого форума придумывать новый отдельный пароль, а их надо записывать или запоминать, а это так лениииво.. Что можно получить от асек и мыл? Ну пфф, кто ещё не догадался, перечислю:

- сами базы мыл, особенно если на форуме зарегистрировано много пользователей, можно использовать/загнать как базы для спама, причём тематические (ясно что на автомобильном форуме в основном будут регистрироваться люди, которым интересна данная тема).
- сбрученные мыла можно использовать/загнать под спам (именно для отправки спама через них), только было бы неплохо проверить сначала их на предмет валидности (около 15-20% всё равно отсеятся). Но многопоточный скрипт для проверки мыл пардон я Вам выкладывать не буду, уж простите ;-)
- сбрученные 6-7знаки можно использовать самому, как понравится, либо отдать в асечный магазин. Проверять аси можно IPDBrute (asechka.ru в downloads), нужно иметь только список проксей (Forum Proxy Leecher) и свободное время.
- сбрученные 8-9 знаки бывают порой очень даже красивые (xy, xyz, как вам 222272222?%) ), т.н. слоны, их тоже можно использовать или отдать в магаз/продать. Остальные же 9знаки также можно выложить/загнать под флуд.

Вот сколько перспектив перед Вами открывается =). Однако вернёмся к написанному выше. С пунктом а) думаю Вы сами решите как быть, если Вам самим влом разбираться с базами, а по второму пункту я продолжу повествование дальше. Не правда ли, было бы крайне неплохо привести все имеющиеся дампы в вид всего пары файлов со всеми хэшами для дальнейшей отправки на брут в ПассворсПро, причём отсортировать всё по роду вашей деятельности (аськи, мыла, пассы админов), убирая всё лишнее, имея возможность выбрать, в каком порядке всё сортировать. Ведь не разбирать же всё вручную!

Специально и экслюзивно, только для Вас и только сегодня (аплодисменты и крики на заднем плане) - универсальный скрипт для разбора баз данных! (слова тонут в овациях)

Код:
<?

/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~[ xxx ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*                    
/*     Forum Dump Parser v0.2 (FDPv0.2)       
/*         by Re@ctor          
/*     http://truenet.net.ru/security/        
/*                    
/*                    
/*    Скрипт предназначен для частного использования и позволяет      
/* привести имеющиеся дампы баз данных в единый удобный формат для    
/* дальнейшего анализа в программе Passwords Pro, либо просто     
/* в списки для других программ.            
/*                    
/*   Скрипт запрещается использовать в корыстных целях и автор не    
/* несёт ответственности за возможный ущерб, причинённый от исполь-   
/* зования данного скрипта.             
/*                    
/*   Скрипт запрещается использовать в противозаконных целях, либо    
/* целях, ведущих к умышленному или неумышленному нарушению законода- 
/* тельства Российской Федерации.            
/*                    
/*    Хорошего дня и доброго насроения!;-)       
/*    Помните про существование TrueNET! =)       
/*                    
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~[ xxx ]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

###### 1. выходной формат файлов ######
# для брута, формат Passwords Pro
#$sort = array('username','password','salt'); # пользователи
#$sort = array('email','password','salt'); # мыльники
$sort = array('icq','password','salt'); # аськи
# помните, что формат PPro - имя:хэш:сальт:расшифр.пароль:комментарий
# поэтому надо писать от 2 до 3 значений, т.к. меньше или больше
# будет воспринято неверно программой.

# просто базы
#$sort = array('email'); # e-mail
#$sort = array('icq'); # icq

###### 2. формирование строк ######
$delim = "¤"; # разделитель между значениями
$br = "\n"; # чем заканчивать строку (\n - перенос строки)

###### 3. промежуточный вывод ######
$makefiles = 1; # делать ли отдельные файлы для каждого дампа
$ext = "txt"; # расширение выходного файла этих файлов

###### 4. параметры сбора информации ######
$site = 1; # если $makefiles = 0;, то получать сведения о сайте
# из титла и мета-тегов (необоходимо подключение к сети) и записывать в начало файла
# ( удобно при составлении тематических спам-баз )
# формат файла должен быть префиксАДРЕС_САЙТАрасширение, где префикс и расширение любые
$site_prefix = ''; # если $site=1, указать префикс файлов
$site_ext = '.sql'; # если $site=1, указать расширение файлов
$convert = 0; # конвертировать полученный текст в win-1251, если оно не в нём (отключить при багах)

###### 5. общий файл с данными ######
$hashmake = 1; # делать ли единый файл со всеми хэшами
$hash_filename = '!PasswordsPro.Hashes'; # имя файла с хэшами

###### 6. выборка из дампов админов в отдельный файл ######
$admins = 1; # сделать файл с хэшами админов дампов
$admin_pass = 'password'; # имя ячейки с хэшем пароля
$admin_salt = 'salt'; # имя ячейки с салом пароля
$admin_comment = array('username','email','icq'); # то что будет в комментарии в полях пассворс-про
$admin_filename = '!admin.PasswordsPro.Hashes';

###### 7. (WARNING!) имя первой ячейки в таблице ######
$firstintable = 'userid'; # название первой ячейки в таблице (важно!)

ini_set("max_execution_time","86400");
set_time_limit(0);

function make($value) { return preg_replace("'\'(.*?)\''i",'\\1',$value); }
function checksalt($salt) { if(strlen($salt)>3) return str_replace(array("\\\\",'\"',"\'"),array("\\",'"',"'"),$salt); else return $salt; }
function koi($txt) { return convert_cyr_string($txt,'k','w'); }
function iso($txt) { return convert_cyr_string($txt,'i','w'); }
function myau() { echo "\n\nDone!;-D\n\nNice day. Visit http://truenet.net.ru/ !\n\n"; }

$d=opendir('.');
while(($e=readdir($d))!=false) {
if($e=='.'||$e=='..'||$e==$admin_filename||$e==$hash_filename||$e==$argv[0]) continue;
if(is_file($e)) {
 if($makefiles==1)$f = fopen("$e.$ext","w+");
 echo "[+] $e (".filesize($e)." bytes)\n";
 $file = file($e);
 
 foreach($file as $a) {
  $tmp = explode(' ',$a); $tablesuf=$tmp[1];
  if(!$vars) { if($tablesuf==$firstintable) { $vars[]=array('name'=>$firstintable,'num'=>0); } continue; }
  foreach(array_unique(array_merge($sort,$admin_comment)) as $s) {
   if($tablesuf==$s) { $vars[]=array('name'=>$s,'num'=>count($vars)); $y=1; }
  }
  if(!$y) $vars[]='b'; else unset($y);
  if(strstr($a,'PRIMARY KEY')) break;
 }
 
 foreach($file as $a) {
  if(strstr($a,"INSERT INTO")) {
   $tmp = preg_replace("'INSERT INTO (.*?) VALUES\((.*?)\);'i",'\\2',$a);
   $values = explode(',',$tmp);
   foreach($values as $v) { $m[] = str_replace(array("\r","\n"),'',$v); }
   foreach($sort as $s) {
    if(!$vars) { echo "[!] Can't get table values from $e =[\n"; break; } else foreach($vars as $v) {
     if($admins==1&&$hashmake==0&&$makefiles==0) {
      if(!$tr) $tr[]=$e;
      if($v['name']==$admin_pass) $tr[]=make($m[$v['num']]);
      elseif($v['name']==$admin_salt) $tr[]=checksalt(make($m[$v['num']]));
      foreach($admin_comment as $comm) if($comm==$v['name']) $comment[] = make($m[$v['num']]);
      $admok=1;
     } else {
      if($s==$v['name']) {
       if($s=='salt') $tm[] = checksalt(make($m[$v['num']])); 
       else $tm[] = make($m[$v['num']]);
      }
      if($admins==1&&!$admok) {
       if(!$tr) $tr[]=$e;
       if($v['name']==$admin_pass) $tr[]=make($m[$v['num']]);
       elseif($v['name']==$admin_salt) $tr[]=checksalt(make($m[$v['num']]));
       foreach($admin_comment as $comm) if($comm==$v['name']) $comment[] = make($m[$v['num']]);
      }
     }
    }
    if($admok==1) break; $admok=2;
   }
   if($tm[0])$globhash[]=$towrite[]=@implode($tm,$delim); if($admins==1)if($tr[0])$odmen[]=@implode($tr,$delim).$delim.$delim.@implode($comment,', ');
   unset($tr); unset($m); unset($tm); unset($comment);
   if($admok==1) break;
  }
 }
 if($makefiles==1) {
  if($site==1) {
   $host = preg_replace("'$site_prefix(.*?)$site_ext'i",'\\1',$e);
   echo "[:] connecting to $host..\n";
   $fp = fsockopen($host,80,&$errno,&$errstr,5);
   if(!$fp) echo "[:] Error connecting $host ($errno - $errstr)\n";
   fputs($fp,"GET / HTTP/1.0\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en)\r\nHost: $host\r\nAccept-Language: ru\r\nAccept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n\r\n");
   while(!feof($fp)) {
    $tmp=fgets($fp,1000);
    if(preg_match("'charset='i",$tmp)||!$schar) {
     $ch=preg_replace("'(.*?)charset=(.*?)\r\n'i",'\\2',$tmp);
     if(preg_match("'koi8-r'i",$ch)) $koi=1;
     elseif(preg_match("'iso8859-5'i",$ch)) $iso=1; $schar=1;
    }
    elseif(preg_match("'<title>(.*?)</title>'i",$tmp)) {
     $title=preg_replace("'(.*?)<title>(.*?)</title>(.*?)'i",'\\2',$tmp);
     echo "[:] TITLE ok..\n";
    }
    elseif(preg_match("'<meta (.*?)keywords(.*?)>'i",$tmp)) {
     $kiwords=preg_replace("'(.*?)<meta (.*?)content=(\"|\')(.*?)(\"|\')(.*?)>(.*?)'i",'\\4',$tmp);
     echo "[:] KEYWORDS ok..\n";
    }
    elseif(preg_match("'<meta (.*?)description(.*?)>'i",$tmp)) {
      $descr=preg_replace("'(.*?)<meta (.*?)content=(\"|\')(.*?)(\"|\')(.*?)>(.*?)'i",'\\4',$tmp);
      echo "[:] DESCRIPTION ok..\n";
    }
    elseif(preg_match("'</head>'i",$tmp)||preg_match("'<body'i",$tmp)) break;
   }
   fclose($fp);
   if($koi||$convert==1) { $title=koi($title); $kiwords=koi($kiwords); $descr=koi($descr); }
   if($iso||$convert==1) { $title=iso($title); $kiwords=iso($kiwords); $descr=iso($descr); }
   $info="Site: $host\nTitle: $title\nDescription: $descr\nKeywords: $kiwords\n\n"; $title=$host=$descr=$kiwords='';
  }
  echo "[~] sorting and writing hashes in $e.$ext..\n"; @asort($towrite); fwrite($f,$info.@implode($towrite,$br)); fclose($f); unset($info);
 }
 unset($vars); unset($file); unset($towrite); unset($admok);
}
}
if($hashmake==1) { echo "[*] sorting & writing all hashes..\n"; @asort($globhash); $f = fopen($hash_filename,"w+");fwrite($f,@implode($globhash,$br));fclose($f);}
if($admins==1) { echo "[*] sorting & writing admin hashes..\n"; @asort($odmen); $f = fopen($admin_filename,"w+"); fwrite($f,@implode($odmen,$br)); fclose($f);}

myau();
?>
Возможности скрипта следующие:

- анализ всех дампов в директории (достаточно только побросать файлы в директорию и запустить скрипт)
- универсальность анализа данных - Вам надо всего лишь задать требуемые поля таблицы
- сортировка в удобном вам виде - по нужным полям и в нужном порядке
- генерирование отдельных файлов с каждого дампа и одного файла со всеми хэшами/мылами/etc
- выборка из дампов только админов (если таблица форумная или движковая)
- статистика по дампам (автоматический коннект к сайту и сбор информации по титлу и кейвордам) - удобно если баз много, а проверять каждый сайт лениво;

Ограничения:

- скрипт рассчитан на дампы с одной таблицей. То есть дампы с множеством таблиц будут обработаны некорректно. Потрудитесь отделить нужную таблицу в отдельный файл, сохранив структуру дампа. (либо возмозможна поставка более полной версии скрипта по определённой договорённости )
- скрипт рассчитан на дампы одного движка. То есть если в директории будут валяться дампы от других движков, они не будут обработаны корректно. Однако вам ничего не мешает разложить дампы разных движков в разные папки и поправить конфиг для каждой из них.
- для успешной обработки вы должны понимать что такое дамп бд и синтаксис sql, чтобы правильно заполнить настройки скрипта. По умолчанию скрипт настроен на vBulletin, для других форумов конечно настройки будут чуть другие.

Теперь относительно самих настроек. Они условно разделены на 7 частей.

1. В первой части вы должны раскомментировать одино из возможных значений, либо вписать то что требуется вам. В скрипте уже есть 5возможных вариантов. Не забывайте, что для Passwords Pro формат должен быть из трёх значений. Какие значения туда вписывать? Для этого потребуется открыть одну из баз данных и посмотреть на начало дампа, где делается таблица. Очерёдность в дампах не имеет значения, скрипт сам найдёт какое название ячейки соответствует тому или иному значения в таблице. Об этом в примере ниже
2. Во второй вы можете задать чем разделять значения и строки. Сейчас объясню почему разделитель там не :, далее прочтите внимательно, так как надо будет изменить настройки PPro. Имеется небольшая проблема с генерацией файлов с salt и Passwords Pro с дефолтными настройками. По дефолту разделителем стоит двоеточие (. Однако никто не мешает нам его заменить. Но вот незадача, в salt есть все возможные символы, и что не ставь, всё равно какой-нибудь сальт будет отчетвертован как разделитель.
Чего же в salt нету? Правильно, символов в юникоде. Поэтому разделителем выбран именно ¤, с ним всё будет обработано правильно. Следует заменить в программе стандартное двоеточие на этот символ (копипаст), и всё.
3. Далее. В третьей части вы можете выбрать, делать ли для каждого дампа отдельный файл, в котором будут отсортированные значения. То есть например для каждого site.com.sql, site2.com.sql будут сформированы site.com.sql.txt и тд. Данную опцию следует включать, если формируются базы мыл. При включённой этой опции можно задействовать опцию $site, о которой ниже.
4. Четвёртая категория позволяет включить возможность сбора данных по сайту, с которого сделан дамп. Скрипт коннектится к сайту и вписывает в файл его титл и мета-теги. Здесь необходимо задать, с чего начинается файл дампа, и чем заканчивается, при условии, что в имени файла фигурирует адрес сайта. То есть например, если файл имеет вид dump_www.site.com.sql, то следует вписать $site_prefix = 'dump_', и $site_ext = '.sql'. Всё сохраняется в кодировке win-1251. Можно включить перекодировку символов, если отчёты получаются нечитаемые. Однако эта часть скрипта у меня получилось не очень действенной, поэтому лучше не включать (удалять было жалко). Скрипт анализирует заголовки, выданные сервером, и если кодировка документа русская, но отлична от win-1251, конвертирует его в неё.
5. В пятой части задаём, делать ли общий файл со всеми этими данными. Удобно, если надо собрать всё со всех файлов и отсортировать.
6. Шестая часть - если требуется лишь выбрать пароли админов в отдельный файл. При этом надо указать Поля пароля и salt (второй если нету оставить пустым), а также можно добавить поля комментариев. Комментарии только для формата PasswordsPro!
7. В последней части необходимо указать название первой ячейки в таблице. Конечно можно было сделать более универсально, однако пардон, сейчас это уже лениво (со всеми улучшениями в более полной версии контактируйте лично, если Вы заинтересованы - договоримся).

Приведу пример.
Допустим есть дамп такого вида:

Код:
DROP TABLE IF EXISTS user;
CREATE TABLE dmf_user (
userid int(10) unsigned NOT NULL auto_increment,
usergroupid smallint(5) unsigned NOT NULL,
membergroupids varchar(250) NOT NULL,
...
KEY birthday_search (birthday_search)
);

INSERT INTO user VALUES('1','6','','0',....
Смотрим на первое значение после Create table - это userid, вписываем его в $firstintable параметр. Смотрим далее по дампу, что нам надо, вписываем в массив $sort. Остальное в принципе по вкусу. Далее запускаем скрипт как "php fdp.php", он выполняется и у нас получаются аккуратно сформированные файлы по дампам.

Отлично. Теперь пара рекомендаций относительно брута. Брут можно разделить на несколько этапов:
1. Предварительная атака. Заключается в проверке простых комбинаций типа aaa, 123, qwerty и тд. На этом этапе находится около 10-15% всех паролей (пользователи часто регаются "лишь бы регнуться", поэтому простые пароли не редкость)
2. Атака полным перебором ПО ЦИФРАМ (от 1 до 7 цифр). Цифровые пароли очень распространены и на этом этапе сбручиваются 15-30%, хоть брут происходит достаточно долго.
3. Атака по словарям (можно пропустить и сразу проводить гибридную атаку, если есть время). Загружаем все имеющиеся словари без разбору (ставим этот набор текущим) и брутим. Здесь сбручивается ещё где-то 5-10%. Всё зависит от качества английских словарей, так как простые слова типа hitman, hunter, warez и тд очень популярны. Атака занимает чуть меньше, чем полным перебором по цифрам (конечно если словарей у вас не на 400 и выше метров)
4. Гибридная атака по словарям. Достаточно действенный вид атаки, если есть время, и при успешном составлении правил позволяет сбрутить тоже около 5-10%. Отличие её от обычной атаки в том, что помимо проверки самого слова, его можно изменить (перевести в верхний/нижний регистр/всех символов, обратить слово или дублировать, добавить в начало или конец символы). Самое главное - не увлечься, или атака может проводиться ужасно долго. Из правил рекомендую следующие (: нужно, если только не была проведена простая атака по словарям):
5. Комбинированная атака. Последняя часть атаки может быть очень долгой, выявляет около 2-3% паролей, не более, и позволяет сбрутить "мастодонтов" с более сложными паролями. Заключается в сочетании словарей. Например словарь с английскими словами можно скрестить с цифровым словарём, чтобы получалось что-нибудь типа admin055, 3warez и так далее. В настройках первыми набором словарей грузим то, что будет началом слов, вторым - с чем будет сочетаться. Данную атаку нужно применять только если "ну очень надо", так как длиться она долго и занимается много процессорного времени. К томуже следует применять смекалку и знать состав всех своих словарей, чтобы успешно сочетать слова в них. Крайне не рекомендую большие словари по 20-30 метров для этого дела - можно просто состариться раньше.

Скорость брута зависит, во-первых, от мощности машины: мой старенький Pentium3-450/224Mb(128+64+32) работает со скоростью 160 паролей в секунду и кушает ~90метров словарей(~10000100 паролей) за ~17 часов. Более мощный Sempron2800+(up1750MHz)/512Mb на тех же словарях работает со скоростью 450 п/с и лопает словари где-то за 6 часов. Я конечно ещё хотел посмотреть на скорость брута на моём старом AMD K5-166/64Mb, но это будет слишком смешно %).

Автор: reActor ( rea.ctor.net.ru).

Из-за того что стоит ограничение, статья выложена не полностью. Думаю ссылки на словари и составление правил для гибридной атаки не так важны.
 
Ответить с цитированием
 





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ