hakerovchanen
05.06.2009, 09:29
Уважаемые коллеги помогите расшифровать алгоритм генерации пароля.
Есть простенький сайт на Perl, на котором, зная пару логин и административный e-mail можно поменять пароль (он приходит на административный e-mail) Просто приходить письмо с новым паролем никакие подтверждения в письме нажимать не надо.
Пароль генерируется скорее всего с использованием Perl модуля Time::HiRes (количество секунд и микросекунд , начиная с 1 января 1970 г 00:00:00).Ни какой функции rand() скорее всего не применяется.
Те если бы удалось в идеале синхронизировать (до микросекунды)запуск скрипта смены пароля на тестовом логине и на интересующем логине то на тестовый ящик пришел бы такой же пароль как и на административный e-mail интересующего меня логина.
Пароль генерируется из 8 знаков. Используются только заглавные латинские буквы и цифры. Т.е. всего 36.Те надо выдавать “случайные” числа в диапозоне 0-35
Матрица соотношений скорее всего такая
0-0
1-1
…
9-9
10-A
11-В
…
35-Z
Алгоритм генерации первой буквы следующий:
Модуль модуля Time::HiRes выдает количество секунд и миллисекунд с начало эпохи
Реальный пример 1243815304.0XXXXX (в эту секунду было сгенерировано 2 пароля 42RGZWUF и 42RP5PE9)
Колличество секунд делим на 36.
1243815304/36=34550425,111111111
Целую часть умножаем на 36
34550425*36=1243815300
От начального значения отнимает то что перемножили, получаем число в диапозоне 0-35
В данном случаи 4
1243815304-1243815300=4
Код 4 соответствует числу 4 в пароле (по матрице соотношений)
4=4
Первый знак получается почти с точность 100% если знаешь время запуска скрипта.
Если получиться запустить тестовый скрипт и скрипт смены пароля ”жертвы”с точность до десятый доли секунды то совпадет 2я цифра если с точность до сотой доли то совпадет 3я цифра и все дольше ни как большую точность настроить не получается.
Алгоритм расчета 2го знака по аналогии не подходит.
Я думал что если помножить 1243815304.0XXXXX на 10 и взять целую честь и повторить все операции то получится 2я цифра но это не так.
12438153040/36=345504251,11111111111111111111111
345504251*36=12438153036
12438153040-12438153036=4
4=4 а нужно 2
Понятно что десятые, сотые, тысячный и т.д. вычисляться должны экспериментально (ведь время запуска на локальном компьютере и на сайте будут иметь разницу в десятых-сотых секунды.
). Те подставляем наиболее подходящее (от 0 до 9)в данном случаи лучший вариант для десятых это ноль.
Может кто-нибудь уже сталкивался с подобной проблемой или знает алгоритм ?
Или смог синхронизировать запуск скриптов с очень высокой тольность?
Нужно просто одновременно запустить 2 ссылки вида http://www.site-gde-nuzhno-uznat-parol.com/cgi-bin/pass?login=login&email=email@email.com
(Я просто засунул эти 2 линка в HTML фрем с 2 окнами. И открывал в браузере на локальной машине.)
Или как то по-другому можно решить это проблему?
Понятно, что можно перебором, но это очень долго(36^N). А зная алгоритм это всего 10^5 вариантов за месяц можно управиться.
Есть простенький сайт на Perl, на котором, зная пару логин и административный e-mail можно поменять пароль (он приходит на административный e-mail) Просто приходить письмо с новым паролем никакие подтверждения в письме нажимать не надо.
Пароль генерируется скорее всего с использованием Perl модуля Time::HiRes (количество секунд и микросекунд , начиная с 1 января 1970 г 00:00:00).Ни какой функции rand() скорее всего не применяется.
Те если бы удалось в идеале синхронизировать (до микросекунды)запуск скрипта смены пароля на тестовом логине и на интересующем логине то на тестовый ящик пришел бы такой же пароль как и на административный e-mail интересующего меня логина.
Пароль генерируется из 8 знаков. Используются только заглавные латинские буквы и цифры. Т.е. всего 36.Те надо выдавать “случайные” числа в диапозоне 0-35
Матрица соотношений скорее всего такая
0-0
1-1
…
9-9
10-A
11-В
…
35-Z
Алгоритм генерации первой буквы следующий:
Модуль модуля Time::HiRes выдает количество секунд и миллисекунд с начало эпохи
Реальный пример 1243815304.0XXXXX (в эту секунду было сгенерировано 2 пароля 42RGZWUF и 42RP5PE9)
Колличество секунд делим на 36.
1243815304/36=34550425,111111111
Целую часть умножаем на 36
34550425*36=1243815300
От начального значения отнимает то что перемножили, получаем число в диапозоне 0-35
В данном случаи 4
1243815304-1243815300=4
Код 4 соответствует числу 4 в пароле (по матрице соотношений)
4=4
Первый знак получается почти с точность 100% если знаешь время запуска скрипта.
Если получиться запустить тестовый скрипт и скрипт смены пароля ”жертвы”с точность до десятый доли секунды то совпадет 2я цифра если с точность до сотой доли то совпадет 3я цифра и все дольше ни как большую точность настроить не получается.
Алгоритм расчета 2го знака по аналогии не подходит.
Я думал что если помножить 1243815304.0XXXXX на 10 и взять целую честь и повторить все операции то получится 2я цифра но это не так.
12438153040/36=345504251,11111111111111111111111
345504251*36=12438153036
12438153040-12438153036=4
4=4 а нужно 2
Понятно что десятые, сотые, тысячный и т.д. вычисляться должны экспериментально (ведь время запуска на локальном компьютере и на сайте будут иметь разницу в десятых-сотых секунды.
). Те подставляем наиболее подходящее (от 0 до 9)в данном случаи лучший вариант для десятых это ноль.
Может кто-нибудь уже сталкивался с подобной проблемой или знает алгоритм ?
Или смог синхронизировать запуск скриптов с очень высокой тольность?
Нужно просто одновременно запустить 2 ссылки вида http://www.site-gde-nuzhno-uznat-parol.com/cgi-bin/pass?login=login&email=email@email.com
(Я просто засунул эти 2 линка в HTML фрем с 2 окнами. И открывал в браузере на локальной машине.)
Или как то по-другому можно решить это проблему?
Понятно, что можно перебором, но это очень долго(36^N). А зная алгоритм это всего 10^5 вариантов за месяц можно управиться.