Содержание статьи
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка. Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.10.246 static.htb
И запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта.
#!/bin/bashports=$(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 7.9p1), 2222 (служба OpenSSH 7.6p1) и 8080 (веб‑сервер Apache 2.4.38). Начнем с веба.
Справка: брутфорс учеток
Поскольку вначале у нас нет учетных данных, нет и смысла изучать службы, которые всегда требуют авторизации (например, SSH). Единственное, что мы можем делать здесь, — это перебирать пароли брутфорсом, но машины с HTB почти всегда можно пройти по‑другому. В жизни таких вариантов может не быть, к тому же есть шансы подобрать пароль или получить его при помощи социальной инженерии.
В результатах скана отмечено, что в корневом каталоге сервера есть файл robots.
. Этот файл используется для того, чтобы попросить краулеры (например, Google, Яндекс и прочие) не трогать какие‑то определенные каталоги.
К примеру, никто не хочет, чтобы в поисковой выдаче появлялись страницы авторизации администраторов сайта, файлы или персональная информация со страниц пользователей и прочие вещи в таком духе. Но у любой медали две стороны: злоумышленники первым делом просматривают этот файл, чтобы узнать о файлах и каталогах, которые хочет спрятать администратор сайта. В нашем случае есть два каталога: vpn
и .
.
На первой странице нас встречает самописный сайт, а точнее, форма авторизации. Во втором каталоге нет файла index.
и запрет на просмотр на веб‑сервере тоже не задан, поэтому мы можем видеть все его содержимое.


Скачиваем дамп базы данных и просматриваем сообщение.
Binary files are being corrupted during transfer!!! Check if are recoverable.
В сообщении сказано, что файл был поврежден и его требуется восстановить. Разархивировать GZIP у меня тоже не вышло, поэтому я отправился в Google за поиском утилиты, способной решить эту проблему.
Точка входа
GZIP fix
Поискав на просторах GitHub, я нашел программку fixgz. Но перед использованием ее нужно собрать из исходников.
git clone https://github.com/yonjar/fixgz
cd fixgz
g++ fixgz.cpp
./a.out ../db.sql.gz fixed_db.sql.gz
gunzip fixed_db.sql.gz

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

У нас есть хеш, значит, нужно попытаться его перебрать. Но перед этим необходимо узнать алгоритм. Все возможные алгоритмы хеширования для заданной последовательности может подыскать утилита HashId.

Из всех представленных алгоритмов наиболее популярный, а значит, и наиболее вероятный — SHA-1. Для него есть много онлайновых декрипторов с огромными базами. Воспользуемся одним из них и получим очень простой пароль.

С учетными данными admin
:admin
авторизуемся на сайте, который мы встретили первым, и получим форму ввода одноразового пароля. Таким образом, на сайте используется двухфакторная аутентификация.

TOTP
TOTP (Time-based One-Time Password Algorithm) — алгоритм создания одноразовых паролей для защищенной аутентификации. Это алгоритм односторонней аутентификации, то есть сервер удостоверяется в подлинности клиента. Главное отличие TOTP от других подобных алгоритмов — генерация пароля на основе времени. Обычно это не точное время, а какой‑то его интервал (по умолчанию 30 секунд).
Можно найти много генераторов ТОТP, как онлайновых, так и реализованных в виде библиотек для разных языков программирования. Что делает ТОТP безопасным — это TOTP-секрет, который мы, скорее всего, и нашли в базе.
Осталось настроить время, как на удаленном сервере. Узнать его мы можем из ответа HTTP в заголовке Date
. После этого выставляем его у себя командой sudo
.

Затем я использовал расширение auth-helper для Firefox. Полученный OTP быстро вставляем в форму, и нам открываются дополнительные возможности на сайте.

Видим список серверов и соответствующие IP-адреса. Вот только сети эти нам недоступны. Также имеется форма ввода для какого‑то генератора. Я ввел простое слово и получил конфиг VPN.

Откроем файл и посмотрим параметры подключения. Так, в параметре remote
указан сервер vpn.
.

Первым делом нужно добавить соответствующую запись в /
:
10.10.10.246 static.htb vpn.static.htb
Теперь попробуем подключиться по VPN.

Из логов мы видим, что автоматически добавился маршрут в сети 172.
и 172.
. При этом другие хосты расположены в сети 172.
, поэтому мы не сможем к ним обратиться. Тогда я решил добавить маршрут в эту сеть самостоятельно.
sudo ip route add 172.20.0.0/24 dev tun9
А затем обратимся к хосту WEB (172.
) через браузер. Вуаля! Вновь каталог с доступным содержимым.

Точка опоры
Страница info.
на самом деле выполняет PHPINFO.

Здесь очень много информации, которую нужно тщательно проанализировать. Отсюда можно узнать версии всех затронутых программных продуктов, таких как OpenSSL, PDO_MYSQL, Phar. Высока вероятность, что один из них будет не обновлен и поэтому уязвим. Так натыкаемся на Xdebug — средство профилирования и отладки скриптов на PHP. Xdebug поставляется как расширение для PHP, поэтому может дать нам выполнение произвольного кода. В базе Metasploit есть такой эксплоит.


По умолчанию Xdebug будет прослушивать порт 9000 на машине разработчика. Чтобы активировать Xdebug, в GET- или POST-параметре или в cookie должен присутствовать параметр XDEBUG_SESSION=name
.
Обычная конфигурация Xdebug может выглядеть так: ini
. В этом случае IP-адрес разработчика задается в конфигурации и позволяет только указанному IP-адресу использовать Xdebug. Однако существует опция конфигурации xdebug.
, и установка для нее значения true отключает настроенный IP-адрес xdebug.
и позволяет подключиться обратно к любому хосту, который активирует Xdebug. Таким образом, любой подключившийся может выполнить произвольный код.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»