Кодовый замок на тёмном антистатическом коврике с выгравированными номерами портов на циферблате. На размытом экране ноутбука светится зелёный терминал с результатами сканирования.


Справочник, который открываешь на внутреннем 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-snPing 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-searchLDAP-запрос к базе 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-sUUDP-скан: DNS/Kerberos/NTP/LDAP - медленно, но нужно
sudo nmap -O --osscan-guess 10.10.10.10-O --osscan-guessOS 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}'
В выводе ищешь хосты с одновременно открытыми 88 (Kerberos) и 389 (LDAP). Если оба торчат - это DC с вероятностью 99%. Бывают исключения (Exchange иногда светит 389), но на практике я с таким сталкивался пару раз за десятки проектов.

Обнаружение 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 checksudo 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 / EternalBluesudo nmap -p 445 --script smb-protocols,smb-vuln-ms17-010 10.10.10.10
Kerberos user enumsudo nmap -p 88 --script krb5-enum-users --script-args krb5-enum-users.realm='CORP.LOCAL',userdb=users.txt 10.10.10.10
Полный скан DCsudo nmap -sS -sV -sC -p 88,135,139,389,445,464,636,3268,3269 -oA dc 10.10.10.10
SMB sharessudo 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'ах.
 
Последнее редактирование модератором:
  • Огонь
Реакции: Luxkerr
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab