Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
hashes — Волшебные хэши – PHP-хэш «коллизии» | Kitploit
Инструменты/GitHubGitHub/spaze/hashes
Анализ уязвимостейАнализ хэшейВеб-безопасностьКриптографияОбучение и ОбразованиеПодобранные Ресурсы
GitHubspaze/hashes

hashes

Волшебные хэши – PHP-хэш «коллизии»

Репозиторий
835103501 год назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Magic hashes — «коллизии» хешей PHP

Зарегистрируйтесь с паролем 1, а затем войдите с паролем 2. Если вы вошли, значит, хранилище использует указанный алгоритм для хеширования пароля, а PHP сравнивает их с помощью == (для MD5, SHA-1 и обычного текста).

MD5, SHA-1, SHA-224, SHA-256 и другие

Для MD5, SHA-1 и используется давно известный трюк (на самом деле это документированная особенность, см. и ): для PHP , просто применяется это в целях. Любой пароль с любым другим паролем из списка. Это иной трюк, нежели , просто посмотрите на разницу между .

семейства SHA-2
Таблицы сравнения типов PHP
Числа с плавающей запятой
'0e1' == '00e2' == '0'
практических
совпадает
целочисленные строки, переполняющиеся в числа с плавающей запятой
этими двумя строками

Это все алгоритмы с magic-хешами:

  • CRC32
  • CRC32b
  • FNV-1a/32
  • FNV-1a/64
  • FNV-1/32
  • FNV-1/64
  • HAVAL-128,3
  • HAVAL-128,4
  • HAVAL-128,5
  • HAVAL-160,3
  • HAVAL-160,4
  • HAVAL-160,5
  • JOAAT
  • MD2
  • MD4
  • MD5
  • MD5-double md5(md5(password))
  • MurmurHash3_x86_32/Murmur3a
  • MurmurHash3_x86_128/Murmur3c
  • MurmurHash3_x64_128/Murmur3f
  • PHOTON-80/20/16
  • PHOTON-128/16/16
  • PHOTON-160/36/36
  • Quark u-Quark-136
  • RIPEMD-128
  • RIPEMD-160
  • SHA-1
  • SHA-224
  • SHA-256
  • SPONGENT-88/80/8
  • SPONGENT-88/176/88
  • SPONGENT-128/128/8
  • SPONGENT-128/256/128
  • Tiger/128,3
  • Tiger/128,4
  • Tiger/160,3
  • Tiger/160,4
  • Tiger/192,3
  • xxHash-XXH32
  • xxHash-XXH64
  • xxHash-XXH3_64bits
  • xxHash-XXH3_128bits

Если процитировать @0xb0bb, «у magic-хешей есть и другие применения, помимо сравнения паролей (например, слои кэширования или данные, производные от вывода хеш-функции), где эти известные небезопасные, малоизвестные и псевдохеш-алгоритмы можно встретить чаще».

Обычный текст

Для обычного текста используются различные трюки с преобразованием. Первый пароль будет совпадать только со вторым. Трюки сгруппированы по версиям PHP, в которых они работают.

bcrypt

bcrypt усекает пароли до максимальной длины 72 символов. Пароли совпадают, если первые 72 символа обоих паролей совпадают.

descrypt

descrypt (традиционный UNIX DES crypt) усекает пароли до максимальной длины 8 символов. Пароли также совпадают, если первые 8 символов обоих паролей совпадают, см. раздел «Общая перекрёстная проверка».

PBKDF2-HMAC-SHA1, PBKDF2-HMAC-SHA224, PBKDF2-HMAC-SHA256

Если вы используете пароль длиннее 64 байт и хешируете его с помощью PBKDF2-HMAC-SHA1, он сначала предварительно хешируется с помощью SHA1, поэтому PBKDF2-HMAC-SHA1(password1) === PBKDF2-HMAC-SHA1(password2), потому что sha1(password1) === bin2hex(password2). Аналогичное предварительное хеширование применяется для PBKDF2-HMAC-SHA224 и PBKDF2-HMAC-SHA256.

Tiger/192,3

Сейчас в каждом из них есть лишь один magic-хеш благодаря Norbert Tihanyi, в будущем, надеюсь, их добавится больше.

Заключение

Используйте === при сравнении чего-либо* в PHP, а не ==. И используйте password_hash() и password_verify() для хеширования паролей в PHP, не используйте MD5 или SHA-1. *Используйте hash_equals() при сравнении хешей.

История

Всё началось с этого твита. Я сгенерировал QNKCDZO и 240610708 в феврале 2014 года, и с тех пор это распространилось по всему интернету. Просто загуглите.

  • MD5: Твит, код, вклад от roycewilliams, Norbert Tihanyi, ethernetlord, 0xb0bb, myst404
  • MD5-double: код, вклад от TheMostKnown
  • SHA-1: Твит, код, вклад от roycewilliams, 0xb0bb, matlink, myst404, Maxim Masiutin
  • Обычный текст: Твит, код
  • bcrypt: код
  • PBKDF2-HMAC-SHA1 от Christian "CodesInChaos" Winnerlein, как объяснил Mathias Bynens, код
  • PBKDF2-HMAC-SHA224 от Norbert Tihanyi, код
  • PBKDF2-HMAC-SHA256 от Jens 'atom' Steube, код
  • Tiger/192,3 от Norbert Tihanyi
  • SHA-224 от Norbert Tihanyi, hops, 0xb0bb, myst404, Maxim Masiutin
  • SHA-256 от Norbert Tihanyi, Chick3nman, roycewilliams, matlink
  • CRC32, CRC32b, FNV-1a/32, FNV-1a/64, FNV-1/32, FNV-1/64, HAVAL-128,3, HAVAL-128,4, HAVAL-128,5, HAVAL-160,3, HAVAL-160,4, HAVAL-160,5, JOAAT, MD2, MD4, RIPEMD-128, RIPEMD-160, Tiger/128,3, Tiger/128,4, Tiger/160,3, Tiger/160,4 от 0xb0bb
  • descrypt от James M. Hall, hops
  • PHOTON-80/20/16, PHOTON-128/16/16, PHOTON-160/36/36 от Norbert Tihanyi & Bertalan Borsos
  • u-Quark-136 от Norbert Tihanyi & Bertalan Borsos
  • SPONGENT-88/80/8, SPONGENT-88/176/88, SPONGENT-128/128/8, SPONGENT-128/256/128 от Norbert Tihanyi & Bertalan Borsos
  • xxHash от меня (#27)
  • MurmurHash3 от меня (#28)

Как вычислить собственные magic-хеши

В 2014 году я использовал свой ноутбук, несколько циклов for (или foreach?), много циклов CPU и внешний вентилятор, но сегодня вы можете/должны использовать GPU и модифицированный hashcat. См. эту статью от Carl Löndahl и 0xb0bb.

Chick3nman и коллеги также работают над своей версией hashcat, следите за обновлениями.

Реальные коллизии

MD5

Если вам нужна реальная буквенно-цифровая коллизия, вот 72-байтовая буквенно-цифровая MD5-коллизия с различием в 1 байт, даже в 1 бит, от Marc Stevens:

root@kitploit:~
md5("TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")
=
md5("TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak")

Обратите внимание: если вы регистрируетесь с первым паролем, а входите со вторым, это всё ещё может означать, что сайт использует bcrypt(md5($password)), а не просто md5($password). Такое обёртывание хеша иногда используется при обновлении хеширования паролей, но должно применяться только временно.

См. проект Marc HashClash, если вас интересуют эти реальные коллизии или если вы хотите создать свою собственную.

LM

Реальные LM-коллизии от @solardiz (#35, спасибо!):

  • LM-полухеш: plaintext1 или plaintext2
  • db82323cb0693862: 2275490 или 0/*LUZ@
  • 44b3b60db75c15c1: 2716388 или 1}DC<XT
  • 585e239d32df1998: 8351762 или $;)5D|X

См. этот твит о том, как сгенерировать ещё несколько.

Скачать инструмент