Справочник, который открываешь на внутреннем engagement, когда нужно быстро вспомнить флаги для NSE-скриптов, правильный порядок сканирования DC или связку с CrackMapExec/BloodHound. Статья для тех, кто уже ломал AD, но не помнит, какой
--script-args нужен для krb5-enum-users.Prerequisites: Nmap актуальной версии, root/sudo (без него SYN-скан не взлетит - молча свалится в
-sT, и ты даже не заметишь). Kali или аналог. Работает против Windows Server 2016/2019/2022 с AD DS.Про шум:
-T4 и --script vuln гарантированно прилетят в SIEM. Для stealth-engagement бери -T2 + точечные порты. Всё ниже - только в рамках авторизованного engagement. Это не оговорка, а напоминание: без скоупа nmap -sS по корпоративной сети - статья УК.ATT&CK coverage: T1046 (Network Service Discovery), T1018 (Remote System Discovery), T1595.001 (Scanning IP Blocks), T1595.002 (Vulnerability Scanning), T1135 (Network Share Discovery), T1087.002 (Domain Account), T1069.002 (Domain Groups), T1482 (Domain Trust Discovery).
Основные команды
| Команда | Флаги / параметры | Назначение |
|---|---|---|
sudo nmap -sn 10.10.10.0/24 | -sn | Ping sweep подсети - находишь живые хосты без сканирования портов (T1018) |
sudo nmap -sS -p 88,389,445,636,3268,3269 10.10.10.0/24 | -sS -p | Быстрый поиск DC по AD-портам: Kerberos/LDAP/SMB/GC |
sudo nmap -sV -p 88 10.10.10.10 | -sV | На порту 88 покажет версию KDC - сразу видно Server 2016 или 2019 |
sudo nmap -sV -p 389,636 --script ldap-rootdse 10.10.10.10 | --script ldap-rootdse | Вытаскивает defaultNamingContext, DNS-имя домена, уровень функциональности леса (T1482) |
sudo nmap -p 445 --script smb-security-mode 10.10.10.0/24 | --script smb-security-mode | Проверяет SMB signing - если message_signing: disabled, путь к relay-атаке открыт |
sudo nmap -p 445 --script smb-enum-shares 10.10.10.10 | --script smb-enum-shares | Перечисляет SMB-шары, права доступа (T1135) |
sudo nmap -p 445 --script smb-enum-users 10.10.10.10 | --script smb-enum-users | Дампит пользователей через SMB (T1087.002) |
sudo nmap -p 445 --script smb-protocols 10.10.10.0/24 | --script smb-protocols | Показывает поддерживаемые версии SMB - ищешь SMBv1 для EternalBlue |
sudo nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm='CORP.LOCAL',userdb=/usr/share/seclists/Usernames/Names/names.txt 10.10.10.10 | --script-args krb5-enum-users.realm | Брутит валидных пользователей через Kerberos pre-auth (T1087.002) |
sudo nmap -sV -p 389 --script ldap-search --script-args 'ldap.base="DC=corp,DC=local"' 10.10.10.10 | --script ldap-search | LDAP-запрос к базе AD - объекты, атрибуты, группы (T1069.002) |
sudo nmap -p 445 --script smb-vuln-ms17-010 10.10.10.0/24 | --script smb-vuln-ms17-010 | Проверка на EternalBlue (T1595.002) |
sudo nmap -sS -p- --min-rate 5000 10.10.10.10 | -p- --min-rate 5000 | Полный скан всех 65535 TCP-портов - не пропустишь нестандартные сервисы |
sudo nmap -sU -p 53,88,123,389 10.10.10.10 | -sU | UDP-скан: DNS/Kerberos/NTP/LDAP - медленно, но нужно |
sudo nmap -O --osscan-guess 10.10.10.10 | -O --osscan-guess | OS fingerprinting - уточняет версию Windows Server для выбора эксплойта |
sudo nmap -sS -sV -sC -p 88,135,139,389,445,464,636,3268,3269 -oA dc_scan 10.10.10.10 | -sC -oA | Полный скан DC с дефолтными скриптами, вывод в три формата |
Частые сценарии
Поиск контроллеров домена в подсети
Первое, что делаешь на внутреннем engagement - находишь DC. До любых других телодвижений. Комбинация AD-специфичных портов даёт результат быстрее, чем полный скан, и шума меньше.
Bash:
sudo nmap -sS -p 88,389,445,636,3268 --open -oG dc_candidates.txt 10.10.10.0/24
grep "open" dc_candidates.txt | awk '{print $2}'
Обнаружение SMB signing = disabled
Это прямой вход для NTLM relay. Запускаешь по всей подсети, результат сразу скармливаешьntlmrelayx.py из Impacket.
Bash:
sudo nmap -p 445 --script smb-security-mode 10.10.10.0/24 | grep -B5 "message_signing: disabled"
message_signing: disabled. Нашёл - считай, relay готов. На удивление часто встречается даже в 2024–2025 на свежих серверах, потому что signing по умолчанию required только на DC, а на member servers - нет.Энумерация LDAP без учётных данных
[URL='https://nmap.org/nsedoc/scripts/ldap-rootdse.html']ldap-rootdse[/URL] работает анонимно на большинстве DC. Отдаёт имя домена, уровень леса, DNS-суффиксы - всё, что нужно для следующего шага с BloodHound.
Bash:
sudo nmap -p 389 --script ldap-rootdse 10.10.10.10
defaultNamingContext (имя домена), domainFunctionality (уровень домена), forestFunctionality. Эти данные напрямую идут в --domain параметр BloodHound.py. У меня этот скрипт - первый после обнаружения DC, ещё до попытки получить учётку.Проверка SMBv1 для EternalBlue (T1595.002)
Перед запускомms17-010 в Metasploit - верифицируй наличие уязвимости Nmap'ом. Меньше шума, чем сразу лезть эксплойтом. И в отчёте выглядит аккуратнее.
Bash:
sudo nmap -p 445 --script smb-protocols,smb-vuln-ms17-010 10.10.10.10
smb-protocols покажет SMBv1 в списке, [URL='https://nmap.org/nsedoc/scripts/smb-vuln-ms17-010.html']smb-vuln-ms17-010[/URL] вернёт VULNERABLE с деталями. Оба подтверждают - цель готова. Один подтверждает, другой нет - копай дальше (см. gotcha про false negative ниже).Gotchas & подводные камни
-sSбез sudo молча падает в-sT- полный TCP handshake, логируется на цели, скорость ниже. Всегда проверяй, от кого запускаешь. Лично наступал на эти грабли в спешке - потерял полчаса, удивляясь медленному скану.smb-enum-usersне работает без анонимного доступа - на Server 2019+ по умолчанию закрыт. Нужны учётки или--script-args smbuser=,smbpass=.krb5-enum-usersгенерирует события 4768 в Windows Event Log - при активном мониторинге SIEM спалишься быстро. Используй с-T1и небольшим wordlist'ом. Или вообще отложи на ночь.-p-+--scriptодновременно - скан на сутки. Сначала-p-для обнаружения портов, потом точечный--scriptпо найденным. Два прохода быстрее одного, как ни парадоксально.ldap-rootdseна порту 636 (LDAPS) требует--script-args ldap.port=636- без этого скрипт не переключится на TLS и тихо вернёт пустой результат.smb-vuln-ms17-010даёт false negative на пропатченных системах с включённым SMBv1 - дополнительно проверяй черезsmb-protocols. Если SMBv1 есть, а vuln-скрипт молчит - не факт, что всё ок.-sU(UDP) на Kerberos порту 88 - Nmap часто помечает какopen|filtered. Это норма, не баг. UDP-скан - вообще отдельная боль.--min-rate 5000на нестабильных каналах - теряешь открытые порты из-за дропов пакетов. На VPN снижай до--min-rate 1000, иначе результат будет неполным.- На Windows-хостах
-Oтребует минимум один открытый и один закрытый порт - без этого fingerprint не работает, добавляй--osscan-guess.
Quick-reference card
| Задача | Команда |
|---|---|
| Найти DC в подсети | sudo nmap -sS -p 88,389,445,636 --open 10.10.10.0/24 |
| SMB signing check | sudo nmap -p 445 --script smb-security-mode 10.10.10.0/24 |
| LDAP enum (анонимно) | sudo nmap -p 389 --script ldap-rootdse 10.10.10.10 |
| SMBv1 / EternalBlue | sudo nmap -p 445 --script smb-protocols,smb-vuln-ms17-010 10.10.10.10 |
| Kerberos user enum | sudo nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm='CORP.LOCAL',userdb=users.txt 10.10.10.10 |
| Полный скан DC | sudo nmap -sS -sV -sC -p 88,135,139,389,445,464,636,3268,3269 -oA dc 10.10.10.10 |
| SMB shares | sudo nmap -p 445 --script smb-enum-shares,smb-enum-users 10.10.10.10 |
Вопрос к читателям
При энумерации пользователей черезkrb5-enum-users на DC под Windows Server 2019 - какой wordlist даёт лучший hit rate в вашей практике: names.txt из SecLists или кастомный список, собранный из OSINT по конкретной компании? На моём опыте кастомный (имя.фамилия из LinkedIn + стандартные шаблоны типа svc_, adm_) бьёт generic-списки в 3–4 раза по результативности, но интересно, у кого как.И второй момент: как вы комбинируете
krb5-enum-users с smb-enum-users - параллельно оба или сначала Kerberos, а SMB как fallback? Делитесь связкой флагов, которую реально используете на engagement'ах.
Последнее редактирование модератором: