Это write-up по буткемпу Standoff365. Ниже представлено официальное описание буткемп-полигона:
Онлайн-полигон — виртуальная инфраструктура с реалистичными копиями систем и ПО из разных отраслей, в которой специалисты по кибербезопасности могут тренироваться 24/7.
Вся инфраструктура обыграна вокруг легенды о виртуальном государстве. Государство находится в изолированной сети, недоступной извне, и состоит из разных отраслей, в которых воссозданы сервисы с разными уязвимостями. Ты можешь исследовать их, выполняя задания разных уровней сложности: для начинающих и для профи.
Сейчас ты находишься на странице онлайн-полигона для начинающих — более лёгкой тренировочной площадке в сравнении с основным полигоном Standoff для профи. Особенность этой части полигона — наличие подсказок внутри карточек заданий. Несмотря на отметку «для начинающих», даже на этом сегменте тебе нужно иметь общие знания о поиске и эксплуатации уязвимостей, а также на базовом уровне понимать сетевые технологии, чтобы выполнять задания.
Я решил первым делом проходить задания с пометкой [infra], которые нацелены на разведку и эксплуатацию уязвимостей инфраструктуры буткемпа. Перейдём к подготовке рабочего пространства и непосредственно к выполнению заданий.
1. [infra-1] — Внешняя разведка
Получите список учётных записей с внешних веб-ресурсов компании. Восстановите пропущенные символы в адресе r***s@edu.stf и укажите его в отчёте полностью.
Простое задание на знание утилит сканирования для разведки. На сайте Standoff365 указан внешний периметр таргет-сервисов.
Скоуп — внешний периметр:
Используя эти знания, с помощью nmap просканируем сеть и посмотрим открытые порты:
nmap -sV 10.124.1.224/27 -oN port
Получим файл с отсканированной сетью, который в дальнейшем ещё нам понадобится.
Адресов не так много, поэтому можно просмотреть их руками и попробовать найти почтовые адреса. По адресу 10.124.1.235 можно найти следующие e-mail'ы:
r_andrews@edu.stf | t_mathis@edu.stf | s_dotson@edu.stf
Вводим полученные e-mail'ы на Standoff365 и получаем 50 баллов.
2. [infra-2] — Получение доступа к внутренней почте
Получите доступ к эл. почте любого сотрудника компании и отправьте письмо на адрес getmailflag@edu.stf.
Изначально я искал почтовый сервис в той же скоуп-сети, но его там не было. Прибегнув к помощи интернета, я вспомнил про утилиту dig и что она может искать почтовые MX-серверы. Так что выполняем следующую команду:
dig MX edu.stf @10.124.1.240
Из ответа мы узнаём, что почтовый веб-сервис находится по адресу 10.124.1.203, переходим туда. Тут были небольшие проблемы, потому что я пытался перейти по HTTP, но открыт был порт HTTPS. Получаем следующую картину:
Мы уже знаем почтовые адреса сотрудников, поэтому следующим делом забрутфорсим пароли с помощью Burp, хоть и его использование избыточно в нашем случае. Включаем intercept, ловим запрос на авторизацию, затем отправляем в Intruder и добавляем необходимый payload с предоставленными авторами буткемпа паролями. Я пытался высмотреть подошедший пароль по HTTP-статус-коду, но выявить нужный запрос нужно было по длине ответа.
Итого получаем креды пользователя s_dotson.
Входим в почту и получаем флаг.
3. [infra-3] — Получение доступа к VPN компании
Используя данные, полученные в ходе внешней разведки, подключитесь к VPN компании.
Это задание я выполнил быстро, потому что в свободное время шерстил по сети буткемпа и случайно нашёл конфиг VPN'а компании с помощью gobuster.
В нашем случае запрос со статус-кодом 200 — это нужная нам информация, а точнее VPN-конфиг, который ни в коем случае не должен лежать в открытом виде. Сохраняем его в отдельный файл.
подключаемся к сети. Флаг получаем, прочитав содержимое config.
4. [infra-4] — Внутренняя разведка (Active Directory)
Узнайте номер телефона пользователя Gerard Rodriquez.
Получив доступ к сети VPN, смотрим route к сети с помощью команды:
Видим, что нужная нам сеть находится по адресу 10.154.16.0 с маской /23. Сканируем с помощью nmap:
nmap -sV 10.154.16.0/23 -oN nmap_scan_VPN_Standoff
Получаем файл с отсканированными адресами. Быстро пробежавшись взглядом, видим наш таргет-ПК и имя хоста:
В Active Directory номер телефона сотрудника можно найти с помощью LDAP, поэтому ищем LDAP-сервер с помощью следующей команды:
awk -v RS='Nmap scan report for ' 'NR>1 && /ldap/ {print "Nmap scan report for " $0}' nmap_scan_VPN_Standoff
Находим LDAP-сервер, и теперь мы с помощью ldapsearch имеем возможность попробовать вытащить телефонный номер grodriquez, используя уже известные нам креды s_dotson:
ldapsearch -x -H ldap://10.154.16.134 -D "s_dotson@edu.stf" -w "*****" \
-b "DC=edu,DC=stf" "(sAMAccountName=*rodriquez*)" TelephoneNumber
Получаем номер телефона и 50 баллов.
5. [infra-5] — Получение доступа к компьютеру сотрудника HR-департамента
Получите доступ к компьютеру HR-сотрудника S. Dotson и к содержимому файла hr.txt.
Задание достаточно простое, и начинается оно со сканирования, которое мы, к счастью, уже выполняли ранее и сохранили вывод. Поэтому ищем S. Dotson'а в сохранённом отчёте о сканировании с помощью:
awk -v RS='Nmap scan report for ' 'NR>1 && /SDOTSON/ {print "Nmap scan report for " $0}' nmap_scan_VPN_Standoff
Nmap scan report for 10.154.16.196
Host is up (0.21s latency).
Not shown: 994 closed tcp ports (reset)
PORT STATE SERVICE VERSION
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: edu)
3389/tcp open ms-wbt-server Microsoft Terminal Services
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
6543/tcp open mythtv?
Service Info: Host: SDOTSON; OS: Windows; CPE: cpe:/o:microsoft:windows
Немного подумав и изучив открытые порты, я предположил, что мы можем получить доступ к таргет-ПК с помощью порта 5985, который является службой WinRM, а для работы с открытыми в сеть портами WinRM есть прекрасная утилита evil-winrm. Так что проверяем гипотезу и пробуем получить доступ с помощью команды:
evil-winrm -i 10.154.16.196 -P 5985 -u s_dotson -p *******
По заданию нам нужен файл hr.txt, так что ищем его с помощью PowerShell-команды:
Get-ChildItem C:\ -Filter "hr.txt" -Recurse -ErrorAction SilentlyContinue
Поначалу я из-за невнимательности залез в папку 7-zip, открыл hr.txt, а это оказался хорватский перевод для 7-zip:
Но нужный нам флаг находится в C:\, поэтому переходим в папку и находим флаг, получаем 50 баллов.
Примечание: в подсказках к заданию на Standoff365 указано, что данное задание нужно выполнять с помощью фишинговых рассылок на найденные нами ранее адреса с помощью .docm-файлов с макросами. Но вариант с WinRM показался мне логичнее и намного проще.
6. [infra-6] — Получение доступа к компьютеру сотрудника HR-департамента
Получите доступ к компьютеру HR-сотрудника T. Mathis и к содержимому файла hr.txt.
Для выполнения данного задания нам необходимо создать .docm-файл с полезной нагрузкой, который с помощью VBA-макроса будет подключаться на порт нашей атакующей машины при открытии файла, а затем отправить его на почтовый адрес нашего таргета от лица другого сотрудника, креды которого мы уже имеем.
Выкладывать код VBA-макроса я не буду, но нагуглить или написать его несложно.
Включаем слушатель на 1337 (произвольном) порту. Для генерации payload'а reverse shell использовалась утилита psyceshell.
Успешно подключаемся, смотрим, кто мы, с помощью whoami.
С помощью той же команды рекурсивно ищем файл, содержащий флаг:
Get-ChildItem C:\ -Filter "hr.txt" -Recurse -ErrorAction SilentlyContinue
7. [infra-8] — Повышение привилегий на компьютере сотрудника HR-департамента
Так как на данный момент я подключён к TMATHIS, было принято решение сначала повысить привилегии на данной машине ([infra-7] — задание на повышение привилегий на машине SDOTSON).
Я решил проверить известные мне уязвимости повышения привилегий Windows и сразу же вспомнил про AlwaysInstallElevated.
Примечание:
AlwaysInstallElevated — уязвимость конфигурации, при которой Windows Installer (msiexec.exe) запускает любой MSI-пакет с привилегиями SYSTEM вне зависимости от того, кто инициировал установку.
Для реализации данной атаки нам нужно два условия:
Оба ключа реестра AlwaysInstallElevated установлены в 1.
Возможность запустить MSI-файл на целевой машине.
Проверим первое условие с помощью следующей команды на таргет-машине, уже имея shell-доступ:
Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer", `
"HKCU:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue
Видим, что оба значения установлены в 1, а значит, атака возможна, и, вероятно, авторы bootcamp'а подразумевают именно её выполнение.
Возможность создания файла на таргете:
Файлы мы можем записывать в директорию пользователя T_Mathis.
Все условия для выполнения атаки имеются, перейдём к исполнению.
Поднимаем на атакующей машине http-сервер, после чего на таргете скачиваем .msi-файл.
С помощью rlwrap и netcat запускаем listener на attacker-машине:
Запускаем на таргете .msi-файл и получаем привилегированную сессию system, смотрим C:\flag.txt, получаем токен.