Содержание статьи
- Разведка
- Сканирование портов
- Сканирование веб-страниц
- Точка входа
- Amazon S3
- Продвижение
- Брутфорс пароля
- Повышение привилегий
Сегодня мы пройдем машину средней сложности с площадки Hack The Box. По дороге ты научишься получать и создавать данные в базе DynamoDB, посмотришь на работу с бакетами Amazon S3 и научишься получать данные через вложение в PDF, используя уязвимость в конвертере PDF4ML.
Подключаться к машинам с HTB рекомендуется только через VPN. Не делай этого с компьютеров, где есть важные для тебя данные, так как ты окажешься в общей сети с другими участниками.
Разведка
Сканирование портов
Первым делом я заношу IP машины (10.10.10.212) в файл /etc/hosts и даю ей более удобный адрес bucket.htb.
Затем переходим к сканированию портов. Я запускаю скрипт, который уже не раз описывал, и сканирую порты в два прохода (второй раз — со скриптами по найденным в первый раз портам).
#!/bin/bashports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr 'n' ',' | sed s/,$//)nmap -p$ports -A $1
Результат работы скрипта
Главная страница сайта http://bucket.htb
Заглядываем в исходный код страницы и видим примечательную особенность — использованы теги для вставки изображений. Файлы с картинками загружаются с другого домена — s3.bucket.htb.
Исходный код домашней страницы http://bucket.htb
Значит, на веб‑сервере есть виртуальный хост s3.bucket.htb и, если мы хотим с ним работать, надо добавить и его в файл /etc/hosts. Сразу же можем проверить, что там.
Тестовый запрос по обнаруженному адресу
Вместо HTML с него возвращается статус выполнения, а значит, используется какая‑то служебная технология (из названия поддомена пока что стараемся не делать быстрых выводов).
Сканирование веб-страниц
Одно из первых действий при тестировании веб‑приложений — это сканирование сайта на наличие интересных каталогов и файлов. Особенно это полезно, когда натыкаешься на тупик, подобный тому, в котором мы оказались. Для сканирования можно применять широко известные программы dirsearch и DIRB, но я обычно пользуюсь более быстрым gobuster. При запуске используем следующие параметры:
-
dir— сканирование директорий и файлов; -
-t []— количество потоков; -
-u []— URL-адрес для сканирования; -
-w []— словарь для перебора; -
--timeout []— время ожидания ответа.
gobuster dir -t 128 -u http://s3.bucket.htb -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt --timeout 30s
Найденные каталоги на http://s3.bucket.htb/
Находим всего два интересных каталога. При обращении к первому снова получим ответ со статусом. Кстати, чтобы копаться в JSON, можно прямо в терминале использовать утилиту jq, передавая ей ответ на запрос.
curl http://s3.bucket.htb/health | jq
Преобразованный с помощью jq ответ от http://s3.bucket.htb/health
Обращаясь к каталогу shell, получим редирект на другой адрес:
http://444af250749d:4566/shell/
Если открыть его в браузере, можно увидеть, что это Amazon S3. Что ж, теперь никаких сомнений!
Страница, полученная при обращении к http://s3.bucket.htb/shell
Точка входа
Amazon S3
Amazon Simple Storage Service (или S3) — это сервис для хранения объектов, полезный, когда нужно легко масштабирующееся хранилище. Его часто применяют, чтобы хранить статическую часть сайтов, ресурсы мобильных приложений, а также для хранения бэкапов и прочих подобных нужд. Также у Amazon есть своя СУБД класса NoSQL, которая хранит данные в формате «ключ — значение», она называется DynamoDB.
Наша цель — получить доступ к хранимым данным, поскольку они явно важны для прохождения машины. По S3 есть официальная документация. Ознакомившись с ней, ставим набор утилит AWS Command Line и настраиваем доступ к хранилищу.
sudo apt install awscli
aws configure
Конфигурация AWS CLI
Разберемся с заданными параметрами.
- AWS Access Key ID и AWS Secret Access Key — идентификатор ключа доступа и сам секретный ключ доступа. Используются для подписи программных запросов, которые мы отправляем в AWS. Создать такой ключ можно здесь, но, так как он используется только для подписи запросов, я просто взял ID и ключ, представленные в документации.
- Default region name — регион AWS, серверы которого использовать по умолчанию. Обычно это ближайший к тебе регион, но, поскольку он может быть любым, я вставил значение из документации.
- Default output format — формат, в котором будет предоставлен результат запроса: JSON, YAML, text, table. Так как с помощью
jqудобно читать JSON, выбираем его.
Теперь, когда заданы основные параметры для работы с AWS, мы можем выполнять запросы к базе DynamoDB. Как и при работе с любой базой, первым делом просмотрим, есть ли доступные таблицы. В запросе используем следующие параметры:
-
dynamodb— указываем в качестве службы DynamoDB; -
list-table— для получения списка таблиц; -
--endpoint-url— URL для доступа к S3; -
--no-sign-request— не подписывать запрос.
aws dynamodb list-tables --endpoint-url http://s3.bucket.htb/ --no-sign-request | jq
Таблицы в базе DynamoDB