9200 - Pentesting Elasticsearch
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Get a hacker's perspective on your web apps, network, and cloud
Find and report critical, exploitable vulnerabilities with real business impact. Use our 20+ custom tools to map the attack surface, find security issues that let you escalate privileges, and use automated exploits to collect essential evidence, turning your hard work into persuasive reports.
Elasticsearch είναι μια κατανεμημένη, ανοιχτού κώδικα μηχανή αναζήτησης και ανάλυσης για όλους τους τύπους δεδομένων. Είναι γνωστή για την ταχύτητά της, κλιμακωτότητά της και απλές REST APIs. Χτισμένη πάνω στον Apache Lucene, κυκλοφόρησε για πρώτη φορά το 2010 από την Elasticsearch N.V. (τώρα γνωστή ως Elastic). Το Elasticsearch είναι το βασικό συστατικό του Elastic Stack, μιας συλλογής εργαλείων ανοιχτού κώδικα για την εισαγωγή, εμπλουτισμό, αποθήκευση, ανάλυση και οπτικοποίηση δεδομένων. Αυτή η στοίβα, που αναφέρεται συνήθως ως ELK Stack, περιλαμβάνει επίσης το Logstash και το Kibana, και τώρα έχει ελαφριά agents αποστολής δεδομένων που ονομάζονται Beats.
Ένας δείκτης Elasticsearch είναι μια συλλογή σχετικών εγγράφων που αποθηκεύονται ως JSON. Κάθε έγγραφο αποτελείται από κλειδιά και τις αντίστοιχες τιμές τους (αλφαριθμητικά, αριθμούς, booleans, ημερομηνίες, πίνακες, γεωγραφικές τοποθεσίες, κ.λπ.).
Το 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 (superuser), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_. Οι παλαιότερες εκδόσεις του Elasticsearch έχουν τον προεπιλεγμένο κωδικό πρόσβασης changeme για αυτόν τον χρήστη.
Here are some endpoints that you can access via GET to obtain some information about 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
These endpoints were taken from the documentation where you can find more.
Also, if you access /_cat
the response will contain the /_cat/*
endpoints supported by the instance.
In /_security/user
(if auth enabled) you can see which user has role superuser
.
You can gather all the indices accessing 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;Note: Αν υποδείξετε μεγαλύτερο αριθμό, όλες οι καταχωρίσεις θα εκφορτωθούν ούτως ή άλλως, για παράδειγμα θα μπορούσατε να υποδείξετε 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 για να fuzz μια υπηρεσία elasticsearch.
Μπορείτε να ελέγξετε τις άδειες εγγραφής σας προσπαθώντας να δημιουργήσετε ένα νέο έγγραφο μέσα σε έναν νέο δείκτη εκτελώντας κάτι όπως το παρακάτω:
Αυτή η εντολή θα δημιουργήσει έναν νέο δείκτη με το όνομα bookindex
με ένα έγγραφο τύπου books
που έχει τα χαρακτηριστικά "bookId", "author", "publisher" και "name"
Παρατηρήστε πώς ο νέος δείκτης εμφανίζεται τώρα στη λίστα:
Και σημειώστε τις αυτόματα δημιουργημένες ιδιότητες:
Ορισμένα εργαλεία θα αποκτήσουν κάποια από τα δεδομένα που παρουσιάστηκαν προηγουμένως:
port:9200 elasticsearch
Αποκτήστε την προοπτική ενός χάκερ για τις εφαρμογές ιστού, το δίκτυο και το cloud σας
Βρείτε και αναφέρετε κρίσιμες, εκμεταλλεύσιμες ευπάθειες με πραγματικό επιχειρηματικό αντίκτυπο. Χρησιμοποιήστε τα 20+ προσαρμοσμένα εργαλεία μας για να χαρτογραφήσετε την επιφάνεια επίθεσης, να βρείτε ζητήματα ασφαλείας που σας επιτρέπουν να κλιμακώσετε προνόμια και να χρησιμοποιήσετε αυτοματοποιημένες εκμεταλλεύσεις για να συλλέξετε βασικά αποδεικτικά στοιχεία, μετατρέποντας τη σκληρή δουλειά σας σε πειστικές αναφορές.
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)