9200 - Pentesting Elasticsearch
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Отримайте перспективу хакера на ваші веб-додатки, мережу та хмару
Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування атакуючої поверхні, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
Основна інформація
Elasticsearch є розподіленим, відкритим пошуковим та аналітичним двигуном для всіх типів даних. Він відомий своєю швидкістю, масштабованістю та простими REST API. Побудований на Apache Lucene, він вперше був випущений у 2010 році компанією Elasticsearch N.V. (тепер відома як Elastic). Elasticsearch є основним компонентом Elastic Stack, колекції відкритих інструментів для збору, збагачення, зберігання, аналізу та візуалізації даних. Цей стек, який зазвичай називають ELK Stack, також включає Logstash і Kibana, а тепер має легкі агенти для доставки даних, звані Beats.
Що таке індекс Elasticsearch?
Індекс Elasticsearch є колекцією пов'язаних документів, збережених у форматі JSON. Кожен документ складається з ключів та їх відповідних значень (рядки, числа, булеві значення, дати, масиви, геолокації тощо).
Elasticsearch використовує ефективну структуру даних, звану інвертованим індексом, для полегшення швидкого повнотекстового пошуку. Цей індекс перераховує кожне унікальне слово в документах і ідентифікує документи, в яких з'являється кожне слово.
Під час процесу індексації Elasticsearch зберігає документи та створює інвертований індекс, що дозволяє здійснювати пошук майже в реальному часі. API індексації використовується для додавання або оновлення JSON-документів у конкретному індексі.
Порт за замовчуванням: 9200/tcp
Ручна енумерація
Банер
Протокол, що використовується для доступу до Elasticsearch, є HTTP. Коли ви отримуєте доступ через HTTP, ви знайдете деяку цікаву інформацію: http://10.10.10.115:9200/
Якщо ви не бачите цього відповіді, зверніться до наступного розділу.
Аутентифікація
За замовчуванням Elasticsearch не має увімкненої аутентифікації, тому за замовчуванням ви можете отримати доступ до всього всередині бази даних без використання будь-яких облікових даних.
Ви можете перевірити, що аутентифікація вимкнена, надіславши запит до:
Однак, якщо ви надішлете запит до /
і отримаєте відповідь, подібну до наступної:
Це означає, що автентифікація налаштована, і вам потрібні дійсні облікові дані, щоб отримати будь-яку інформацію з elasticsearch. Тоді ви можете спробувати брутфорсити це (він використовує HTTP basic auth, тому будь-що, що може BF HTTP basic auth, може бути використано). Ось у вас є список стандартних імен користувачів: elastic (суперкористувач), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_. Старі версії Elasticsearch мають стандартний пароль changeme для цього користувача.
Базова енумерація користувачів
Elastic Info
Ось кілька кінцевих точок, до яких ви можете доступитися через GET, щоб отримати деяку інформацію про elasticsearch:
/_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
.
Indices
Ви можете зібрати всі індекси, звернувшись до 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
Витратьте хвилину, щоб порівняти вміст кожного документа (запису) всередині індексу bank та поля цього індексу, які ми бачили в попередньому розділі.
Отже, на цьому етапі ви можете помітити, що існує поле під назвою "total" всередині "hits", яке вказує на те, що було знайдено 1000 документів в цьому індексі, але лише 10 були отримані. Це тому, що за замовчуванням існує обмеження в 10 документів.
Але тепер, коли ви знаєте, що цей індекс містить 1000 документів, ви можете вивантажити всі з них, вказавши кількість записів, які ви хочете вивантажити в параметрі size
: http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000
asd
&#xNAN;Примітка: Якщо ви вкажете більше число, всі записи все одно будуть вивантажені, наприклад, ви могли б вказати 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
Отримайте перспективу хакера на ваші веб-додатки, мережу та хмару
Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування атакуючої поверхні, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.
Вчіться та практикуйте Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Last updated