Bug Bounty, Bug Hunting, Охота за ошибками

#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 даст множество результатов, как показано ниже:

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. Это перечислит все индексы, как показано ниже:

json elastic search db

Эту информацию наряду с другими сведениями об услуге также можно найти по адресу запрашивая конечную точку «/_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. Подготовка к охоте. База знаний.

#5 Bug Bounty. RSS-каналы.

#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.

#16 Bug Bounty. Гугл Дорки.

#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.

#24 Bug Bounty. Гугл Дорки.

#25 Bug Bounty. Часть 8: Фаза fingerprint.

#26 Bug Bounty. Censys. Nmap. Masscan.

#27 Bug Bounty. Веб-приложение.

#28 Bug Bounty. Этап эксплуатации.

#29 Bug Bounty. GitHub.

#30 Bug Bounty. Неправильно настроенные сегменты облачного хранилища.

#31 Bug Bounty. Облачное хранилище Google.