11211 - Pentesting Memcache
Reading time: 8 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Πληροφορίες Πρωτοκόλλου
Από wikipedia:
Memcached (προφορά: mem-cashed, mem-cash-dee) είναι ένα γενικού σκοπού κατανεμημένο σύστημα προσωρινής αποθήκευσης μνήμης. Χρησιμοποιείται συχνά για να επιταχύνει δυναμικές ιστοσελίδες που βασίζονται σε βάσεις δεδομένων, αποθηκεύοντας δεδομένα και αντικείμενα στη RAM για να μειώσει τον αριθμό των φορών που πρέπει να διαβαστεί μια εξωτερική πηγή δεδομένων (όπως μια βάση δεδομένων ή API).
Αν και το Memcached υποστηρίζει SASL, οι περισσότερες περιπτώσεις είναι εκτεθειμένες χωρίς αυθεντικοποίηση.
Προεπιλεγμένη θύρα: 11211
PORT STATE SERVICE
11211/tcp open unknown
Αριθμητική
Χειροκίνητη
Για να εξάγετε όλες τις πληροφορίες που είναι αποθηκευμένες μέσα σε μια μνήμη memcache, πρέπει να:
- Βρείτε slabs με ενεργά στοιχεία
- Πάρτε τα ονόματα κλειδιών των slabs που ανιχνεύθηκαν προηγουμένως
- Εξάγετε τα αποθηκευμένα δεδομένα αποκτώντας τα ονόματα κλειδιών
Θυμηθείτε ότι αυτή η υπηρεσία είναι απλώς μια cache, οπότε τα δεδομένα μπορεί να εμφανίζονται και να εξαφανίζονται.
echo "version" | nc -vn -w 1 <IP> 11211 #Get version
echo "stats" | nc -vn -w 1 <IP> 11211 #Get status
echo "stats slabs" | nc -vn -w 1 <IP> 11211 #Get slabs
echo "stats items" | nc -vn -w 1 <IP> 11211 #Get items of slabs with info
echo "stats cachedump <number> 0" | nc -vn -w 1 <IP> 11211 #Get key names (the 0 is for unlimited output size)
echo "get <item_name>" | nc -vn -w 1 <IP> 11211 #Get saved info
#This php will just dump the keys, you need to use "get <item_name> later"
sudo apt-get install php-memcached
php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'
Manual2
sudo apt install libmemcached-tools
memcstat --servers=127.0.0.1 #Get stats
memcdump --servers=127.0.0.1 #Get all items
memccat --servers=127.0.0.1 <item1> <item2> <item3> #Get info inside the item(s)
Αυτόματη
nmap -n -sV --script memcached-info -p 11211 <IP> #Just gather info
msf > use auxiliary/gather/memcached_extractor #Extracts saved data
msf > use auxiliary/scanner/memcached/memcached_amp #Check is UDP DDoS amplification attack is possible
Εξαγωγή Κλειδιών Memcache
Στον τομέα του memcache, ένα πρωτόκολλο που βοηθά στην οργάνωση των δεδομένων κατά slabs, υπάρχουν συγκεκριμένες εντολές για την επιθεώρηση των αποθηκευμένων δεδομένων, αν και με σημαντικούς περιορισμούς:
- Τα κλειδιά μπορούν να εξάγονται μόνο κατά slab class, ομαδοποιώντας κλειδιά παρόμοιου μεγέθους περιεχομένου.
- Υπάρχει περιορισμός μίας σελίδας ανά slab class, που ισοδυναμεί με 1MB δεδομένων.
- Αυτή η δυνατότητα είναι ανεπίσημη και μπορεί να καταργηθεί οποιαδήποτε στιγμή, όπως συζητείται σε community forums.
Ο περιορισμός της εξαγωγής μόνο 1MB από δυνητικά γιγαμπάτ δεδομένων είναι ιδιαίτερα σημαντικός. Ωστόσο, αυτή η λειτουργικότητα μπορεί να προσφέρει πληροφορίες σχετικά με τα πρότυπα χρήσης κλειδιών, ανάλογα με τις συγκεκριμένες ανάγκες. Για εκείνους που δεν ενδιαφέρονται τόσο για τη μηχανική, μια επίσκεψη στην tools section αποκαλύπτει εργαλεία για εκτενή εξαγωγή. Εναλλακτικά, η διαδικασία χρήσης telnet για άμεση αλληλεπίδραση με τις ρυθμίσεις memcached περιγράφεται παρακάτω.
Πώς Λειτουργεί
Η οργάνωση μνήμης του memcache είναι καθοριστική. Η εκκίνηση του memcache με την επιλογή "-vv" αποκαλύπτει τις slab classes που δημιουργεί, όπως φαίνεται παρακάτω:
$ memcached -vv
slab class 1: chunk size 96 perslab 10922
[...]
Για να εμφανίσετε όλα τα υπάρχοντα slabs, χρησιμοποιείται η ακόλουθη εντολή:
stats slabs
Η προσθήκη ενός μόνο κλειδιού στο memcached 1.4.13 απεικονίζει πώς οι κλάσεις slab γεμίζουν και διαχειρίζονται. Για παράδειγμα:
set mykey 0 60 1
1
STORED
Η εκτέλεση της εντολής "stats slabs" μετά την προσθήκη κλειδιού αποδίδει λεπτομερείς στατιστικές σχετικά με τη χρησιμοποίηση των slabs:
stats slabs
[...]
Αυτή η έξοδος αποκαλύπτει τους ενεργούς τύπους slab, τα χρησιμοποιούμενα chunks και τις λειτουργικές στατιστικές, προσφέροντας πληροφορίες σχετικά με την αποδοτικότητα των λειτουργιών ανάγνωσης και εγγραφής.
Μια άλλη χρήσιμη εντολή, "stats items", παρέχει δεδομένα σχετικά με τις εκδιώξεις, τους περιορισμούς μνήμης και τους κύκλους ζωής των αντικειμένων:
stats items
[...]
Αυτές οι στατιστικές επιτρέπουν εκπαιδευμένες υποθέσεις σχετικά με τη συμπεριφορά της προσωρινής αποθήκευσης εφαρμογών, συμπεριλαμβανομένης της αποδοτικότητας της προσωρινής αποθήκευσης για διαφορετικά μεγέθη περιεχομένου, της κατανομής μνήμης και της ικανότητας προσωρινής αποθήκευσης μεγάλων αντικειμένων.
Dumping Keys
Για εκδόσεις πριν από την 1.4.31, τα κλειδιά αποθηκεύονται κατά κατηγορία slab χρησιμοποιώντας:
stats cachedump <slab class> <number of items to dump>
Για παράδειγμα, για να εξάγετε ένα κλειδί στην κατηγορία #1:
stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END
Αυτή η μέθοδος επαναλαμβάνει τις κλάσεις slab, εξάγοντας και προαιρετικά εκ dumping τις τιμές κλειδιών.
ΕΚΤΥΠΩΣΗ ΚΛΕΙΔΙΩΝ MEMCACHE (VER 1.4.31+)
Με την έκδοση memcache 1.4.31 και άνω, εισάγεται μια νέα, ασφαλέστερη μέθοδος για την εκτύπωση κλειδιών σε ένα παραγωγικό περιβάλλον, χρησιμοποιώντας μη αποκλειστική λειτουργία όπως αναφέρεται στις σημειώσεις έκδοσης. Αυτή η προσέγγιση παράγει εκτενή έξοδο, γι' αυτό συνιστάται η χρήση της εντολής 'nc' για αποδοτικότητα. Παραδείγματα περιλαμβάνουν:
echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | head -1
echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce13f9a24f9a28
ΕΡΓΑΛΕΙΑ ΕΞΑΓΩΓΗΣ
Table from here.
Programming Languages | Tools | Functionality | ||
---|---|---|---|---|
PHP | simple script | Εκτυπώνει τα ονόματα κλειδιών. | ||
Perl | simple script | Εκτυπώνει κλειδιά και τιμές | ||
Ruby | simple script | Εκτυπώνει τα ονόματα κλειδιών. | ||
Perl | memdump | Εργαλείο στο CPAN module | Memcached-libmemcached | ached/) |
PHP | memcache.php | GUI παρακολούθησης Memcache που επιτρέπει επίσης την εξαγωγή κλειδιών | ||
libmemcached | peep | Κάνει παγώμα της διαδικασίας memcached!!! Να είστε προσεκτικοί όταν το χρησιμοποιείτε σε παραγωγή. Παρ' όλα αυτά, μπορείτε να παρακάμψετε τον περιορισμό των 1MB και να εξάγετε όλα τα κλειδιά. |
Troubleshooting
1MB Data Limit
Σημειώστε ότι πριν από το memcached 1.4 δεν μπορείτε να αποθηκεύσετε αντικείμενα μεγαλύτερα από 1MB λόγω του προεπιλεγμένου μέγιστου μεγέθους slab.
Ποτέ μην ορίζετε χρόνο λήξης > 30 ημέρες!
Εάν προσπαθήσετε να “ορίσετε” ή “προσθέσετε” ένα κλειδί με χρόνο λήξης μεγαλύτερο από το επιτρεπόμενο μέγιστο, μπορεί να μην λάβετε αυτό που περιμένετε, επειδή το memcached τότε θεωρεί την τιμή ως χρονική σφραγίδα Unix. Επίσης, εάν η χρονική σφραγίδα είναι στο παρελθόν, δεν θα κάνει τίποτα απολύτως. Η εντολή σας θα αποτύχει σιωπηλά.
Έτσι, αν θέλετε να χρησιμοποιήσετε τη μέγιστη διάρκεια ζωής, καθορίστε 2592000. Παράδειγμα:
set my_key 0 2592000 1
1
Κλειδιά που Εξαφανίζονται σε Υπερχείλιση
Παρά το γεγονός ότι η τεκμηρίωση αναφέρει κάτι σχετικά με την περιτύλιξη γύρω από την υπερχείλιση 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
Cheat-Sheet Εντολών
Shodan
port:11211 "STAT pid"
"STAT pid"
Αναφορές
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.