Содержание статьи
- Разведка
- Nmap
- Энумерация SMB — порт 445
- GPP (Group Policy Preferences)
- Декрипт cpassword
- PrivEsc: Anonymous → SVC_TGS
- Получение пользователей AD
- Kerberoasting — порт 88
- Получение SPN пользователей AD
- Восстановление пароля админа
- PrivEsc: SVC_TGS → Administrator
- Защита
В этой статье я покажу, как пройти путь с нуля до полноценного администратора контроллера домена Active Directory, а поможет нам одна из виртуалок, доступных для взлома на CTF-площадке HackTheBox. Пусть это и не самая сложная машина, но овладеть навыками работы с AD крайне важно, если ты собираешься пентестить корпоративные сети.
INFO
HackTheBox (HTB) — полузакрытая площадка для хакерских соревнований CTF. Чтобы получить инвайт, нужно пройти небольшое испытание. После этого тебе дадут доступ к десяткам заведомо уязвимых виртуальных машин и ты сможешь прокачивать навыки пентестера. Автор статьи успел потратить немало сил в погоне за высокой строчкой в рейтинговой таблице HTB.

Контроллер домена Active Directory — это критически важная составляющая почти любой современной IT-инфраструктуры. Служба каталогов Windows Server всегда была желанным объектом контроля для нарушителей, решивших прочно обустроиться внутри корпоративной сети. Поэтому аспекты обеспечения защиты AD — животрепещущая тема для обсуждения в любой компании исследователей кибербезопасности.
Виртуалка, которую мы будем ломать, называется Active. Ее сложность оценивается сообществом невысоко — 4,6 балла из 10. Вот что нам предстоит проделать с ней:
- сбор информации о разделяемых SMB-ресурсах (пробуем ряд крутых утилит: smbclient, smbmap, enum4linux, nullinux);
- разграбление SMB с анонимным доступом для захвата файла конфигураций групповых политик
Groups.xml; - декрипт GPP-пароля из той самой
Groups.xml; - получение доступа к внутридоменному аккаунту, атака Kerberoasting (против протокола аутентификации Kerberos), извлечение тикета администратора с помощью коллекции скриптов impacket;
- наконец, офлайновое восстановление пароля администратора из хеша с помощью Hashcat для окончательного захвата контроллера.
«…Лежа в пещере своей, в три глотки лаял огромный Цербер, и лай громовой оглашал молчаливое царство…»
Разведка
Начальная стадия — сбор информации об объекте исследования для дальнейшего анализа. От качества этой фазы во многом зависит успешность планируемой атаки. Мы соберем необходимые сведения, которые определят вектор проникновения в систему.
Nmap
Следуя хорошему тону, сперва аккуратно «прощупаем» виртуалку на предмет открытых портов с помощью Nmap: пока не используем тяжелую артиллерию — скриптовые обвесы NSE и определение версий запущенных сервисов, иначе время сканирования существенно увеличилось бы. Задаем интенсивность в 5000 пакетов в секунду (имеет смысл, когда работаешь с хостом на Windows, к которому, помимо тебя, одновременно стучится еще сотня-другая пользователей HTB) и на всякий случай запросим отчеты во всех форматах (.nmap, .gnmap, .xml) с помощью флага -oA.
root@kali:~# nmap -n -vvv -sS -Pn —min-rate 5000 -oA nmap/initial 10.10.10.100
Смотрим отчет.
root@kali:~# cat nmap/initial.nmap
# Nmap 7.70 scan initiated Sat Dec 15 23:26:06 2018 as: nmap -n -vvv -sS -Pn —min-rate 5000 -oA nmap/initial 10.10.10.100
Nmap scan report for 10.10.10.100
Host is up, received user-set (0.14s latency).
Scanned at 2018-12-15 23:26:06 MSK for 1s
Not shown: 983 closed ports
Reason: 983 resets
PORT STATE SERVICE REASON
53/tcp open domain syn-ack ttl 127
88/tcp open kerberos-sec syn-ack ttl 127
135/tcp open msrpc syn-ack ttl 127
139/tcp open netbios-ssn syn-ack ttl 127
389/tcp open ldap syn-ack ttl 127
445/tcp open microsoft-ds syn-ack ttl 127
464/tcp open kpasswd5 syn-ack ttl 127
593/tcp open http-rpc-epmap syn-ack ttl 127
636/tcp open ldapssl syn-ack ttl 127
3268/tcp open globalcatLDAP syn-ack ttl 127
3269/tcp open globalcatLDAPssl syn-ack ttl 127
49152/tcp open unknown syn-ack ttl 127
49153/tcp open unknown syn-ack ttl 127
49154/tcp open unknown syn-ack ttl 127
49155/tcp open unknown syn-ack ttl 127
49157/tcp open unknown syn-ack ttl 127
49158/tcp open unknown syn-ack ttl 127
Read data files from: /usr/bin/../share/nmap
# Nmap done at Sat Dec 15 23:26:07 2018 — 1 IP address (1 host up) scanned in 0.80 seconds
Значение TTL, равное 128, еще раз подтверждает, что это тачка с Windows.
Много открытых портов, много сервисов. Повысим детализацию и узнаем версии всего того, что запущено, задействовав заодно флаг -sC. Он добавит к сканированию дефолтные скрипты из арсенала NSE.
root@kali:~# nmap -n -vvv -sS -sV -sC -oA nmap/version —stylesheet nmap-bootstrap.xsl 10.10.10.100
root@kali:~# cat nmap/version.nmap
# Nmap 7.70 scan initiated Sat Dec 15 23:26:38 2018 as: nmap -n -vvv -sS -sV -sC -oA nmap/version —stylesheet nmap-bootstrap.xsl 10.10.10.100
Nmap scan report for 10.10.10.100
Host is up, received echo-reply ttl 127 (0.14s latency).
Scanned at 2018-12-15 23:26:38 MSK for 200s
Not shown: 983 closed ports
Reason: 983 resetsPORT STATE SERVICE REASON VERSION53/tcp open domain syn-ack ttl 127 Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)| dns-nsid:|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)88/tcp open kerberos-sec syn-ack ttl 127 Microsoft Windows Kerberos (server time: 2018-12-15 20:19:56Z)135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC139/tcp open netbios-ssn syn-ack ttl 127 Microsoft Windows netbios-ssn389/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)445/tcp open microsoft-ds? syn-ack ttl 127464/tcp open kpasswd5? syn-ack ttl 127593/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0636/tcp open tcpwrapped syn-ack ttl 1273268/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)3269/tcp open tcpwrapped syn-ack ttl 12749152/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49153/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49154/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49155/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC49157/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.049158/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPCService Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:|_clock-skew: mean: -7m07s, deviation: 0s, median: -7m07s| p2p-conficker:| Checking for Conficker.C or higher...| Check 1 (port 53842/tcp): CLEAN (Couldn't connect)| Check 2 (port 40109/tcp): CLEAN (Couldn't connect)| Check 3 (port 43653/udp): CLEAN (Timeout)| Check 4 (port 38631/udp): CLEAN (Failed to receive data)|_ 0/4 checks are positive: Host is CLEAN or ports are blocked| smb2-security-mode:| 2.02:|_ Message signing enabled and required| smb2-time:| date: 2018-12-15 23:20:56|_ start_date: 2018-12-11 03:34:26
Read data files from: /usr/bin/../share/nmap
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sat Dec 15 23:29:58 2018 — 1 IP address (1 host up) scanned in 200.67 seconds
![]()
INFO
Nmap позволяет генерировать красивые отчеты в HTML с помощью опции --stylesheet. Для этого только нужно создать подходящий шаблон XSL-таблицы стилей или воспользоваться готовым. К примеру, хороший вариант — nmap-bootstrap-xsl.
По результатам расширенного сканирования заключаем:
- это контроллер домена Active Directory с именем домена
active.htb; - ОС — Windows Server 2008 R2 SP1;
microsoft-ds?(он же Microsoft Directory Services, или SMB) — сетевые разделяемые ресурсы SMB, в простонародье «SMB-шары» версии 2 на 445-м порте;- система аутентификации Kerberos на 88-м порте.
Начнем с очевидного — посмотрим, что скрывает SMB.
Энумерация SMB — порт 445
Об этом можно было бы написать отдельную статью, но здесь мы лишь вкратце рассмотрим софт для срыва покровов с SMB-шар.
NSE (Nmap Scripting Engine)
У всемогущего Nmap есть арсенал скриптов на все случаи жизни. Вытягивание информации об SMB — не исключение. Посмотрим, что есть в его ассортименте из категорий default, version и safe, использовав контекстный поиск по файлам с расширением .nse в Kali Linux.
root@kali:~# locate -r ‘.nse$’ | xargs grep categories | grep ‘default|version|safe’ | grep smb/usr/share/nmap/scripts/smb-double-pulsar-backdoor.nse:categories = {"vuln", "safe", "malware"}/usr/share/nmap/scripts/smb-enum-services.nse:categories = {"discovery","intrusive","safe"}/usr/share/nmap/scripts/smb-ls.nse:categories = {"discovery", "safe"}/usr/share/nmap/scripts/smb-mbenum.nse:categories = {"discovery", "safe"}/usr/share/nmap/scripts/smb-os-discovery.nse:categories = {"default", "discovery", "safe"}/usr/share/nmap/scripts/smb-protocols.nse:categories = {"safe", "discovery"}/usr/share/nmap/scripts/smb-security-mode.nse:categories = {"default", "discovery", "safe"}/usr/share/nmap/scripts/smb-vuln-ms17-010.nse:categories = {"vuln", "safe"}/usr/share/nmap/scripts/smb2-capabilities.nse:categories = {"safe", "discovery"}/usr/share/nmap/scripts/smb2-security-mode.nse:categories = {"safe", "discovery", "default"}/usr/share/nmap/scripts/smb2-time.nse:categories = {"discovery", "safe", "default"}/usr/share/nmap/scripts/smb2-vuln-uptime.nse:categories = {"vuln", "safe"}
Направим безопасные (safe) творения скриптового движка на 445-й порт:
root@kali:~# nmap -n —script safe -oA nmap/nse-smb-enum -p445 10.10.10.100
root@kali:~# cat nmap/nse-smb-enum.nmap
# Nmap 7.70 scan initiated Sun Dec 16 00:03:51 2018 as: nmap -n —script safe -oA nmap/nse-smb-enum -p445 10.10.10.100
Pre-scan script results:| broadcast-dhcp-discover:| Response 1 of 1:| IP Offered: 10.0.2.16| Subnet Mask: 255.255.255.0| Router: 10.0.2.2| Domain Name Server: 192.168.1.1|_ Server Identifier: 10.0.2.2| broadcast-ping:| IP: 192.168.1.140 MAC: 52:54:00:12:35:02|_ Use --script-args=newtargets to add the results as targets|_eap-info: please specify an interface with -e| targets-asn:|_ targets-asn.asn is a mandatory parameter
Nmap scan report for 10.10.10.100
Host is up (0.14s latency).
PORT STATE SERVICE445/tcp open microsoft-ds|_smb-enum-services: ERROR: Script execution failed (use -d to debug)
Host script results:|_clock-skew: mean: -7m06s, deviation: 0s, median: -7m06s|_fcrdns: FAIL (No PTR record)|_ipidseq: Incremental!|_msrpc-enum: Could not negotiate a connection:SMB: ERROR: Server disconnected the connection|_path-mtu: PMTU == 1500| smb-mbenum:|_ ERROR: Failed to connect to browser service: Could not negotiate a connection:SMB: ERROR: Server disconnected the connection| smb-protocols:| dialects:| 2.02|_ 2.10| smb2-capabilities:| 2.02:| Distributed File System| 2.10:| Distributed File System| Leasing|_ Multi-credit operations| smb2-security-mode:| 2.02:|_ Message signing enabled and required| smb2-time:| date: 2018-12-15 23:57:31|_ start_date: 2018-12-11 03:34:26| unusual-port:|_ WARNING: this script depends on Nmap's service/version detection (-sV)
Post-scan script results:| reverse-index:|_ 445/tcp: 10.10.10.100
# Nmap done at Sun Dec 16 00:05:02 2018 — 1 IP address (1 host up) scanned in 71.04 seconds
Несмотря на обширный вывод, ничего полезного мы не нашли, только еще раз подтвердили, что это протокол второй версии — SMBv2. Идем дальше.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
1 год5690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»