9200 - Pentesting Elasticsearch

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Βασικές πληροφορίες

Το 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 δεν έχει ενεργοποιημένη την ταυτοποίηση, οπότε από προεπιλογή μπορείτε να έχετε πρόσβαση σε όλα τα περιεχόμενα της βάσης δεδομένων χωρίς να χρειάζεται να χρησιμοποιήσετε διαπιστευτήρια.

Μπορείτε να επαληθεύσετε ότι η ταυτοποίηση είναι απενεργοποιημένη με ένα αίτημα προς:

curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
{"error":{"root_cause":[{"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."}],"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."},"status":500}

Ωστόσο, αν στείλετε ένα αίτημα στο / και λάβετε μια απάντηση όπως η παρακάτω:

{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}

Αυτό σημαίνει ότι η πιστοποίηση έχει ρυθμιστεί και χρειάζεστε έγκυρα διαπιστευτήρια για να λάβετε οποιαδήποτε πληροφορία από το Elasticsearch. Στη συνέχεια, μπορείτε να προσπαθήσετε να κάνετε brute force (χρησιμοποιεί HTTP βασική πιστοποίηση, οπότε μπορεί να χρησιμοποιηθεί οτιδήποτε κάνει brute force σε HTTP βασική πιστοποίηση). Εδώ έχετε μια λίστα προεπιλεγμένων ονοματεπων χρηστών: elastic (υπερχρήστης), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system, _anonymous_._ Οι παλαιότερες εκδόσεις του Elasticsearch έχουν το προεπιλεγμένο κωδικό πρόσβασης changeme για αυτόν τον χρήστη.

curl -X GET http://user:password@IP:9200/

Βασική Απαρίθμηση Χρηστών

Η βασική απαρίθμηση χρηστών είναι μια τεχνική που χρησιμοποιείται για να ανακτήσει πληροφορίες σχετικά με τους χρήστες που υπάρχουν σε ένα σύστημα Elasticsearch. Αυτή η τεχνική μπορεί να βοηθήσει έναν εισβολέα να ανακαλύψει πιθανά ονόματα χρηστών και να προσπαθήσει να εκμεταλλευτεί τυχόν αδυναμίες στην αυθεντικοποίηση.

Για να πραγματοποιηθεί η απαρίθμηση, μπορούν να χρησιμοποιηθούν διάφορες μέθοδοι, όπως η ανάκτηση των δημόσιων δεδομένων του Elasticsearch, η ανάλυση των αρχείων καταγραφής ή η χρήση εργαλείων απαρίθμησης χρηστών.

Είναι σημαντικό να σημειωθεί ότι η απαρίθμηση χρηστών μπορεί να θεωρηθεί ως επίθεση σε ένα σύστημα, και επομένως πρέπει να γίνεται με προσοχή και με την άδεια του νόμιμου κατόχου του συστήματος.

#List all roles on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/role"

#List all users on the system:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user"

#Get more information about the rights of an user:
curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"

Πληροφορίες για το Elastic

Εδώ υπάρχουν μερικά σημεία πρόσβασης που μπορείτε να έχετε πρόσβαση μέσω GET για να αποκτήσετε πληροφορίες για το elasticsearch:

Αυτά τα σημεία πρόσβασης προήλθαν από την τεκμηρίωση όπου μπορείτε να βρείτε περισσότερα. Επίσης, αν έχετε πρόσβαση στο /_cat, η απόκριση θα περιέχει τα σημεία πρόσβασης /_cat/* που υποστηρίζονται από την περίπτωση.

Στο /_security/user (εάν είναι ενεργοποιημένη η πιστοποίηση) μπορείτε να δείτε ποιος χρήστης έχει τον ρόλο superuser.

Δείκτες

Μπορείτε να συγκεντρώσετε όλους τους δείκτες με την πρόσβαση στο http://10.10.10.115:9200/_cat/indices?v

health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana 6tjAYZrgQ5CwwR0g6VOoRg   1   0          1            0        4kb            4kb
yellow open   quotes  ZG2D1IqkQNiNZmi2HRImnQ   5   1        253            0    262.7kb        262.7kb
yellow open   bank    eSVpNfCfREyYoVigNWcrMw   5   1       1000            0    483.2kb        483.2kb

Για να λάβετε πληροφορίες σχετικά με τον τύπο των δεδομένων που αποθηκεύονται σε ένα ευρετήριο, μπορείτε να έχετε πρόσβαση στη διεύθυνση: 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=1000asd Σημείωση: Εάν δηλώσετε μεγαλύτερο αριθμό, όλες οι καταχωρήσεις θα αντιγραφούν ούτως ή άλλως, για παράδειγμα μπορείτε να δηλώσετε 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.

Δικαιώματα εγγραφής

Μπορείτε να ελέγξετε τα δικαιώματα εγγραφής σας δοκιμάζοντας να δημιουργήσετε ένα νέο έγγραφο μέσα σε ένα νέο ευρετήριο εκτελώντας κάτι παρόμοιο με το παρακάτω:

curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
{
"bookId" : "A00-3",
"author" : "Sankaran",
"publisher" : "Mcgrahill",
"name" : "how to get a job"
}'

Αυτή η εντολή θα δημιουργήσει ένα νέο ευρετήριο με το όνομα bookindex με ένα έγγραφο τύπου books που έχει τα χαρακτηριστικά "bookId", "author", "publisher" και "name"

Παρατηρήστε πώς το νέο ευρετήριο εμφανίζεται τώρα στη λίστα:

Και παρατηρήστε τις αυτόματα δημιουργημένες ιδιότητες:

Αυτόματη Αρίθμηση

Ορισμένα εργαλεία θα αποκτήσουν μερικά από τα προηγούμενα παρουσιαζόμενα δεδομένα:

msf > use auxiliary/scanner/elasticsearch/indices_enum

Shodan

  • port:9200 elasticsearch

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated