Содержание статьи
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Теория
У бакетов есть возможность контроля доступа: объекты могут быть общедоступными либо приватными. Доступ к приватным бывает как только для чтения, так и с возможностью записи.
Внутри S3 есть два типа данных: Bucket — контейнер для объектов и Object — сам файл. Самые частые способы взаимодействия:
-
List
— перечислить все хранилища S3 или файлы на S3; -
Get
— получить файл; -
Put
— поместить файл на S3; -
Delete
— удалить файл.
Формат URL для доступа к S3 выглядит так:
http(s)://{имя бакета}.s3.{регион}.amazonaws.com
Здесь {
определяется владельцем бакета, например:
https://xakeprufiles.s3.us-west-2.amazonaws.com
Бакеты S3 можно обнаружить разными способами, например найти URL в исходном коде страницы веб‑сайта, в репозиториях GitHub или даже автоматизировать процесс с помощью готовых утилит.
Для перебора можно использовать название компании, за которым следуют общие термины. Например, xakepru-assets
, xakepru-www
, xakepru-public
, xakepru-private
и так далее.
Также к бакету или объекту может быть привязана политика безопасности.
С помощью политик можно указать, кто имеет доступ к ресурсу и какие действия может выполнять с ним. Есть четыре варианта:
- публичный доступ (Public Access);
- ACL — сокращение от Access Control List. Можно настраивать как на бакет, так и на конкретный объект бакета;
- Bucket Policies — настраиваются только для бакета;
- Time Limited URLs — временные URL для доступа.
Еще есть политики, основанные на личности, они прикрепляются к пользователю, группе или роли IAM. Позволяют определять, что объект может делать.
Поиск бакетов
Начать стоит с сервиса greyhatwarfare.com. Он позволяет находить бакеты и объекты в них с помощью ключевых слов.
Если толком ничего не находится, то идем на сайт компании. Здесь нам поможет Burp Suite. Просто просматривай веб‑сайт, а затем анализируй полученную карту.
При этом бакеты всегда находятся на следующих URL:
http://s3.[region].amazonaws.com/[bucket_name]/
http://[bucket_name].s3.[region].amazonaws.com/
http://s3-website-[region].amazonaws.com/[bucket_name]
http://[bucket_name].s3-website-[region].amazonaws.com
http://[bucketname].s3.dualstack.[region].amazonaws.com
http://s3.dualstack.[region].amazonaws.com/[bucketname]
Нужно ли нам подбирать правильный регион? Нет! Amazon любезно подскажет, что мы ищем где‑то не там. Поэтому нам достаточно лишь названия бакета.
Но как получить это название? Чаще всего оно скрывается в записях CNAME (в них сопоставлены псевдонимы с исходными DNS-именами) домена атакуемой компании. Обнаружить их можно вот так:
dig <domain> any
Пример:
dig flaws.cloud any
Да, может быть, CNAME и пуст, но посмотрим, что еще есть на этом IP:
nslookup <ip>
Пример:
nslookup 52.218.192.11
И получим, что к IP привязан еще и адрес s3-website-us-west-2.
. Это так называемый Website Endpoint. Эндпоинты используются, когда с бакетом интегрирован простенький статический веб‑сайт.
Все бакеты S3, настроенные для веб‑хостинга, получают домен AWS, который можно использовать без собственного DNS. То есть имя бакета в данном случае совпадает с именем домена, а именно flaws.
.
Конечно же, каждый домен перебирать вручную проблематично. Ускорит дело простенький скрипт на Bash:
while read p; doecho $p, curl --silent -I -i http://$p | grep AmazonS3
done < subdomains.txt
Обрати внимание, что не все домены зарегистрированы как записи CNAME. Некоторые могут не отображаться явно в процессе разрешения имен. В таком случае удобно использовать сайт dnscharts.hacklikeapornstar.com. Сюда можно загрузить список доменов, а сервис уже самостоятельно найдет записи и по возможности сопоставит их с облачными сервисами.
Если ты не знаешь, как находить поддомены, то рекомендую утилиту Amass в связке с новой техникой перечисления доменов.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»