Standoff365 Bootcamp — Write-up по заданиям [infra]

13 ноября 2026

Это write-up по буткемпу Standoff365. Ниже представлено официальное описание буткемп-полигона:

Онлайн-полигон — виртуальная инфраструктура с реалистичными копиями систем и ПО из разных отраслей, в которой специалисты по кибербезопасности могут тренироваться 24/7.

Вся инфраструктура обыграна вокруг легенды о виртуальном государстве. Государство находится в изолированной сети, недоступной извне, и состоит из разных отраслей, в которых воссозданы сервисы с разными уязвимостями. Ты можешь исследовать их, выполняя задания разных уровней сложности: для начинающих и для профи.

Сейчас ты находишься на странице онлайн-полигона для начинающих — более лёгкой тренировочной площадке в сравнении с основным полигоном Standoff для профи. Особенность этой части полигона — наличие подсказок внутри карточек заданий. Несмотря на отметку «для начинающих», даже на этом сегменте тебе нужно иметь общие знания о поиске и эксплуатации уязвимостей, а также на базовом уровне понимать сетевые технологии, чтобы выполнять задания.

Я решил первым делом проходить задания с пометкой [infra], которые нацелены на разведку и эксплуатацию уязвимостей инфраструктуры буткемпа. Перейдём к подготовке рабочего пространства и непосредственно к выполнению заданий.

1. [infra-1] — Внешняя разведка

Получите список учётных записей с внешних веб-ресурсов компании. Восстановите пропущенные символы в адресе r***s@edu.stf и укажите его в отчёте полностью.

Простое задание на знание утилит сканирования для разведки. На сайте Standoff365 указан внешний периметр таргет-сервисов.

Скоуп — внешний периметр:

10.124.1.224/27

Используя эти знания, с помощью 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

И получаем ответ:

Ответ dig MX

Из ответа мы узнаём, что почтовый веб-сервис находится по адресу 10.124.1.203, переходим туда. Тут были небольшие проблемы, потому что я пытался перейти по HTTP, но открыт был порт HTTPS. Получаем следующую картину:

Форма авторизации почты

Мы уже знаем почтовые адреса сотрудников, поэтому следующим делом забрутфорсим пароли с помощью Burp, хоть и его использование избыточно в нашем случае. Включаем intercept, ловим запрос на авторизацию, затем отправляем в Intruder и добавляем необходимый payload с предоставленными авторами буткемпа паролями. Я пытался высмотреть подошедший пароль по HTTP-статус-коду, но выявить нужный запрос нужно было по длине ответа.

Итого получаем креды пользователя s_dotson.

Входим в почту и получаем флаг.

3. [infra-3] — Получение доступа к VPN компании

Используя данные, полученные в ходе внешней разведки, подключитесь к VPN компании.

Это задание я выполнил быстро, потому что в свободное время шерстил по сети буткемпа и случайно нашёл конфиг VPN'а компании с помощью gobuster.

Обнаружение VPN-конфига через gobuster

В нашем случае запрос со статус-кодом 200 — это нужная нам информация, а точнее VPN-конфиг, который ни в коем случае не должен лежать в открытом виде. Сохраняем его в отдельный файл.

С помощью команды:

sudo openvpn config

подключаемся к сети. Флаг получаем, прочитав содержимое config.

4. [infra-4] — Внутренняя разведка (Active Directory)

Узнайте номер телефона пользователя Gerard Rodriquez.

Получив доступ к сети VPN, смотрим route к сети с помощью команды:

ip route

Ответ:

Вывод ip 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-сервер в выводе nmap

Находим 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

Ответ:

Результат ldapsearch

Получаем номер телефона и 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 *******

Успешно получаем доступ.

Успешное подключение через evil-winrm

По заданию нам нужен файл hr.txt, так что ищем его с помощью PowerShell-команды:

Get-ChildItem C:\ -Filter "hr.txt" -Recurse -ErrorAction SilentlyContinue

Ответ:

Поиск hr.txt

Поначалу я из-за невнимательности залез в папку 7-zip, открыл hr.txt, а это оказался хорватский перевод для 7-zip:

Хорватский перевод 7-zip

Но нужный нам флаг находится в C:\, поэтому переходим в папку и находим флаг, получаем 50 баллов.

Примечание: в подсказках к заданию на Standoff365 указано, что данное задание нужно выполнять с помощью фишинговых рассылок на найденные нами ранее адреса с помощью .docm-файлов с макросами. Но вариант с WinRM показался мне логичнее и намного проще.

6. [infra-6] — Получение доступа к компьютеру сотрудника HR-департамента

Получите доступ к компьютеру HR-сотрудника T. Mathis и к содержимому файла hr.txt.

Для выполнения данного задания нам необходимо создать .docm-файл с полезной нагрузкой, который с помощью VBA-макроса будет подключаться на порт нашей атакующей машины при открытии файла, а затем отправить его на почтовый адрес нашего таргета от лица другого сотрудника, креды которого мы уже имеем.

Выкладывать код VBA-макроса я не буду, но нагуглить или написать его несложно.

Подготовка .docm с макросом

Включаем слушатель на 1337 (произвольном) порту. Для генерации payload'а reverse shell использовалась утилита psyceshell.

Запуск слушателя
Генерация payload

Успешно подключаемся, смотрим, кто мы, с помощью whoami.

С помощью той же команды рекурсивно ищем файл, содержащий флаг:

Get-ChildItem C:\ -Filter "hr.txt" -Recurse -ErrorAction SilentlyContinue
Поиск флага на машине TMATHIS

7. [infra-8] — Повышение привилегий на компьютере сотрудника HR-департамента

Так как на данный момент я подключён к TMATHIS, было принято решение сначала повысить привилегии на данной машине ([infra-7] — задание на повышение привилегий на машине SDOTSON).

Я решил проверить известные мне уязвимости повышения привилегий Windows и сразу же вспомнил про AlwaysInstallElevated.

Примечание:

AlwaysInstallElevated — уязвимость конфигурации, при которой Windows Installer (msiexec.exe) запускает любой MSI-пакет с привилегиями SYSTEM вне зависимости от того, кто инициировал установку.

Для реализации данной атаки нам нужно два условия:

  1. Оба ключа реестра AlwaysInstallElevated установлены в 1.

  2. Возможность запустить MSI-файл на целевой машине.

Проверим первое условие с помощью следующей команды на таргет-машине, уже имея shell-доступ:

Get-ItemProperty "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Installer", `
  "HKCU:\SOFTWARE\Policies\Microsoft\Windows\Installer" -ErrorAction SilentlyContinue
Проверка ключей реестра AlwaysInstallElevated

Видим, что оба значения установлены в 1, а значит, атака возможна, и, вероятно, авторы bootcamp'а подразумевают именно её выполнение.

Второе условие:

Возможность создания файла на таргете:

Файлы мы можем записывать в директорию пользователя T_Mathis.

Разведка файловой системы

Все условия для выполнения атаки имеются, перейдём к исполнению.

Поднимаем на атакующей машине http-сервер, после чего на таргете скачиваем .msi-файл.

Скачивание .msi на таргет

С помощью rlwrap и netcat запускаем listener на attacker-машине:

rlwrap nc -lvnp 1337

Запускаем на таргете .msi-файл и получаем привилегированную сессию system, смотрим C:\flag.txt, получаем токен.

Получение флага
Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на «compuuuter» — гонка между проверкой и вычислением графа

/Разборы задач

Райтап на «compuuuter» — гонка между проверкой и вычислением графа

TOCTOU-гонка в вычислении графа: Vl3ss обходит проверку скрытого опкода 1337 через PATCH-эндпоинт и затягивает compute hash-коллизиями словаря CPython.
Прочитать

1

Пикси рядом с синим Toyota Land Cruiser Prado на побережье

/Разборы задач

Райтап на задачу «Roman`s Prado» с TaipanByte CTF

Как skydaemon определил регион по автомобильным номерам, а затем нашёл место съёмки Toyota Land Cruiser Prado по панорамам Кабо-Верде.
Прочитать

37