9200 - Pentesting Elasticsearch
Основна інформація
Elasticsearch - це розподілений, відкритий пошуковий та аналітичний движок для всіх типів даних. Він відомий своєю швидкістю, масштабованістю та простими REST API. Побудований на Apache Lucene, вперше був випущений в 2010 році компанією Elasticsearch N.V. (тепер відомою як Elastic). Elasticsearch є основним компонентом Elastic Stack, колекції відкритих інструментів для впровадження, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, який часто називають ELK Stack, також включає Logstash та Kibana, а тепер має легкі агенти доставки даних, які називаються Beats.
Що таке індекс Elasticsearch?
Індекс Elasticsearch - це колекція пов'язаних документів, збережених у форматі JSON. Кожен документ складається з ключів та відповідних значень (рядків, чисел, булевих значень, дат, масивів, геолокацій тощо).
Elasticsearch використовує ефективну структуру даних, яка називається інвертованим індексом, для забезпечення швидкого повнотекстового пошуку. Цей індекс перелічує кожне унікальне слово в документах та визначає документи, в яких з'являється кожне слово.
Під час індексації Elasticsearch зберігає документи та створює інвертований індекс, що дозволяє здійснювати майже миттєвий пошук. Для додавання або оновлення JSON-документів у конкретний індекс використовується індексовий API.
Порт за замовчуванням: 9200/tcp
Ручна перелічення
Банер
Протокол, який використовується для доступу до Elasticsearch, - HTTP. При доступі до нього через HTTP ви знайдете цікаву інформацію: http://10.10.10.115:9200/
Якщо ви не бачите цю відповідь при доступі до /
, подивіться наступний розділ.
Аутентифікація
За замовчуванням Elasticsearch не має ввімкненої аутентифікації, тому за замовчуванням ви можете отримати доступ до всього всередині бази даних без використання будь-яких облікових даних.
Ви можете перевірити, що аутентифікація вимкнена, зробивши запит до:
Однак, якщо ви надсилаєте запит до /
і отримуєте відповідь, подібну до наступної:
Це означає, що аутентифікація налаштована, і потрібні дійсні облікові дані, щоб отримати будь-яку інформацію з Elasticsearch. Потім ви можете спробувати зламати його (використовує HTTP базову аутентифікацію, тому можна використовувати будь-що, що підходить для BF HTTP базової аутентифікації). Ось список типових імен користувачів: elastic (суперкористувач), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ У старіших версіях Elasticsearch для цього користувача встановлено типовий пароль changeme.
Основна перелік користувачів
Інформація про Elastic
Ось деякі кінцеві точки, до яких ви можете отримати доступ за допомогою GET, щоб отримати деяку інформацію про elasticsearch:
_cat | /_cluster | /_security |
---|---|---|
/_cat/segments | /_cluster/allocation/explain | /_security/user |
/_cat/shards | /_cluster/settings | /_security/privilege |
/_cat/repositories | /_cluster/health | /_security/role_mapping |
/_cat/recovery | /_cluster/state | /_security/role |
/_cat/plugins | /_cluster/stats | /_security/api_key |
/_cat/pending_tasks | /_cluster/pending_tasks | |
/_cat/nodes | /_nodes | |
/_cat/tasks | /_nodes/usage | |
/_cat/templates | /_nodes/hot_threads | |
/_cat/thread_pool | /_nodes/stats | |
/_cat/ml/trained_models | /_tasks | |
/_cat/transforms/_all | /_remote/info | |
/_cat/aliases | ||
/_cat/allocation | ||
/_cat/ml/anomaly_detectors | ||
/_cat/count | ||
/_cat/ml/data_frame/analytics | ||
/_cat/ml/datafeeds | ||
/_cat/fielddata | ||
/_cat/health | ||
/_cat/indices | ||
/_cat/master | ||
/_cat/nodeattrs | ||
/_cat/nodes |
Ці кінцеві точки були взяті з документації, де ви можете знайти більше.
Також, якщо ви звернетесь до /_cat
, відповідь буде містити підтримувані екземпляром кінцеві точки /_cat/*
.
У /_security/user
(якщо увімкнено автентифікацію), ви можете побачити, який користувач має роль superuser
.
Індекси
Ви можете зібрати всі індекси, звернувшись за адресою http://10.10.10.115:9200/_cat/indices?v
Для отримання інформації про тип даних, які зберігаються в індексі, ви можете отримати доступ до: http://host:9200/<index>
наприклад, у цьому випадку http://10.10.10.115:9200/bank
Дамп індексу
Якщо ви хочете вивантажити всі вміст індексу, ви можете отримати доступ до: http://host:9200/<index>/_search?pretty=true
наприклад, http://10.10.10.115:9200/bank/_search?pretty=true
Приділіть хвилину, щоб порівняти вміст кожного документа (запису) в індексі банку та поля цього індексу, які ми бачили в попередньому розділі.
Таким чином, на цьому етапі ви можете помітити, що є поле з назвою "total" всередині "hits", яке вказує на те, що всередині цього індексу було знайдено 1000 документів, але лише 10 було витягнуто. Це тому, що за замовчуванням є обмеження на 10 документів.
Але, тепер, коли ви знаєте, що цей індекс містить 1000 документів, ви можете вивантажити всі з них, вказавши кількість записів, які ви хочете вивантажити в параметрі size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
Примітка: Якщо ви вкажете більше число, всі записи все одно будуть вивантажені, наприклад, ви можете вказати size=9999
, і це буде дивно, якщо буде більше записів (але ви повинні перевірити).
Вивантажити все
Щоб вивантажити все, ви можете просто перейти за тим самим шляхом, що й раніше, але не вказуючи жодного індексу http://host:9200/_search?pretty=true
наприклад, http://10.10.10.115:9200/_search?pretty=true
Пам'ятайте, що в цьому випадку буде застосовано обмеження за замовчуванням на 10 результатів. Ви можете використовувати параметр size
, щоб вивантажити більшу кількість результатів. Прочитайте попередній розділ для отримання додаткової інформації.
Пошук
Якщо ви шукаєте певну інформацію, ви можете зробити пошук по всіх індексах, перейшовши за адресою http://host:9200/_search?pretty=true&q=<search_term>
як у http://10.10.10.115:9200/_search?pretty=true&q=Rockwell
Якщо ви хочете просто шукати в індексі, ви можете просто вказати його в шляху: http://host:9200/<index>/_search?pretty=true&q=<search_term>
Зверніть увагу, що параметр q, використаний для пошуку вмісту, підтримує регулярні вирази
Ви також можете використовувати щось на зразок https://github.com/misalabs/horuz, щоб провести фаззинг сервісу Elasticsearch.
Права на запис
Ви можете перевірити свої права на запис, спробувавши створити новий документ всередині нового індексу, запустивши щось на зразок:
Ця команда створить новий індекс під назвою bookindex
з документом типу books
, який має атрибути "bookId", "author", "publisher" та "name"
Зверніть увагу, як новий індекс з'являється у списку:
І помітіть автоматично створені властивості:
Автоматичне перелічення
Деякі інструменти отримають деякі дані, представлені раніше:
Shodan
port:9200 elasticsearch
Last updated