Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Для начала я покажу, как фиксить «битый» архив GZIP; из него мы получим важную информацию, затем подберем одноразовый пароль и получим доступ к хосту через VPN. Для повышения привилегий проэксплуатируем уязвимость в Xdebug и найдем ошибки в сложной пользовательской программе. Все это — чтобы пройти сложную машину Static с площадки Hack The Box.
warning
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Добавляем IP-адрес машины в /etc/hosts
:
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.txt
. Этот файл используется для того, чтобы попросить краулеры (например, Google, Яндекс и прочие) не трогать какие‑то определенные каталоги.
К примеру, никто не хочет, чтобы в поисковой выдаче появлялись страницы авторизации администраторов сайта, файлы или персональная информация со страниц пользователей и прочие вещи в таком духе. Но у любой медали две стороны: злоумышленники первым делом просматривают этот файл, чтобы узнать о файлах и каталогах, которые хочет спрятать администратор сайта. В нашем случае есть два каталога: vpn
и .ftp_uploads
.
На первой странице нас встречает самописный сайт, а точнее, форма авторизации. Во втором каталоге нет файла index.html
и запрет на просмотр на веб‑сервере тоже не задан, поэтому мы можем видеть все его содержимое.
Форма авторизации
Содержимое каталога .ftp_uploads
Скачиваем дамп базы данных и просматриваем сообщение.
В сообщении сказано, что файл был поврежден и его требуется восстановить. Разархивировать GZIP у меня тоже не вышло, поэтому я отправился в Google за поиском утилиты, способной решить эту проблему.
Поискав на просторах 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
Исправление архива GZIP
После исправления архива мы его распаковываем и читаем дамп базы данных. В дампе мы найдем учетные данные для авторизации: логин, хеш пароля и зачем‑то TOTP — одноразовый пароль на основе времени.
Содержимое дампа базы данных
У нас есть хеш, значит, нужно попытаться его перебрать. Но перед этим необходимо узнать алгоритм. Все возможные алгоритмы хеширования для заданной последовательности может подыскать утилита HashId.
Определение типа хеша
Из всех представленных алгоритмов наиболее популярный, а значит, и наиболее вероятный — SHA-1. Для него есть много онлайновых декрипторов с огромными базами. Воспользуемся одним из них и получим очень простой пароль.
Находим пароль по хешу
С учетными данными admin
:admin
авторизуемся на сайте, который мы встретили первым, и получим форму ввода одноразового пароля. Таким образом, на сайте используется двухфакторная аутентификация.
Форма ввода OTP
TOTP (Time-based One-Time Password Algorithm) — алгоритм создания одноразовых паролей для защищенной аутентификации. Это алгоритм односторонней аутентификации, то есть сервер удостоверяется в подлинности клиента. Главное отличие TOTP от других подобных алгоритмов — генерация пароля на основе времени. Обычно это не точное время, а какой‑то его интервал (по умолчанию 30 секунд).
Можно найти много генераторов ТОТP, как онлайновых, так и реализованных в виде библиотек для разных языков программирования. Что делает ТОТP безопасным — это TOTP-секрет, который мы, скорее всего, и нашли в базе.
Осталось настроить время, как на удаленном сервере. Узнать его мы можем из ответа HTTP в заголовке Date
. После этого выставляем его у себя командой sudo date -s "[содержимое заголовка Date]"
.
HTTP-ответ
Затем я использовал расширение auth-helper для Firefox. Полученный OTP быстро вставляем в форму, и нам открываются дополнительные возможности на сайте.
Главная страница сайта
Видим список серверов и соответствующие IP-адреса. Вот только сети эти нам недоступны. Также имеется форма ввода для какого‑то генератора. Я ввел простое слово и получил конфиг VPN.
Предложение о загрузке конфига VPN
Откроем файл и посмотрим параметры подключения. Так, в параметре remote
указан сервер vpn.static.htb
.
Содержимое файла конфигураций
Первым делом нужно добавить соответствующую запись в /etc/hosts
:
10.10.10.246 static.htb vpn.static.htb
Теперь попробуем подключиться по VPN.
Логи подключения VPN
Из логов мы видим, что автоматически добавился маршрут в сети 172.17.0.0/24
и 172.30.0.0/16
. При этом другие хосты расположены в сети 172.20.0.0/16
, поэтому мы не сможем к ним обратиться. Тогда я решил добавить маршрут в эту сеть самостоятельно.
sudo ip route add 172.20.0.0/24 dev tun9
А затем обратимся к хосту WEB (172.20.0.10
) через браузер. Вуаля! Вновь каталог с доступным содержимым.
Корневой каталог сайта
Страница info.php
на самом деле выполняет PHPINFO.
Страница info.php
Здесь очень много информации, которую нужно тщательно проанализировать. Отсюда можно узнать версии всех затронутых программных продуктов, таких как OpenSSL, PDO_MYSQL, Phar. Высока вероятность, что один из них будет не обновлен и поэтому уязвим. Так натыкаемся на Xdebug — средство профилирования и отладки скриптов на PHP. Xdebug поставляется как расширение для PHP, поэтому может дать нам выполнение произвольного кода. В базе Metasploit есть такой эксплоит.
Поиск эксплоитов в базе Metasploit
Параметры эксплоита
По умолчанию Xdebug будет прослушивать порт 9000 на машине разработчика. Чтобы активировать Xdebug, в GET- или POST-параметре или в cookie должен присутствовать параметр XDEBUG_SESSION=name
.
Обычная конфигурация Xdebug может выглядеть так: ini xdebug.remote_enable= true xdebug.remote_host= [IP]
. В этом случае IP-адрес разработчика задается в конфигурации и позволяет только указанному IP-адресу использовать Xdebug. Однако существует опция конфигурации xdebug.remote_connect_back
, и установка для нее значения true отключает настроенный IP-адрес xdebug.remote_host
и позволяет подключиться обратно к любому хосту, который активирует Xdebug. Таким образом, любой подключившийся может выполнить произвольный код.
Источник: xakep.ru