
NTLMv1 Multitool
Этот инструмент преобразует NTLMv1-хэши в NTLM, точнее, приводит ответы на challenge NTLMv1 к формату, который можно взломать с помощью hashcat в режиме 14000.
Если указать --ct3, инструмент сам вычислит последние 4 символа NTLM-хэша; если указать --json, то --ct3 подразумевается автоматически, и результат будет возвращён как элемент pt3, например:
python3 ntlmv1.py --ntlm "DC1$::MOG:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:1122334455667788" --json
{"ntlmv1": "DC1$::MOG:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:1122334455667788", "user": "DC1$", "domain": "MOG", "challenge": "1122334455667788", "lmresp": "AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E", "ntresp": "AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E", "ct3": "352661ECEF909C5E", "ct3_crack": "ct3_to_ntlm.bin 352661ECEF909C5E 1122334455667788", "pt3": "8c71", "hash1": "AC51EC464A91A35A:1122334455667788", "hash2": "04A862DA3106EC2B:1122334455667788"}
Наконец, в этом обновлении я перенёс функции в main(), чтобы модуль можно было просто импортировать для прямого использования.
Я добавил две новые опции: --hashcat и --hcutils. Они задают путь к вашим hashcat и hashcat-utils соответственно, чтобы можно было напрямую копировать и вставлять данные из инструмента.
Инструмент запускается так, если ваш каталог hashcat находится в ~/git/hashcat, а каталог hashcat-utils — в ~/git/hashcat-utils:
python3 ./ntlmv1.py --ntlm "SERVER1$::MOG:9DE7F41D81C1207400000000000000000000000000000000:DE766A98B60D1C911DCFFFDBB3E521314B2CE34EAB63CC7B:1122334455667788" --hashcat "~/git/hashcat" --hcutils "~/git/hashcat-utils"
Да, теперь это совместимо с Python 3. Также я объединил ntlmv1 и ntlmv1-ess.
Мультиинструмент NTLMv1
Этот инструмент модифицирует хэши NTLMv1/NTLMv1-ESS/MSCHAPv2, чтобы их можно было взломать в hashcat с помощью режима DES 14000.
Инструмент основан на работе atom из команды Hashcat: https://hashcat.net/forum/thread-5832.html
Он также основан на https://hashcat.net/forum/thread-5912.html и https://www.youtube.com/watch?v=LIHACAct2vo
Установите инструмент нового поколения ntlmv1_nextgen.py как глобальную команду ntlmv1-multi с помощью uv:
uv tool install .
ntlmv1-multi --ntlmv1 "hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788"
Или запустите его напрямую из репозитория без установки:
uv run ntlmv1_nextgen.py --ntlmv1 "hashcat::DUSTIN-5AA37877:..."
В проекте есть pyproject.toml (требуется Python 3.14+, зависимость pycryptodome), так что uv сам разрешит все зависимости; исходный ntlmv1.py по-прежнему работает автономно с любым интерпретатором Python 3.
ntlmv1_nextgen.py)ntlmv1_nextgen.py (устанавливаемый как команда ntlmv1-multi) — это современный парсер. Он принимает NTLMv1, $99$-блобы и MSCHAPv2, автоматически обрабатывает ESS и может завершить полное преобразование NTLMv1 -> NTLM из взломанного potfile за один шаг. Доступные опции:
| Опция | Описание |
|---|---|
--ntlmv1 <hash> | NTLMv1-хэш в формате Responder (user::host:LM:NT:challenge). |
--99 <blob> | base64-блоб в стиле $99$. |
--mschapv2 <hash> | Хэш MSCHAPv2 в формате John the Ripper. |
--nthash <hex> | 32-символьный NTLM-хэш; вычисляет DES-ключи и кандидаты для hashcat. |
--password <pw> | Вычисляет DES-ключи --key1/--key2 из известного пароля. |
--key1 <hex> / --key2 <hex> | Задать 16-hex DES-ключи для CT1/CT2 напрямую (имеют приоритет над --potfile). |
--potfile <path> | Potfile от hashcat/rainbowcrackalack со взломанными ключами режима 14000; автоматически восстанавливает key1/key2 для завершения преобразования NTLMv1 -> NTLM. |
--hashcat | Выводит строки в формате hashcat для CT1/CT2. |
--json | Выводить только JSON (подразумевает вычисление CT3). |
Для перехвата используйте Responder с флагом --lm; без --lm активируется ESS, и взлом займёт больше времени. Также появился новый флаг --disable-ess, который пытается отключить ESS и принудительно выполнить даунгрейд. Сначала попробуйте --disable-ess, а если не получится — --lm. При использовании --disable-ess или --lm убедитесь, что ваш клиентский challenge равен 1122334455667788, чтобы задействовать FPGA; однако это может вызвать срабатывание некоторых сетевых IDS/IPS, если они увидят такой трафик.
Захват будет выглядеть так:
[SMB] NTLMv1 Client : 184.64.60.62
[SMB] NTLMv1 Username : DUSTIN-5AA37877\hashcat
[SMB] NTLMv1 Hash : hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
[*] Skipping previously captured hash for DUSTIN-5AA37877\hashcat
Часть с хэшем выглядит так:
hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Итак, используйте мультиинструмент следующим образом (он также совместим с Python 2):
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Он выведет следующие данные без изменения серверных challenge и т.д.:
['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']
Hostname: DUSTIN-5AA37877
Username: hashcat
Challenge: 1122334455667788
LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D
NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
CT1: 727B4E35F947129E
CT2: A52B9CDEDAE86934
CT3: BB23EF89F50FC595
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
To crack with hashcat create a file with the following contents:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
В данном случае используется пароль «password», и мы можем проверить NTLM-хэш с помощью:
echo -n password | iconv -f utf8 -t utf16le | openssl dgst -md4
(stdin)= 8846f7eaee8fb117ad06bdd830b7586c
С помощью утилиты ct3_to_ntlm.bin из hashcat-utils, написанной atom, можно вычислить последние 4 символа NTLM-хэша из NTLMv1 challenge, который выводит инструмент:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
586c
Это совпадает с концом NTLM-хэша, так что всё сходится. Следующий шаг — взлом хэшей с помощью hashcat, поэтому нужно создать файл hashes.txt с содержимым:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
Для взлома с помощью hashcat используйте:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
Важное замечание: hashcat возвращает DES-ключи, а не NTLM-ключи. Их нужно преобразовать в NTLM с помощью deskey_to_ntlm.pl из Hashcat Utils; это делается так:
./deskey_to_ntlm.pl [cracked des key 1]
./deskey_to_ntlm.pl [cracked des key 2]
Затем нужно объединить два NTLM-ключа с третьей частью пароля, вычисляемой по выводу инструмента:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
Сложите все три части вместе — и готово.
Если вы просто тестируете мой код и уже знаете пароль, можно воспользоваться конвертером DES:
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d
echo "$HEX[b55d6d04e67926]">>des.cand
echo "$HEX[bcba83e6895b9d]">>des.cand