HTB Undetected. Используем чужие бэкдоры
the Matrix
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts:
И запускаем сканирование портов.
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).

Мы находим три открытых порта:
Выбор не очень широкий, из всего представленного остается работать только с веб‑сервером на 80 порту.

При тестировании веб‑приложений я рекомендую выполнять абсолютно всю работу через Burp Proxy. Это помогло найти ссылку, ведущую на другой домен (а не на тот, что мы придумали).

Добавляем его в файл /etc/hosts и просматриваем.

Это тот же сайт, только появилось новое меню, в котором есть корзина и кнопка для авторизации.
Больше ничего интересного найти на сайте не удалось, поэтому попробуем перебрать каталоги при помощи fuff.
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов с целью поиска скрытой информации и недоступной обычным посетителям функций. Для этого можно использовать программы вроде dirsearch и dirb.
Я предпочитаю легкий и очень быстрый ffuf. При запуске используем следующие параметры:
Получается следующая команда:

Находим несколько каталогов, из которых реальный интерес представляет всего один — /vendor. Файла index. в нем нет, поэтому Apache показывает нам содержимое.

Сразу видим, какие программы используются. Можно заглядывать внутрь папок. Пройдясь по ним, мы узнаем и номера версий. Все это сильно облегчит нам поиск уязвимостей. Так, судя по файлам ChangeLog, здесь установлен фреймворк PHPUnit версии 5.6.

При помощи Google легко находим не только известную уязвимость в ней, но и метод эксплуатации.

Файл Util/PHP/eval-stdin.php до версии 5.6.3 позволяет выполнять произвольный код на PHP через переданные POST-запросом данные, начинающиеся с подстроки <?. Это происходит из‑за следующего кода.
Попробуем отправить тестовую нагрузку из PoC:

Запрос был обработан и выполнен! Попробуем выполнить команду id в командной оболочке.

Команда успешно выполнена — естественно, пробрасываем реверс‑шелл. Для начала откроем листенер (у меня порт 4321) командой rlwrap -cAr nc -lvp 4321. Затем нам нужно закодировать реверс шелл в Base64:
Передаем его в цепочке команд.
Мгновенно получаем бэкконект.

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


Скачиваем исполняемый файл на локальный хост и просматриваем строки в нем.

Видим какую‑то строку в шестнадцатеричном виде. Если у тебя установлен pwntools, то ты можешь легко декодировать ее с помощью команды unhex.

В декодированных командах находим загрузку файла с публичными ключами, сохранение какой‑то библиотеки .main и добавление в cron. Бэкдор на бэкдоре! Еще там есть запись хеша пароля в файл /etc/shadow. Используя hashcat, мы можем попытаться пробрутить его, для этого нам нужно узнать соответствующий режим.

Так мы узнаем режим 1800 и можем указать его в параметре -m.

Мы знаем пароль, а имя пользователя возьмем из файла /etc/passwd.

И от имени steven1 мы можем авторизоваться на сервере.

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

В сообщении говорится о странной работе веб‑сервера Apache. С подобным направлением на HTB я уже сталкивался. Нам нужно найти бэкдор и понять, как он работает. Просмотрим каталог с библиотеками для указанной службы и найдем тот, дата создания или изменения которого будет отличаться от остальных.

Обратим внимание на файл mod_reader.so. Копируем его на локальный хост с помощью SSH и закидываем в любой удобный дизассемблер (желательно с декомпилятором). Я буду использовать IDA Pro.
В самом коде ничего найти не удалось кроме интересной строки в кодировке Base64.

Декодируем строку и получаем еще одну команду. Она предназначена для скачивания и перезаписи файла службы sshd. Скачиваем и этот файл.


Я уже видел несколько бэкдоров sshd, поэтому первым делом решил проверить функцию auth_password. Она служит для принятия решения об авторизации пользователя с предоставленными учетными данными. Функция принимает логин и пароль, а возвращает true или false.

Декомпилируем эту функцию и получаем читаемый код. Так в строках 19-26 заполняется массив backdoor, который в строках 27-33 ксорится со значением 0x96, и результат шифрования в строке 34 сравнивается с введенным паролем.


Нам нужно восстановить полный массив, и проксорить ключом 0x96. Из‑за архитектуры процессора little-endian нужно «перевернуть» записываемые числа. К примеру 0xBCF0B5E3 (из строки 22) будет записано в памяти как 0xE3B5F0BC. Для дешифрования используем сайт CyberChef.

С полученным паролем подключаемся по SSH и забираем флаг рута.

Машина захвачена!
Источник
Наши проекты:
- Кибер новости: the Matrix
- Хакинг: /me Hacker
- Кодинг: Minor Code