5984,6984 - Pentesting CouchDB
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)
CouchDB είναι μια ευέλικτη και ισχυρή βάση δεδομένων προσανατολισμένη σε έγγραφα που οργανώνει τα δεδομένα χρησιμοποιώντας μια δομή χάρτη κλειδιού-τιμής μέσα σε κάθε έγγραφο. Τα πεδία μέσα στο έγγραφο μπορούν να αναπαριστώνται ως ζεύγη κλειδιού/τιμής, λίστες ή χάρτες, παρέχοντας ευελιξία στην αποθήκευση και ανάκτηση δεδομένων.
Κάθε έγγραφο που αποθηκεύεται στο CouchDB έχει ανατεθεί μια μοναδική ταυτότητα (_id
) σε επίπεδο εγγράφου. Επιπλέον, κάθε τροποποίηση που γίνεται και αποθηκεύεται στη βάση δεδομένων ανατίθεται έναν αριθμό αναθεώρησης (_rev
). Αυτός ο αριθμός αναθεώρησης επιτρέπει την αποτελεσματική παρακολούθηση και διαχείριση αλλαγών, διευκολύνοντας την εύκολη ανάκτηση και συγχρονισμό των δεδομένων μέσα στη βάση δεδομένων.
Προεπιλεγμένη θύρα: 5984(http), 6984(https)
Αυτό εκδίδει ένα αίτημα GET στην εγκατεστημένη έκδοση CouchDB. Η απάντηση θα πρέπει να μοιάζει κάπως με μία από τις παρακάτω:
Σημειώστε ότι αν προσπαθήσετε να αποκτήσετε πρόσβαση στη ρίζα του couchdb και λάβετε ένα 401 Unauthorized
με κάτι σαν αυτό: {"error":"unauthorized","reason":"Authentication required."}
δεν θα μπορείτε να αποκτήσετε πρόσβαση στην πινακίδα ή σε οποιοδήποτε άλλο endpoint.
Αυτά είναι τα endpoints όπου μπορείτε να αποκτήσετε πρόσβαση με ένα GET αίτημα και να εξαγάγετε κάποιες ενδιαφέρουσες πληροφορίες. Μπορείτε να βρείτε περισσότερα endpoints και πιο λεπτομερείς περιγραφές στην τεκμηρίωση του couchdb.
/_active_tasks
Λίστα τρεχουσών εργασιών, συμπεριλαμβανομένου του τύπου εργασίας, ονόματος, κατάστασης και ID διαδικασίας.
/_all_dbs
Επιστρέφει μια λίστα με όλες τις βάσεις δεδομένων στην εγκατάσταση CouchDB.
/_cluster_setup
Επιστρέφει την κατάσταση του κόμβου ή του κλάσματος, σύμφωνα με τον οδηγό ρύθμισης κλάσματος.
/_db_updates
Επιστρέφει μια λίστα με όλα τα γεγονότα βάσης δεδομένων στην εγκατάσταση CouchDB. Η ύπαρξη της βάσης δεδομένων _global_changes
είναι απαραίτητη για τη χρήση αυτού του endpoint.
/_membership
Εμφανίζει τους κόμβους που είναι μέρος του κλάσματος ως cluster_nodes
. Το πεδίο all_nodes
εμφανίζει όλους τους κόμβους που γνωρίζει αυτός ο κόμβος, συμπεριλαμβανομένων αυτών που είναι μέρος του κλάσματος.
/_scheduler/jobs
Λίστα εργασιών αναπαραγωγής. Κάθε περιγραφή εργασίας θα περιλαμβάνει πληροφορίες πηγής και προορισμού, ID αναπαραγωγής, ιστορικό πρόσφατων γεγονότων και μερικά άλλα πράγματα.
/_scheduler/docs
Λίστα καταστάσεων εγγράφων αναπαραγωγής. Περιλαμβάνει πληροφορίες σχετικά με όλα τα έγγραφα, ακόμη και σε καταστάσεις completed
και failed
. Για κάθε έγγραφο επιστρέφει το ID εγγράφου, τη βάση δεδομένων, το ID αναπαραγωγής, πηγή και προορισμό, και άλλες πληροφορίες.
/_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
Το endpoint /_node/{node-name}
μπορεί να χρησιμοποιηθεί για να επιβεβαιώσει το όνομα κόμβου Erlang του διακομιστή που επεξεργάζεται το αίτημα. Αυτό είναι πιο χρήσιμο όταν αποκτάτε πρόσβαση στο /_node/_local
για να ανακτήσετε αυτές τις πληροφορίες.
/_node/{node-name}/_stats
Ο πόρος _stats
επιστρέφει ένα αντικείμενο JSON που περιέχει τις στατιστικές για τον τρέχοντα διακομιστή. Η κυριολεκτική συμβολοσειρά _local
χρησιμεύει ως ψευδώνυμο για το τοπικό όνομα κόμβου, έτσι για όλα τα URLs στατιστικών, το {node-name}
μπορεί να αντικατασταθεί με _local
, για να αλληλεπιδράσετε με τις στατιστικές του τοπικού κόμβου.
/_node/{node-name}/_system
Ο πόρος _system επιστρέφει ένα αντικείμενο JSON που περιέχει διάφορες στατιστικές σε επίπεδο συστήματος για τον τρέχοντα διακομιστή_._ Μπορείτε να χρησιμοποιήσετε ___local
ως {node-name} για να αποκτήσετε πληροφορίες σχετικά με τον τρέχοντα κόμβο.
/_node/{node-name}/_restart
/_up
Επιβεβαιώνει ότι ο διακομιστής είναι ενεργός, λειτουργεί και έτοιμος να απαντήσει σε αιτήματα. Αν το maintenance_mode
είναι true
ή nolb
, το endpoint θα επιστρέψει μια απάντηση 404.
/_uuids
Ζητά ένα ή περισσότερους Καθολικά Μοναδικούς Αναγνωριστές (UUIDs) από την εγκατάσταση CouchDB.
/_reshard
Επιστρέφει έναν αριθμό ολοκληρωμένων, αποτυχημένων, τρεχουσών, σταματημένων και συνολικών εργασιών μαζί με την κατάσταση της ανακατανομής στο κλάσμα.
Περισσότερες ενδιαφέρουσες πληροφορίες μπορούν να εξαχθούν όπως εξηγείται εδώ: https://lzone.de/cheat-sheet/CouchDB
Αν το αίτημα απαντήσει με 401 μη εξουσιοδοτημένο, τότε χρειάζεστε έγκυρα διαπιστευτήρια για να αποκτήσετε πρόσβαση στη βάση δεδομένων:
Για να βρείτε έγκυρα Credentials, θα μπορούσατε να προσπαθήσετε να bruteforce the service.
Αυτή είναι ένα παράδειγμα μιας απάντησης couchdb όταν έχετε αρκετά δικαιώματα για να καταγράψετε τις βάσεις δεδομένων (Είναι απλώς μια λίστα με dbs):
Μπορείτε να αποκτήσετε κάποιες πληροφορίες σχετικά με τη βάση δεδομένων (όπως αριθμό αρχείων και μεγέθη) αποκτώντας πρόσβαση στο όνομα της βάσης δεδομένων:
List each entry inside a database
Διαβάστε το περιεχόμενο ενός εγγράφου μέσα σε μια βάση δεδομένων:
Χάρη στις διαφορές μεταξύ των αναλυτών JSON της Erlang και της JavaScript, μπορείτε να δημιουργήσετε έναν διαχειριστή χρήστη με διαπιστευτήρια hacktricks:hacktricks
με το ακόλουθο αίτημα:
Περισσότερες πληροφορίες σχετικά με αυτήν την ευπάθεια εδώ.
Παράδειγμα από εδώ.
Στην τεκμηρίωση του CouchDB, συγκεκριμένα στην ενότητα που αφορά τη ρύθμιση του cluster (σύνδεσμος), συζητείται η χρήση θυρών από το CouchDB σε λειτουργία cluster. Αναφέρεται ότι, όπως στη λειτουργία αυτόνομης λειτουργίας, χρησιμοποιείται η θύρα 5984
. Επιπλέον, η θύρα 5986
είναι για APIs τοπικού κόμβου, και σημαντικά, η Erlang απαιτεί την TCP θύρα 4369
για τον Erlang Port Mapper Daemon (EPMD), διευκολύνοντας την επικοινωνία κόμβων εντός ενός cluster Erlang. Αυτή η ρύθμιση σχηματίζει ένα δίκτυο όπου κάθε κόμβος είναι διασυνδεδεμένος με κάθε άλλο κόμβο.
Μια κρίσιμη συμβουλή ασφαλείας επισημαίνεται σχετικά με την θύρα 4369
. Εάν αυτή η θύρα γίνει προσβάσιμη μέσω του Διαδικτύου ή οποιουδήποτε μη αξιόπιστου δικτύου, η ασφάλεια του συστήματος εξαρτάται σε μεγάλο βαθμό από έναν μοναδικό αναγνωριστικό που ονομάζεται "cookie." Αυτό το cookie λειτουργεί ως προστατευτικό μέτρο. Για παράδειγμα, σε μια δεδομένη λίστα διαδικασιών, μπορεί να παρατηρηθεί το cookie με το όνομα "monster", υποδεικνύοντας τον λειτουργικό του ρόλο στο πλαίσιο ασφαλείας του συστήματος.
Για όσους ενδιαφέρονται να κατανοήσουν πώς μπορεί να εκμεταλλευτεί αυτό το "cookie" για Remote Code Execution (RCE) στο πλαίσιο των συστημάτων Erlang, διατίθεται μια αφιερωμένη ενότητα για περαιτέρω ανάγνωση. Περιγράφει τις μεθόδους για την εκμετάλλευση των Erlang cookies με μη εξουσιοδοτημένους τρόπους για την επίτευξη ελέγχου πάνω σε συστήματα. Μπορείτε να εξερευνήσετε τον λεπτομερή οδηγό για την κακή χρήση των Erlang cookies για RCE εδώ.
Παράδειγμα από εδώ.
Μια πρόσφατα αποκαλυφθείσα ευπάθεια, CVE-2018-8007, που επηρεάζει το Apache CouchDB, εξετάστηκε, αποκαλύπτοντας ότι η εκμετάλλευση απαιτεί δικαιώματα εγγραφής στο αρχείο local.ini
. Αν και δεν είναι άμεσα εφαρμόσιμη στο αρχικό σύστημα στόχο λόγω περιορισμών ασφαλείας, έγιναν τροποποιήσεις για να παραχωρηθούν δικαιώματα εγγραφής στο αρχείο local.ini
για σκοπούς εξερεύνησης. Λεπτομερή βήματα και παραδείγματα κώδικα παρέχονται παρακάτω, δείχνοντας τη διαδικασία.
Αρχικά, το περιβάλλον προετοιμάζεται διασφαλίζοντας ότι το αρχείο local.ini
είναι εγγράψιμο, επαληθεύεται με την καταγραφή των δικαιωμάτων:
Για να εκμεταλλευτεί την ευπάθεια, εκτελείται μια εντολή curl, στοχεύοντας τη ρύθμιση cors/origins
στο local.ini
. Αυτό εισάγει μια νέα προέλευση μαζί με επιπλέον εντολές στην ενότητα [os_daemons]
, με στόχο την εκτέλεση αυθαίρετου κώδικα:
Η επαλήθευση που ακολουθεί δείχνει την εισαγόμενη διαμόρφωση στο local.ini
, συγκρίνοντάς την με ένα αντίγραφο ασφαλείας για να επισημάνει τις αλλαγές:
Αρχικά, το αναμενόμενο αρχείο (/tmp/0xdf
) δεν υπάρχει, υποδεικνύοντας ότι η εισαγόμενη εντολή δεν έχει εκτελεστεί ακόμα. Περεταίρω έρευνα αποκαλύπτει ότι διαδικασίες σχετικές με το CouchDB εκτελούνται, συμπεριλαμβανομένης μιας που θα μπορούσε δυνητικά να εκτελέσει την εισαγόμενη εντολή:
Με την τερματισμένη διαδικασία CouchDB που έχει εντοπιστεί και επιτρέποντας στο σύστημα να την επανεκκινήσει αυτόματα, ενεργοποιείται η εκτέλεση της εισαγόμενης εντολής, επιβεβαιωμένη από την ύπαρξη του προηγουμένως απολεσθέντος αρχείου:
Αυτή η εξερεύνηση επιβεβαιώνει τη βιωσιμότητα της εκμετάλλευσης του CVE-2018-8007 υπό συγκεκριμένες συνθήκες, ιδίως την απαίτηση για εγ writable πρόσβαση στο αρχείο local.ini
. Τα παραδείγματα κώδικα και τα διαδικαστικά βήματα που παρέχονται προσφέρουν έναν σαφή οδηγό για την αναπαραγωγή της εκμετάλλευσης σε ένα ελεγχόμενο περιβάλλον.
Για περισσότερες λεπτομέρειες σχετικά με το CVE-2018-8007, ανατρέξτε στην ανακοίνωση της mdsec: CVE-2018-8007.
Παράδειγμα από εδώ.
Μια ευπάθεια γνωστή ως CVE-2017-12636 εξερευνήθηκε, η οποία επιτρέπει την εκτέλεση κώδικα μέσω της διαδικασίας CouchDB, αν και συγκεκριμένες ρυθμίσεις μπορεί να αποτρέψουν την εκμετάλλευσή της. Παρά τις πολλές αναφορές Proof of Concept (POC) που είναι διαθέσιμες online, απαιτούνται προσαρμογές για να εκμεταλλευτείτε την ευπάθεια στην έκδοση CouchDB 2, που διαφέρει από την κοινώς στοχοποιημένη έκδοση 1.x. Τα αρχικά βήματα περιλαμβάνουν την επαλήθευση της έκδοσης CouchDB και την επιβεβαίωση της απουσίας της αναμενόμενης διαδρομής των query servers:
Για να υποστηριχθεί η έκδοση 2.0 του CouchDB, χρησιμοποιείται μια νέα διαδρομή:
Οι προσπάθειες προσθήκης και εκτέλεσης ενός νέου διακομιστή ερωτήσεων συνάντησαν σφάλματα που σχετίζονται με άδειες, όπως υποδεικνύεται από την παρακάτω έξοδο:
Περαιτέρω έρευνα αποκάλυψε προβλήματα δικαιωμάτων με το local.ini
αρχείο, το οποίο δεν ήταν εγγράψιμο. Με την τροποποίηση των δικαιωμάτων του αρχείου με πρόσβαση root ή homer, κατέστη δυνατό να προχωρήσουμε:
Οι επόμενες προσπάθειες προσθήκης του query server ήταν επιτυχείς, όπως αποδεικνύεται από την απουσία μηνυμάτων σφάλματος στην απάντηση. Η επιτυχής τροποποίηση του αρχείου local.ini
επιβεβαιώθηκε μέσω σύγκρισης αρχείων:
Η διαδικασία συνεχίστηκε με τη δημιουργία μιας βάσης δεδομένων και ενός εγγράφου, ακολουθούμενη από μια προσπάθεια εκτέλεσης κώδικα μέσω μιας προσαρμοσμένης προβολής που χαρτογραφείται στον νεοαφιχθέντα διακομιστή ερωτημάτων:
A σύνοψη με μια εναλλακτική payload παρέχει περαιτέρω πληροφορίες σχετικά με την εκμετάλλευση του CVE-2017-12636 υπό συγκεκριμένες συνθήκες. Χρήσιμοι πόροι για την εκμετάλλευση αυτής της ευπάθειας περιλαμβάνουν:
port:5984 couchdb
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)