Содержание статьи
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 еще раз подтверждает, что это тачка с 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 resets
PORT STATE SERVICE REASON VERSION
53/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 RPC
139/tcp open netbios-ssn syn-ack ttl 127 Microsoft Windows netbios-ssn
389/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 127
464/tcp open kpasswd5? syn-ack ttl 127
593/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack ttl 127
3268/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 127
49152/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49153/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49154/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49155/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
49157/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
Service 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 SERVICE
445/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. Идем дальше.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»