Stacked (2022)

Содержание:
В самом начале мы просканируем порты, профаззим поддомены и найдем один, на котором будет XSS в HTTP заголовке Referer. C помощью данной XSS мы найдем еще один поддомен и прочитаем почтовые сообщения. В этих сообщениях будет поддомен с AWS Lambda. Затем эксплуатируем вулну через создание lambda-функции и получим реверс шелл. На хосте запустим PSPY и увидим выполнение lambda-функций, которые выполняются от рута.
Сканируем порты с помощью nmap:

С формой я сделать так ничего и не смог, поэтому пошел дальше.
Находим имя домена и один поддомен:
Так как в тегах <title>STACKED.HTB</title>, то скорее всего, это реальное имя домена, следовательно вносим его в /etc/hosts и можно фаззить поддомены.

На главной странице поддомена расположены логотипы различных технологий и ОС: docker, aws labmda, localstack, fullstack, ubuntu, debian, centos. Это дает отсылку на то, с чем мы будем иметь дело чуть позже.
На странице есть docker-compose.yml:
Отсюда мы можем узнать, что используется версия localstack - 0.12.6, в котором есть уязвимость CVE-2021-32090(https://blog.sonarsource.com/hack-the-stack-with-localstack), через которую можно выполнить OS Command Injection, а также он расположен на 8080 веб-порте.
Также на поддомене распологается форма:

Получаем XSS в HTTP-заголовке Referer:
Так как тут стоит WAF от XSS, следовательно, скорее всего тут есть XSS👍 Поэтому, с помощью простого перебора ее можно обнаружить в заголовке Referer:



Чтобы увидеть HTTP заголовки реквеста админа, который "пытается" получить index.js можно использовать netcat:

Эксплуатируем XSS+CSRF, чтобы прочитать сообщения от имени админа на другом поддомене:
Мы можем добавить поддомен mail.stacked.htb в наш /etc/hosts, но на него мы все равно не сможем попасть, потому что там скорее всего стоит защита и можно попасть на него только с localhost.
Но мы можем посмотреть, что на этом поддомене через XSS. Так как на сайте используется XMLHttpRequest (из HTTP-заголовка), следовательно можно написать свой javascript-файл, который сделает GET-запрос на mail.stacked.htb от лица админа, а затем сделать POST-запрос с GET-ответом на наш хост:

В данном ответе я ничего интересного не нашел, поэтому немного изменил скрипт на самое первое сообщение и запустил по-новой:
И в новом сообщении есть вот такой текст:
<p>Hey Adam, I have set up S3 instance on s3-testing.stacked.htb so that you can configure the IAM users, roles and permissions. I have initialized a serverless instance for you to work from but keep in mind for the time being you can only run node instances. If you need anything let me know. Thanks.</p>
Обнаружение нового домена и эксплуатация CVE-2021-32090:
Добавляем поддомен s3-testing.stacked.htb в /etc/hosts.

Тут ничего нет, кроме строки {"status": "running"}. Как уже ранее было замечено, на сервере скорее всего используется AWS Labmda и localstack, поэтому можно попробовать создать lambda-функцию. Для этого конфигурируем aws консоль:

Теперь с помощью данной инструкции составляем команду для отправки функции на сервер. Также нам понадобится javascript файл с простейшей функцией:
Теперь запаковываем файл в архив и отправляем:

Вернулось сообщение - Hello, значит функция успешно объявлена и сохранена. Теперь мы можем попробовать эксплуатировать CVE-2021-32090:
Также, чтобы это работало, нам нужно перенаправить админа на панель localstack на 8080 порте:


Получаем реверс шелл с помощью CVE-2021-32090:
Теперь можно прокинуть реверс шелл. Заворачиваем его в base64, чтобы не было никаких проблем при передаче:
Флаг -n в команде echo позволяет избавиться от переноса строки, т.е. \n.
В итоге у нас должно получить что-то такое:
Теперь ставим листенер:
Снова через BurpSuite отправляем запрос с XSS на редирект на localhost:8080. Получаем шелл:

Обнаружение мисконфигов с помощью PSPY:
Теперь нам нужно прокинуть pspy на атакуемый хост и запустить:

Теперь, если мы выполним действия создания функции и ее проверки:

У нас появляется много векторов атак. Поэтому можно попробовать пробросить шелл от рута с помощью параметра --handler:

Получение рута с помощью другого образа докера:
Теперь можем посмотреть все образы докера и попытаться присоедениться к "другому" локалстаку:

И мы опять оказались в докере, но теперь мы можем прочитать root.txt, чтобы получить ssh-доступ от рута, нужно вписать свой SSH Public Key в /mnt/root/.ssh/authorized_keys.

Last updated
Was this helpful?