История изменений
Исправление Xintrea, (текущая версия) :
Ладно, давай я макну тебя мордой в ... Пускай начнется драма.
Вот тебе мой пароль из «утёкшей» БД:
$6$/XJ2zkdg1aXdZ1gF$cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1
Попробуй расшифруй.
Спросим у Deep Seek:
----- 8< -----
Имеется следующий хеш, содержащий зашифрованную строку:
```
$6$/XJ2zkdg1aXdZ1gF$cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1
```
Можешь ли ты по виду этого хеша сказать, какая стандартная функция
или совокупность функций использовались для получения такого хеша?
Да, могу помочь! Хеш, который вы предоставили, имеет следующий формат:
$6$salt$hashed_value
Этот формат соответствует SHA-512-crypt, который используется
в Unix-подобных системах для хранения хешей паролей в файле /etc/shadow.
Разберем его структуру:
$6$ — указывает на использование алгоритма SHA-512.
/XJ2zkdg1aXdZ1gF — это соль (salt), которая используется для усиления безопасности хеширования.
cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1 — это сам хеш, полученный после применения алгоритма SHA-512 с указанной солью.
Как работает SHA-512-crypt:
Алгоритм использует соль для предотвращения атак с использованием радужных таблиц. Хеширование выполняется многократно (по умолчанию 5000 раундов, но это может варьироваться). Результат — это строка фиксированной длины, которая включает соль и хеш.
Как проверить или подобрать пароль:
Если вы хотите проверить, соответствует ли этот хеш какому-то паролю, можно использовать утилиты вроде mkpasswd или hashcat для подбора. Например:
mkpasswd -m sha-512 ваш_пароль /XJ2zkdg1aXdZ1gF
Если результат совпадет с вашим хешем, значит, пароль верный.
----- 8< -----
Итак, мы видим, что сама шифрованная информация занимает 87 символов. Попробуем проверить, какие хеши получаются в диапазоне наших 4-х значных паролей из цифр:
> mkpasswd -m sha-512 0000 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$oT5a3f0iHp2Sla3V5nNpQqjU2KBMOBhoSQpd02HiuI9uKF4HiKFkA47XvvtAvfPf5FtHbh/sI.CbFcSOsmEPa1
> mkpasswd -m sha-512 9999 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$7V2wEQ0KXoDceQ9dbPV/zGEsWpxCllF0BTeVkWTSCk7QLveh09o1zqhC7XJo/VzaLcmRLpFrYDWAVi0C7GpyC1
В нашем случае тоже 87 символов, значит можно продолжать.
В данный момент нам нужно просто доказать, что пароль можно найти. Разбираться в криптографических C/C++ библиотеках нет желания, поэтому решение будет писаться тупо на интерпретируемом Bash, тем более готовая команда уже есть.
Пишем скрипт:
#!/bin/bash
salt='/XJ2zkdg1aXdZ1gF'
# Пароль 1234
find='$6$/XJ2zkdg1aXdZ1gF$NXhvQYu4YPlYVnMJLPINvd.emNIMO6QqE4I1CVLyAVb.kn9hFvHxdWnMOLnqa4dL6MopucL6gHIAY4fB16E/3/'
# Неизвестный пароль
# find='$6$/XJ2zkdg1aXdZ1gF$cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1'
for i in {0000..9999}
do
echo $i
current=`mkpasswd -m sha-512 ${i} ${salt}`
echo ${current}
if [ "${find}" = "${current}" ]; then
echo "Найдено"
exit 0
fi
done
На тестовом пароле 1234 скрипт отрабатывает нормально:
1234
$6$/XJ2zkdg1aXdZ1gF$NXhvQYu4YPlYVnMJLPINvd.emNIMO6QqE4I1CVLyAVb.kn9hFvHxdWnMOLnqa4dL6MopucL6gHIAY4fB16E/3/
Найдено
Заменяем пароль на тот что предоставил

Хорошо, проверим длину генерируемого хеша для 6 символьного пароля:
> mkpasswd -m sha-512 000000 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$1ntbqfTH.hacQusKCdgJ.oXptlvPNnRkCsUrizsYb0pMkd7Kqr.aI3ogN/EZtRBoKvHLU3zTM8xh3UgEFKvbo/
> mkpasswd -m sha-512 999999 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$3nfJkhaGgLogX7Gez7dS6u/yD49WcSUsaECqjtIbq60LOFDe5bMhGiWECKbB6Z5QXn2dE63eR2OB9hNMDpcJX0
Тоже 87 символов. Значит, в скрипте можно поставить диапазоны на 5 и на 6 символов, то есть 00000..99999 и 000000..999999. И посмотреть что будет.
Если пароль найдется - значит Dimez нихрена не понимает в криптографии. Если не найдется - значит Dimez решил обмануть и задал пароль не из 4-6 цифр. Третьего не дано.
Ждем пока скрипты отработают, и каков же результат? Можно ли верить пользователю Dimez?
А верить нашему Dimez, оказывается нельзя. Пароль из чисел от 0000 до 999999 не нашелся. Ну что, балабол, с твоей стороны осталось только сообщить пароль от базы, а мы проверим, подходит ли ему твой же хеш. Ведь ты регулярно меняешь пароли от базы, ничего страшного в этом нет.
Результат проверки пароля будет следующим:
- Если пароль будет соответствовать твоему хешу, и он будет в диапазоне от 0000 до 999999 - значит я дурак.
- Если из пароля не будет вычисляться твой хеш, либо пароль состоит не из символов 0000..999999, значит ты решил обмануть и меня и всех кто читает эту тему. Недостойное поведение.
Итак, каков пароль?
Исходная версия Xintrea, :
Ладно, давай я макну тебя мордой в ... Пускай начнется драма.
Вот тебе мой пароль из «утёкшей» БД:
$6$/XJ2zkdg1aXdZ1gF$cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1
Попробуй расшифруй.
Спросим у Deep Seek:
----- 8< -----
Имеется следующий хеш, содержащий зашифрованную строку:
```
$6$/XJ2zkdg1aXdZ1gF$cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1
```
Можешь ли ты по виду этого хеша сказать, какая стандартная функция
или совокупность функций использовались для получения такого хеша?
Да, могу помочь! Хеш, который вы предоставили, имеет следующий формат:
$6$salt$hashed_value
Этот формат соответствует SHA-512-crypt, который используется
в Unix-подобных системах для хранения хешей паролей в файле /etc/shadow.
Разберем его структуру:
$6$ — указывает на использование алгоритма SHA-512.
/XJ2zkdg1aXdZ1gF — это соль (salt), которая используется для усиления безопасности хеширования.
cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1 — это сам хеш, полученный после применения алгоритма SHA-512 с указанной солью.
Как работает SHA-512-crypt:
Алгоритм использует соль для предотвращения атак с использованием радужных таблиц. Хеширование выполняется многократно (по умолчанию 5000 раундов, но это может варьироваться). Результат — это строка фиксированной длины, которая включает соль и хеш.
Как проверить или подобрать пароль:
Если вы хотите проверить, соответствует ли этот хеш какому-то паролю, можно использовать утилиты вроде mkpasswd или hashcat для подбора. Например:
mkpasswd -m sha-512 ваш_пароль /XJ2zkdg1aXdZ1gF
Если результат совпадет с вашим хешем, значит, пароль верный.
----- 8< -----
Итак, мы видим, что сама шифрованная информация занимает 87 символов. Попробуем проверить, какие хеши получаются в диапазоне наших 4-х значных паролей из цифр:
> mkpasswd -m sha-512 0000 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$oT5a3f0iHp2Sla3V5nNpQqjU2KBMOBhoSQpd02HiuI9uKF4HiKFkA47XvvtAvfPf5FtHbh/sI.CbFcSOsmEPa1
> mkpasswd -m sha-512 9999 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$7V2wEQ0KXoDceQ9dbPV/zGEsWpxCllF0BTeVkWTSCk7QLveh09o1zqhC7XJo/VzaLcmRLpFrYDWAVi0C7GpyC1
В нашем случае тоже 87 символов, значит можно продолжать.
В данный момент нам нужно просто доказать, что пароль можно найти. Разбираться в криптографических C/C++ библиотеках нет желания, поэтому решение будет писаться тупо на интерпретируемом Bash, тем более готовая команда уже есть.
Пишем скрипт:
#!/bin/bash
salt='/XJ2zkdg1aXdZ1gF'
# Пароль 1234
find='$6$/XJ2zkdg1aXdZ1gF$NXhvQYu4YPlYVnMJLPINvd.emNIMO6QqE4I1CVLyAVb.kn9hFvHxdWnMOLnqa4dL6MopucL6gHIAY4fB16E/3/'
# Неизвестный пароль
# find='$6$/XJ2zkdg1aXdZ1gF$cmXXmAu/o0e/AA.G/ZUxm.wX0nZvAuU76I1D0Xwi3..8jv0Gu/lv51b1NIORq.EVCvupmBT1eREQIjAYTdspR1'
for i in {0000..9999}
do
echo $i
current=`mkpasswd -m sha-512 ${i} ${salt}`
echo ${current}
if [ "${find}" = "${current}" ]; then
echo "Найдено"
exit 0
fi
done
На тестовом пароле 1234 скрипт отрабатывает нормально:
1234
$6$/XJ2zkdg1aXdZ1gF$NXhvQYu4YPlYVnMJLPINvd.emNIMO6QqE4I1CVLyAVb.kn9hFvHxdWnMOLnqa4dL6MopucL6gHIAY4fB16E/3/
Найдено
Заменяем пароль на тот что предоставил

Хорошо, проверим длину генерируемого хеша для 6 символьного пароля:
> mkpasswd -m sha-512 000000 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$1ntbqfTH.hacQusKCdgJ.oXptlvPNnRkCsUrizsYb0pMkd7Kqr.aI3ogN/EZtRBoKvHLU3zTM8xh3UgEFKvbo/
> mkpasswd -m sha-512 999999 /XJ2zkdg1aXdZ1gF
$6$/XJ2zkdg1aXdZ1gF$3nfJkhaGgLogX7Gez7dS6u/yD49WcSUsaECqjtIbq60LOFDe5bMhGiWECKbB6Z5QXn2dE63eR2OB9hNMDpcJX0
Тоже 87 символов. Значит, в скрипте можно поставить диапазоны на 5 и на 6 символов, то есть 00000..99999 и 000000..999999. И посмотреть что будет.
Если пароль найдется - значит Dimez нихрена не понимает в криптографии. Если не найдется - значит Dimez решил обмануть и задал пароль не из 4-6 цифр. Третьего не дано.
Ждем пока скрипты отработают, и каков же результат? Можно ли верить пользователю Dimez?
А верить нашему Dimez, оказывается нельзя. Пароль из чисел от 0000 до 999999 не нашелся. Ну что, балабол, с твоей стороны осталось только сообщить пароль от базы, а мы проверим, подходит ли ему твой же хеш. Ведь ты регулярно меняешь пароли от базы, ничего страшного в этом нет.
Если пароль будет соответствовать твоему хешу, и он будет в диапазоне от 0000 до 999999 - значит я дурак.
Если из пароля не будет вычисляться твой хеш, значит ты решил обмануть и меня и всех кто читает эту тему. Недостойное поведение.
Итак, каков пароль?