11211 - Pentesting Memcache
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)
Από wikipedia:
Memcached (προφορά: mem-cashed, mem-cash-dee) είναι ένα γενικού σκοπού κατανεμημένο σύστημα προσωρινής αποθήκευσης μνήμης. Χρησιμοποιείται συχνά για να επιταχύνει δυναμικές ιστοσελίδες που βασίζονται σε βάσεις δεδομένων, αποθηκεύοντας δεδομένα και αντικείμενα στη RAM για να μειώσει τον αριθμό των φορών που πρέπει να διαβαστεί μια εξωτερική πηγή δεδομένων (όπως μια βάση δεδομένων ή API).
Αν και το Memcached υποστηρίζει SASL, οι περισσότερες περιπτώσεις είναι εκτεθειμένες χωρίς αυθεντικοποίηση.
Προεπιλεγμένη θύρα: 11211
Για να εξάγετε όλες τις πληροφορίες που είναι αποθηκευμένες μέσα σε μια memcache instance, πρέπει να:
Βρείτε slabs με ενεργά αντικείμενα
Πάρτε τα ονόματα κλειδιών των slabs που ανιχνεύθηκαν προηγουμένως
Εξάγετε τα αποθηκευμένα δεδομένα αποκτώντας τα ονόματα κλειδιών
Θυμηθείτε ότι αυτή η υπηρεσία είναι απλώς μια cache, οπότε τα δεδομένα μπορεί να εμφανίζονται και να εξαφανίζονται.
Στον τομέα του memcache, ένα πρωτόκολλο που βοηθά στην οργάνωση των δεδομένων κατά slabs, υπάρχουν συγκεκριμένες εντολές για την επιθεώρηση των αποθηκευμένων δεδομένων, αν και με σημαντικούς περιορισμούς:
Οι κωδικοί μπορούν να αποθηκευτούν μόνο κατά slab class, ομαδοποιώντας κωδικούς παρόμοιου μεγέθους περιεχομένου.
Υπάρχει περιορισμός μίας σελίδας ανά slab class, που ισοδυναμεί με 1MB δεδομένων.
Αυτή η δυνατότητα είναι ανεπίσημη και μπορεί να καταργηθεί οποιαδήποτε στιγμή, όπως συζητείται σε community forums.
Ο περιορισμός του να μπορείς να αποθηκεύσεις μόνο 1MB από δυνητικά γιγαμπάτ δεδομένων είναι ιδιαίτερα σημαντικός. Ωστόσο, αυτή η λειτουργικότητα μπορεί να προσφέρει ακόμα πληροφορίες σχετικά με τα πρότυπα χρήσης κωδικών, ανάλογα με τις συγκεκριμένες ανάγκες. Για εκείνους που δεν ενδιαφέρονται τόσο για τη μηχανική, μια επίσκεψη στην tools section αποκαλύπτει εργαλεία για εκτενή αποθήκευση. Εναλλακτικά, η διαδικασία χρήσης telnet για άμεση αλληλεπίδραση με τις ρυθμίσεις memcached περιγράφεται παρακάτω.
Η οργάνωση μνήμης του memcache είναι καθοριστική. Ξεκινώντας το memcache με την επιλογή "-vv" αποκαλύπτει τις slab classes που δημιουργεί, όπως φαίνεται παρακάτω:
Για να εμφανίσετε όλα τα υπάρχοντα slabs, χρησιμοποιείται η εξής εντολή:
Προσθέτοντας ένα μόνο κλειδί στο memcached 1.4.13 απεικονίζει πώς οι κλάσεις slab γεμίζουν και διαχειρίζονται. Για παράδειγμα:
Εκτελώντας την εντολή "stats slabs" μετά την προσθήκη κλειδιού παρέχει λεπτομερείς στατιστικές σχετικά με τη χρησιμοποίηση των slabs:
Αυτή η έξοδος αποκαλύπτει τους ενεργούς τύπους slab, τα χρησιμοποιούμενα chunks και τις λειτουργικές στατιστικές, προσφέροντας πληροφορίες σχετικά με την αποδοτικότητα των λειτουργιών ανάγνωσης και εγγραφής.
Μια άλλη χρήσιμη εντολή, "stats items", παρέχει δεδομένα σχετικά με τις εκδιώξεις, τους περιορισμούς μνήμης και τους κύκλους ζωής των αντικειμένων:
Αυτές οι στατιστικές επιτρέπουν εκπαιδευμένες υποθέσεις σχετικά με τη συμπεριφορά της προσωρινής αποθήκευσης εφαρμογών, συμπεριλαμβανομένης της αποδοτικότητας της προσωρινής αποθήκευσης για διαφορετικά μεγέθη περιεχομένου, της κατανομής μνήμης και της ικανότητας προσωρινής αποθήκευσης μεγάλων αντικειμένων.
Για εκδόσεις πριν από την 1.4.31, τα κλειδιά αποθηκεύονται κατά κατηγορία slab χρησιμοποιώντας:
Για παράδειγμα, για να εξάγετε ένα κλειδί στην κατηγορία #1:
Αυτή η μέθοδος επαναλαμβάνει τις κλάσεις slab, εξάγοντας και προαιρετικά εκτυπώνοντας τις τιμές κλειδιών.
Με την έκδοση memcache 1.4.31 και άνω, εισάγεται μια νέα, ασφαλέστερη μέθοδος για την εκτύπωση κλειδιών σε ένα παραγωγικό περιβάλλον, χρησιμοποιώντας μη αποκλειστική λειτουργία όπως αναφέρεται στις σημειώσεις έκδοσης. Αυτή η προσέγγιση παράγει εκτενή έξοδο, γι' αυτό συνιστάται η χρήση της εντολής 'nc' για αποδοτικότητα. Παραδείγματα περιλαμβάνουν:
Table from here.
Programming Languages | Tools | Functionality | ||
---|---|---|---|---|
PHP | Εκτυπώνει τα ονόματα κλειδιών. | |||
Perl | Εκτυπώνει κλειδιά και τιμές | |||
Ruby | Εκτυπώνει τα ονόματα κλειδιών. | |||
Perl | Εργαλείο στο CPAN module | ached/) | ||
PHP | GUI παρακολούθησης Memcache που επιτρέπει επίσης την εκτύπωση κλειδιών | |||
libmemcached | Κάνει παγώσει τη διαδικασία memcached!!! Να είστε προσεκτικοί όταν το χρησιμοποιείτε σε παραγωγή. Ακόμα και αν το χρησιμοποιήσετε μπορείτε να παρακάμψετε τον περιορισμό των 1MB και να εκτυπώσετε όλα τα κλειδιά. |
Σημειώστε ότι πριν από το memcached 1.4 δεν μπορείτε να αποθηκεύσετε αντικείμενα μεγαλύτερα από 1MB λόγω του προεπιλεγμένου μέγιστου μεγέθους slab.
Αν προσπαθήσετε να “ορίσετε” ή “προσθέσετε” ένα κλειδί με χρονικό όριο μεγαλύτερο από το επιτρεπόμενο μέγιστο, μπορεί να μην πάρετε αυτό που περιμένετε, επειδή το memcached τότε θεωρεί την τιμή ως Unix timestamp. Επίσης, αν το timestamp είναι στο παρελθόν, δεν θα κάνει τίποτα απολύτως. Η εντολή σας θα αποτύχει σιωπηλά.
Έτσι, αν θέλετε να χρησιμοποιήσετε τη μέγιστη διάρκεια ζωής, καθορίστε 2592000. Παράδειγμα:
Παρά το γεγονός ότι η τεκμηρίωση λέει κάτι σχετικά με την περιτύλιξη γύρω από την υπερχείλιση μιας τιμής 64bit χρησιμοποιώντας το “incr”, αυτό προκαλεί την εξαφάνιση της τιμής. Πρέπει να δημιουργηθεί ξανά χρησιμοποιώντας το “add”/”set”.
Το memcached από μόνο του δεν υποστηρίζει αναπαραγωγή. Αν το χρειάζεστε πραγματικά, πρέπει να χρησιμοποιήσετε λύσεις τρίτων:
repcached: Πολυμάστερ ασύγχρονη αναπαραγωγή (patch set memcached 1.2)
Couchbase memcached interface: Χρησιμοποιήστε το CouchBase ως drop-in memcached
yrmcds: Συμβατό με memcached Master-Slave αποθήκη κλειδιών-τιμών
twemproxy (aka nutcracker): proxy με υποστήριξη memcached
port:11211 "STAT pid"
"STAT pid"
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)