Bug Bounty, Bug Hunting, ElasticSearch

#10 Bug Bounty v.2 — Основные базы данных для взлома. ElasticSearch

Здравствуйте, дорогие друзья.

Вы, вероятно, слышали о популярной реляционной базе данных под названием MySQL. ElasticSearch, как и MySQL, является базой данных, используемой для хранения и запроса информации. Однако ElasticSearch обычно используется для выполнения полнотекстового поиска в очень больших наборах данных. Следует также отметить, что ElasticSearch по умолчанию не проходит проверку подлинности, что может вызвать множество проблем с безопасностью, как описано в следующих разделах.

Основы ElasticSearch

Согласно Google, “ElasticSearch — это документно-ориентированная база данных, предназначенная для хранения, извлечения и управления документно-ориентированными или полуструктурированными данными. При использовании Elasticsearch вы сохраняете данные в виде документа JSON. Когда вы запрашиваете их для извлечения”. В отличие от MySQL, который хранит свою информацию в таблицах, elasticsearch использует так называемые типы. Каждый тип может содержать несколько строк, которые называются документами. Документы — это, по сути, большой двоичный файл в формате json, содержащий ваши данные, как показано в примере ниже:

● {«id»:1, «имя»: «timcore», «пароль»:»SuperSecureP@ssword»}

В MySQL мы используем имена столбцов, но в Elasticsearch мы используем имена полей. Именами полей в приведенном выше json-двоичном файле будут id, name и password. В MySQL мы будем хранить все наши таблицы в базе данных.

В MySQL мы используем имена столбцов, но в Elasticsearch мы используем имена полей

В ElasticSearch мы храним наши документы в так называемом индексе. Индекс — это, по сути, набор документов.

База данных ElasticSearch, не прошедшая проверку подлинности

В Elasticsearch есть http-сервер, работающий на порту 9200, который можно использовать для запроса к базе данных. Основная проблема здесь заключается в том, что многие пользователи предоставляют доступ к этому порту в общедоступном Интернете без какой-либо проверки подлинности. Это означает, что любой может запросить базу данных и извлечь информацию. Быстрый поиск по Shodan даст множество результатов, как показано ниже:

Быстрый поиск по Shodan

Как только вы определите, что у вашей целевой базы данных открыт порт 9200, вы можете легко проверить, является ли она базой данных ElasticSearch, отправив запрос GET в корневой каталог. Ответ должен выглядеть примерно так:

запрос GET в корневой каталог

Как только вы узнаете, что у конечной точки есть доступная база данных Elastic Search, попробуйте найти все доступные индексы(базы данных). Это можно сделать, нажав “/_cat/indexes?v” отправив запрос GET в конечную точку. При этом будут перечислены все индексы, как показано ниже:

 Перечисление всех индексов

Эту информацию, а также другие сведения о сервисе можно найти, запросив конечную точку “/_stats/?pretty=1”.

Для выполнения полнотекстового поиска в базе данных вы можете использовать следующую команду “/_all/_search?q=электронная почта”. При этом во всех индексах будет запрашиваться слово “электронная почта”. Есть несколько слов, которые мне нравятся для поиска, в том числе:

● Имя пользователя

● Адрес электронной почты

● Пароль

● Токен

● Секрет

● Ключ

Если вы хотите запросить определенный индекс, вы можете заменить слово “_all” на название индекса, по которому вы хотите выполнить поиск. Другой полезный метод — перечислить все имена полей, отправив запрос GET в конечную точку “/INDEX_NAME_HERE/_mapping?pretty=1”. Обычно я ищу интересные имена полей, такие как:

● Имя пользователя

● Адрес электронной почты

● Пароль

● Токен

● Секрет

● Ключ

Результат должен выглядеть примерно так:

mapping?pretty=1

Как вы можете видеть выше, у нас есть имена полей addressable_type, city и многое другое, которые не отображаются, поскольку выходные данные были слишком большими. Чтобы запросить все значения, содержащие определенное имя поля, используйте следующую команду “/_all/_search?q=_exists:email&pretty=1” . При этом будут возвращены документы, содержащие имя поля(столбца) с именем email, как показано ниже:

будут возвращены документы, содержащие имя поля(столбца) с именем email

Опять же, вы можете заменить “_all” именем индекса, чтобы выполнять поиск конкретно по этой конечной точке.

Резюме

ElasticSearch — это просто еще одна база данных, в которой вы можете хранить информацию и запрашивать ее. Основная проблема заключается в том, что пользователи открывают доступ к веб-сервису, не прошедшему проверку подлинности. Имея доступ к веб-сервису без проверки подлинности, злоумышленники могут легко удалить всю базу данных. Всегда следите за портом 9200.

На этом все. Всем хорошего дня!

Цикл статей по Bug Bounty.