• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Соль и хеш

Robin Gud

(L1) cache
Пользователь
Регистрация
25.02.2006
Сообщения
517
Реакции
5
Тут я вижу возникает много вопросов о том, что такое Соль и с чем собственно её едят =).
Хотелось бы немного прояснить ситуацию.
Что необходимо понять в первую очередь...
В первую очередь необходимо хотя бы поверхностно понять алгоритм хеширования.
Будем разбираться на примере форумов IPB => 2.0.*
В этих форумах алгоритм следующий : md5(md5($salt).md5($pass)).
Для справки,в форумах IPB <= 2.0.* алгоритм такой : md5.
Теперь разберём всё на примере.
Допустим у нас есть пароль: 123.
При регистрации в форумах IPB <= 2.0.* наш пароль хешируется алгоритмом md5 и преобразуется в такую строку: 202cb962ac59075b964b07152d234b70. Таким образом,поимев этот хеш, стырив Cookies жертвы,мы можем эту строку расшифровать благодаря множеству существующих программ и т.д. Всё просто.(Лишь бы пароль был не сильно мудрёный).
Теперь переходим к IPB => 2.0.* .
Что мы видим: md5(md5($salt).md5($pass))
PHP:
[/color].
Даю определение [color=orange]Salt[/color] - она-же [color=orange]Соль[/color].
[color=orange]Salt[/color] - это сгенерированные скриптом данные, которые усложняют подбор пароля после хеширования.А как она усложняет мы сейчас разберёмся.
В IPB соль состоит из пяти случайно сгенерированных символов.
Пример: [color=orange]kHa$+[/color] или [color=orange]@pBuc[/color]
Теперь по порядку:
Допустим мы регистрируемся в форуме IPB => 2.0.* всё с тем-же паролем: [color=red]123[/color]. Что происходит...
1)Скрипт генерирует нам случайным образом соль(у всех пользователей она будет разная) и заносит её в базу данных.
Допустим нам сгенерировал вот такую : [color=orange]XzNaX[/color].
2)Скрипт берёт нашу соль и хеширует её методом md5.
Получилось вот так: [color=orange]b9b91789bc2f1b3735e67f77d46053fa[/color].Это у нас и есть [color=orange]md5($salt)[/color].
3)Скрипт берёт наш пароль (у нас он [color=red]123[/color]) и тоже хеширует его методом md5.
Получилось вот так: [color=red]202cb962ac59075b964b07152d234b70[/color].Это у нас и есть [color=red]md5($pass)[/color].
4)Скрипт берёт нашу хешированную соль и наш хешированный пароль,и снова хеширует их методом md5.
Если подставить в нашу формулу: md5([color=orange]md5($salt).[/color][color=red]md5($pass[/color]))[PHP] полученные два хеша,увидим следующее:
md5([color=orange]b9b91789bc2f1b3735e67f77d46053fa[/color].[color=red]202cb962ac59075b964b07152d234b70[/color]) Где точка в PHP означает продолжение строки.А значит скрипт берёт эти два хеша без точки([color=orange]b9b91789bc2f1b3735e67f77d46053fa[/color][color=red]202cb962ac59075b964b07152d234b70[/color]) и хеширует их методом md5.
Получаем хеш : [color=green]e509e1f6df1450279ec37dd253bd5b1e[/color].
Вот это и есть [color=green]солёный хеш[/color].
Авторизация пользователя происходит следующим образом.
Наш пользователь вводит свой ID(ник) и пароль.
Скрипт подставит соль соответствующую введенному ID,и пароль,который вы ввели.
В нашем примере получится так : md5(md5([color=orange]XzNaX[/color]).md5([color=red]123[/color]))[PHP]
Потом он обработает эти данные и сверит их с нашим [color=green]солёным[/color] хешем.
Если данные совпадают,то вы авторизированы.Если нет,то вам напишут...
Теперь о том что, где хранится в IPB => 2.0.*
В разных форумах по разному.Но в дефолтовых версиях в базе данных можно найти:
Директория forummembers: тут хранится "legacy_password". Это не [color=green]солёный[/color],простой md5 хеш.
Директория forummembers_converge:тут хранится "converge_pass_hash" .Это солёный,итоговый md5 хеш,с которым скрипт сверяется при авторизации.И в этой-же дирректории хранится "converge_pass_salt" .Это та самая соль,которую все желают поиметь =).
Теперь делаем выводы.
При XSS атаке мы получаем на сниффер [color=green]солёный хеш[/color] .Что он нам даёт?Да вообщем-то ничего,кроме того,что мы можем подменив Cookies зайти на форум от имени жертвы.Получить пароль из этого хеша не представляется возможным,потому как мы не знаем Соль.
Вы спросите,а как получить соль?
Только не через Cookies жертвы! В Cookies она не хранится.
Соль можно добыть сплойтами,SQL иньекциями и т.д.(Смотрим видео Coyl'a: [url=http://video.antichat.ru/file25.html]http://video.antichat.ru/file25.html[/url] ,читаем форум).Вообщем для того что-бы её получить нужно попасть в базу данных форума.Там же в базе данных можно подсмотреть "legacy_password" ,тот самый не солёный хеш,который можно расшифровать без Соли.
Ну вот,пока всё...

====================================================
Статья не моя, но жутко полезная...Лично мне она очень помогла...
 
В общем, античат не грузится, а где достать то самое видео и софт :sorry: ?
поисковики молчат =(.

P.S.: Насколько я понял, пассвордпро может только с солью брутить хэши от второй ветки ipb. Вот, надо её (соль) как-то "выделить" .
 
2around Она храниться в той же таблице, где и хеш пароля, только соответственно в другом столбце. Однако, возможно, админ оказался капельку умнее и хранит соль в другой таблице - в этом случае есть два вариента действий - либо перелопатить всю БД, либо посмотреть исходники файлов, осуществляющих идентификацию пользователей и там найти путь к соли.
 
Может я тебя не понял, но соль можно получить через дамп бд...например строка из дaмпа ipb:

Код:
INSERT INTO ibf_members_converge (converge_id, converge_email, converge_joined, converge_pass_hash, converge_pass_salt) VALUES('584','login123@mynet.com','1142208107','4cc62c512a70482c475a85e94c07d0e3','9CY<@');
Здесь, 4cc62c512a90482c476a85e96c07d0e3 - солёный хеш md5
9CY<@ - соль для хеша
На данный момент онлайн утилит для расшифровки солёных хешей нет,остаётся брутить passwordpro
 
SelF
Robin Gud
Спасибо, ребят! Всё понял и нашёл =).
Находилось в соседней таблице <_< .
Форум - ipb 2.0.4
таблица ibf_members_converge. Там и хэш, и соль.

П.С. я сначала за конечный хэш принял какой-то там login_key что-ли... не помню точно... он в таблице ibf_members был :fool:
 
Поскольку форум называетса "соль и хеш" (хеша я здесь собственно не увидел) то вот немного про хеш:

Хеши́рование — преобразование входного массива данных в короткое число фиксированной длины (которое называется хешем или хеш-кодом) таким образом, чтобы с одной стороны, это число было значительно короче исходных данных, а с другой стороны, с большой вероятностью однозначно им соответствовало. Преобразование выполняется при помощи хеш-функции. Ясно, что в общем случае однозначного соответствия между длинными данными и короткими числами быть не может, обязательно будут возможны массивы данных, дающих одинаковые хеш-коды. Но вероятность таких совпадений в данной конкретной задаче должна быть сведена к минимуму выбором хеш-функции.

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

Кроме этого, существует много других способов хеширования, подходящих к различным задачам.

Среди множества существующих хеш-функции принято выделять криптографически стойкие, применяемые в криптографии.

Криптографическая хэш-функция должна обеспечивать:

* стойкость к коллизиям (два различных набора данных должны иметь различные результаты преобразования)
* необратимость (невозможность вычислить исходные данные по результату преобразования)

Хэш-функции также используются в некоторых структурах данных - хеш-таблицаx и декартовых деревьях. Требования к хэш-функции в этом случае другие:

* хорошая перемешиваемость данных
* быстрый алгоритм вычисления


Применение хеширования

Проверка на наличие ошибок

Например, контрольная сумма может быть передана по каналу связи вместе с основным текстом. На приёмном конце, контрольная сумма может быть рассчитана заново и её можно сравнить с переданным значением. Если будет обнаружено расхождение, то это значит, что при передаче возникли искажения и можно запросить повтор.

Бытовым аналогом хеширования в данном случае может служить приём, когда при переездах в памяти держат количество мест багажа. Тогда для проверки не нужно вспоминать про каждый чемодан, а достаточно их посчитать. Совпадение будет означать, что ни один чемодан не потерян. То есть, количество мест багажа является его хеш-кодом.

Ускорение поиска данных

Например, при записи текстовых полей в базе данных, может рассчитываться их хеш код и данные могут помещаться в раздел, соответствующий этому хеш-коду. Тогда при поиске данных, надо будет сперва вычислить хеш-код текста и сразу станет известно, в каком разделе их надо искать, то есть, искать надо будет не по всей базе, а только по одному её разделу.

Бытовым аналогом хеширования в данном случае может служить помещение слов в словаре по алфавиту. Первая буква слова является его хеш-кодом и при поиске мы просматриваем не весь словарь, а только нужную букву.
 
Также немного про алгоритмы:
Список алгоритмов

* SHA-1
* SHA-2 (SHA-256, SHA-384, SHA-512)
* HAVAL
* MD2
* MD4
* MD5
* N-Hash
* RIPEMD-160
* Snefru
* Tiger
* Whirlpool
* ГОСТ 3411
* TTH

Secure Hash Algorithm 1 — один из алгоритмов криптографического хэширования. Описан в документе RFC 3174.

Разработан в 1995 году в качестве замены более слабого алгоритма SHA.

Имеет длину результирующего дайджеста 160 бит, существуют варианты (SHA-384, SHA-512) с более длинным дайджестом.

Используется в качестве основного хэш-алгоритма в PGP.

В начале 2005 года появились сообщения о нахождении в SHA-1 уязвимости, снижающей его надёжность.

MD4 (Message Digest 4) — однонаправленная хэш-функция, разработанная Роном Ривестом, и описанная в RFC 1320.

Для каждого входного сообщения функция возвращает 128-разрядное хэш-значение, называемое дайджестом сообщения.

MD5 (Message Digest 5) — алгоритм хэширования, разработанный профессором Рональдом Л. Ривестом в 1991 году. Предназначен для создания «отпечатков» или «дайджестов» сообщений произвольной длины. Пришёл на смену MD4, который был несовершенен. Описан в RFC 1321.

В 2004 году в алгоритме обнаружена уязвимость, позволяющая за небольшое время находить коллизии. Рекомендуется применение SHA-1 вместо MD5.


Алгоритм MD5

* Разбиение на блоки по 64 байта (512 бит)
* Дописывание последовательности 10000…0 || 64 битового значения длины последовательности в битах
* Инициализируются 4 переменных размером по 32 бита:
o А = 01 23 45 67;
o В = 89 AB CD EF;
o С = FE DC BA 98;
o D = 76 54 32 10.
* 4 раунда из 16 операторов. Все операторы однотипны и имеют вид: a = b + ((a + Fun(b,c,d) + Mj + ti) < < Sk)
o В первом раунде Fun F(X, Y, Z) = XY v (not X)Z.
o Во втором раунде Fun G(X, Y, Z) = XZ v (not Z)Y.
o В третьем раунде Fun Н(Х, Y, Z) = Х  Y  Z.
o В четвертом раунде Fun I(Х, Y, Z) = Y  (X v (not Z)).

Round 1

/*[abcd k s i] a = b + ((a + F(b,c,d) + X[k] + T) <<< s). */

[ABCD 0 7 1][DABC 1 12 2][CDAB 2 17 3][BCDA 3 22 4]

[ABCD 4 7 5][DABC 5 12 6][CDAB 6 17 7][BCDA 7 22 8]

[ABCD 8 7 9][DABC 9 12 10][CDAB 10 17 11][BCDA 11 22 12]

[ABCD 12 7 13][DABC 13 12 14][CDAB 14 17 15][BCDA 15 22 16]

Round 2

/*[abcd k s i] a = b + ((a + G(b,c,d) + X[k] + T) <<< s). */

[ABCD 1 5 17][DABC 6 9 18][CDAB 11 14 19][BCDA 0 20 20]

[ABCD 5 5 21][DABC 10 9 22][CDAB 15 14 23][BCDA 4 20 24]

[ABCD 9 5 25][DABC 14 9 26][CDAB 3 14 27][BCDA 8 20 28]

[ABCD 13 5 29][DABC 2 9 30][CDAB 7 14 31][BCDA 12 20 32]

Round 3

/*[abcd k s t] a = b + ((a + H(b,c,d) + X[k] + T) <<< s). */

[ABCD 5 4 33][DABC 8 11 34][CDAB 11 16 35][BCDA 14 23 36]

[ABCD 1 4 37][DABC 4 11 38][CDAB 7 16 39][BCDA 10 23 40]

[ABCD 13 4 41][DABC 0 11 42][CDAB 3 16 43][BCDA 6 23 44]

[ABCD 9 4 45][DABC 12 11 46][CDAB 15 16 47][BCDA 2 23 48]

Round 4

/*[abcd k s t] a = b + ((a + I(b,c,d) + X[k] + T) <<< s). */


[ABCD 0 6 49][DABC 7 10 50][CDAB 14 15 51][BCDA 5 21 52]

[ABCD 12 6 53][DABC 3 10 54][CDAB 10 15 55][BCDA 1 21 56]

[ABCD 8 6 57][DABC 15 10 58][CDAB 6 15 59][BCDA 13 21 60]

[ABCD 4 6 61][DABC 11 10 62][CDAB 2 15 63][BCDA 9 21 64]
 
ну тут в теме про уязвимось ИПБ был описан способ взлома
там надо было в нужном месте в строке post SQL иньекцию запихать :)
можно поподробнее обьяснить?
 
прямо боюсь и спрашивать, вы здесь такие все умные :rolleyes:
как из файлов cookies (мои файлы), которые храняться у меня на компе..вытащить пароль..???
Статьи в этой теме почитала...не все понятно :rolleyes:
Програмка passwordpro есть, но без словарей.
есть еще куча разных прог...но я пока с ними не разобралась.. по вашему форму малость погуляла.
Мои вопросы:
1. Как и чем (главное) расшифровать куки? как я поняла из этих файлов можно получить хеш - только не издевайтесь надо чайником - хочу чтобы помогли.
2. А их хеша можно вытащить пароль...с помощью passwordpro? Как это сделать.?
3. Если можно то на примере почты mail.ru.
Жду корректных и компетентных ответов, С любовью, Уголёк :baby:
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх