#32 Bug Bounty. Elastic Search DB.
Здравствуйте, дорогие друзья.
Введение
Вы, наверное, слышали о популярной реляционной базе данных MySQL Elastic Search, такой как MySQL, которая представляет собой базу данных, используемую для хранения и запроса информации. Однако Elastic Search обычно используется для выполнения полнотекстового поиска в очень больших наборах данных.
Основы Elastic Search
Определение от Google описывает Elastic Search следующим образом: «ES — это документ-ориентированная база данных, предназначенная для хранения, извлечения и управления ориентированными на документы или полуструктурированные данные. Когда Вы используете Elastic Search, Вы храните данные в формате JSON. Затем Вы запрашиваете их для поиска ». В отличие от MySQL, которая хранит свою информацию в таблицах, Elastic Search использует то, что называется типами. Каждый тип может иметь несколько строк, которые называются документами. Документы в основном представляют собой большие двоичные объекты json, которые содержат Ваши данные, как показано на пример ниже:
{«id»:1, «name»:»ghostlulz», «password»:»SuperSecureP@ssword»}
В MySQL мы используем имена столбцов, но в Elastic Search мы используем имена полей. Имена полей в приведенном выше json-блобе будут идентификатором, именем и паролем. В MySQL мы будем хранить все наши таблицы в базе данных. В Elastic Search мы храним наши документы в так называемом индексе. Индекс в основном представляет собой набор документов.
Неаутентифицированная база данных Elastic Search
Elastic Search имеет http-сервер, работающий на порту 9200, который можно использовать для запросов к базе данных. Основная проблема здесь в том, что многие люди оставляют этот порт в публичном доступе без какой-либо аутентификации. Это означает, что любой может запросить базу данных и извлечь информацию. Быстрый поиск в Shodan даст множество результатов, как показано ниже:
Как только Вы определили, что у Вашей цели открыт порт 9200, Вы можете легко проверить, является ли это базой данных Elastic Search, указав корневой каталог с помощью GET запроса. Ответ должен выглядеть примерно так:
{
«name» : «r2XXXX»,
«cluster_name» : «elasticsearch»,
«cluster_uuid» : «wIVyutV-XXXXXXXXXX»,
«version» : {
«number» : «5.6.1»,
«build_hash» : «667b497»,
«build_date» : «2017-09-14T19:22:05.189Z»,
«build_snapshot» : false,
«lucene_version» : «6.6.1»
},
«tagline» : «You Know, for Search»
}
Как только Вы узнаете, что конечная точка имеет открытую базу данных Elastic Search, попробуйте найти все доступные индексы (базы данных). Это можно сделать, выбрав точку «/_cat/indices?v» с запросом GET. Это перечислит все индексы, как показано ниже:
Эту информацию наряду с другими сведениями об услуге также можно найти по адресу запрашивая конечную точку «/_stats/?pretty=1». Для выполнения полнотекстового поиска в базе данных Вы можете использовать следующую команду «/_all/_search?q=email». Она будет запрашивать каждый индекс для слова «Эл. адрес». Есть несколько слов, которые я люблю искать, и они включают:
● Имя пользователя
● Пользователь
● Электронная почта
● Пароль
● Токен
Если Вы хотите запросить определенный индекс, Вы можете заменить «_all» именем индекса, по которому Вы будете выполнять поиск. Еще один полезный метод — перечислить все имена полей, выполнив запрос GET. в конечную точку «/INDEX_NAME_HERE/_mapping?pretty=1». Я обычно ищу те самые интересные слова, упомянутые выше. Вывод должен выглядеть как-то так:
{
«address» : {
«mappings» : {
«_default_» : {
«properties» : {
«text» : {
«type» : «text»,
«fields» : {
«raw» : {
«type» : «keyword»
}
}
}
}
},
«addressables» : {
«properties» : {
«addressable_id» : {
«type» : «long»
},
«addressable_type» : {
«type» : «text»,
«fields» : {
«keyword» : {
«type» : «keyword»,
«ignore_above» : 256
}
}
},
«city» : {
«type» : «text»,
«fields» : {
«keyword» : {
«type» : «keyword»,
«ignore_above» : 256
}
}
Мы видим, что у нас есть имена полей addressable_type, city и многое другое, которые не отображаются, так как вывод был слишком большим. Чтобы запросить все значения, которые содержат определенное имя поля, используйте следующую команду «/_all/_search?q=_exists:email&pretty=1». Это вернет документы, которые содержат имя поля (столбца), с именем электронной почты, как показано ниже:
{
«took» : 12,
«timed_out» : false,
«_shards» : {
«total» : 110,
«successful» : 110,
«skipped» : 0,
«failed» : 0
},
«hits» : {
«total» : 7772,
«max_score» : 1.0,
«hits» : [
{
«_index» : «address»,
«_type» : «addressables»,
«_id» : «19»,
«_score» : 1.0,
«_source» : {
«id» : 19,
«addressable_id» : 55,
«addressable_type» : «FHMatch\\Models\\User»,
«lang» : «en»,
«address1» : null,
«city» : «Alpharetta»,
«state» : «GA»,
«postal» : «30004»,
«country» : «US»,
«lat» : «REDACTED»,
«lon» : «REDACTED»,
«email» : «REDACTED@yahoo.com»,
«phone» : «REDACTED»,
«website» : null,
«timezone» : «America/New_York»,
«currency» : «USD»,
«privacy» : null,
«meta» : null,
«created_at» : «2017-09-26 19:42:02»,
«updated_at» : «2017-09-26 19:42:02»,
«deleted_at» : null
}
},
Опять же, Вы можете заменить «_all» на имя индекса для выполнения поиска. конкретно против этой конечной точки.
Вывод
Elastic Search — это просто еще одна база данных, в которой Вы можете хранить и запрашивать информацию. Основная проблема заключается в том, что люди раскрывают неаутентифицированные данные. При неавторизованном доступе к веб-сервису злоумышленники могут легко сбросить всю базу данных.
На этом все. Всем хорошего дня!
#1 Bug Bounty. Подготовка к Bug Bounty. Введение.
#2 Bug Bounty. Организация. Введение.
#3 Bug Bounty. Заметки. Введение.
#4 Bug Bounty. Подготовка к охоте. База знаний.
#6 Bug Bounty 101. Выбор платформы.
#7 Bug Bounty. Выбор правильной цели.
#8 Bug Bounty. Методология — рабочие процессы.
#9 Bug Bounty. Рабочий процесс GitHub.
#10 Bug Bounty. Гугл Дорки Рабочий процесс.
#11 Bug Bounty. Эксплойты — Рабочий процесс.
#12 Bug Bounty. CMS — Рабочий процесс.
#13 Bug Bounty. Брутфорс — Рабочий процесс.
#14 Bug Bounty. Раздел 2. Разведка.
#15 Bug Bounty. Reverse Whois.
#17 Bug Bounty. Разведка — Фаза 2. Словарь.
#18 Bug Bounty. Перечисление поддоменов.
#19 Bug Bounty. Поисковый движок.
#20 Bug Bounty. Перестановка поддоменов.
#21 Bug Bounty. Разрешения DNS.
#22 Bug Bounty. Wayback Machine crawl data.
#23 Bug Bounty. Проверка файлов JavaScript.
#25 Bug Bounty. Часть 8: Фаза fingerprint.
#26 Bug Bounty. Censys. Nmap. Masscan.
#27 Bug Bounty. Веб-приложение.
#28 Bug Bounty. Этап эксплуатации.
#30 Bug Bounty. Неправильно настроенные сегменты облачного хранилища.