LINUX.ORG.RU

История изменений

Исправление 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/
Найдено

Заменяем пароль на тот что предоставил Dimez, запускаем, и видим, что в диапазоне 0000..9999 пароль не найден.

Хорошо, проверим длину генерируемого хеша для 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/
Найдено

Заменяем пароль на тот что предоставил Dimez, запускаем, и видим, что в диапазоне 0000..9999 пароль не найден.

Хорошо, проверим длину генерируемого хеша для 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 - значит я дурак.

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

Итак, каков пароль?