.. | ||
memcache-commands.md | ||
README.md |
11211 - Pentesting Memcache
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Πληροφορίες Πρωτοκόλλου
Από wikipedia:
Memcached (προφορά: mem-cashed, mem-cash-dee) είναι ένα γενικού σκοπού κατανεμημένο σύστημα προσωρινής αποθήκευσης μνήμης. Χρησιμοποιείται συχνά για να επιταχύνει δυναμικές ιστοσελίδες που βασίζονται σε βάσεις δεδομένων, αποθηκεύοντας δεδομένα και αντικείμενα στη RAM για να μειώσει τον αριθμό των φορών που πρέπει να διαβαστεί μια εξωτερική πηγή δεδομένων (όπως μια βάση δεδομένων ή API).
Αν και το Memcached υποστηρίζει SASL, οι περισσότερες περιπτώσεις είναι εκτεθειμένες χωρίς αυθεντικοποίηση.
Προεπιλεγμένη θύρα: 11211
PORT STATE SERVICE
11211/tcp open unknown
Enumeration
Manual
Για να εξάγετε όλες τις πληροφορίες που είναι αποθηκευμένες μέσα σε μια memcache instance, πρέπει να:
- Βρείτε 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
Dumping Memcache Keys
Στον τομέα του memcache, ένα πρωτόκολλο που βοηθά στην οργάνωση των δεδομένων κατά slabs, υπάρχουν συγκεκριμένες εντολές για την επιθεώρηση των αποθηκευμένων δεδομένων, αν και με σημαντικούς περιορισμούς:
- Οι κωδικοί μπορούν να αποθηκευτούν μόνο κατά slab class, ομαδοποιώντας κωδικούς παρόμοιου μεγέθους περιεχομένου.
- Υπάρχει περιορισμός μίας σελίδας ανά slab class, που ισοδυναμεί με 1MB δεδομένων.
- Αυτή η δυνατότητα είναι ανεπίσημη και μπορεί να καταργηθεί οποιαδήποτε στιγμή, όπως συζητείται σε community forums.
Ο περιορισμός του να μπορείς να αποθηκεύσεις μόνο 1MB από δυνητικά γιγαμπάτ δεδομένων είναι ιδιαίτερα σημαντικός. Ωστόσο, αυτή η λειτουργικότητα μπορεί να προσφέρει ακόμα πληροφορίες σχετικά με τα πρότυπα χρήσης κωδικών, ανάλογα με τις συγκεκριμένες ανάγκες. Για εκείνους που δεν ενδιαφέρονται τόσο για τη μηχανική, μια επίσκεψη στην tools section αποκαλύπτει εργαλεία για εκτενή αποθήκευση. Εναλλακτικά, η διαδικασία χρήσης telnet για άμεση αλληλεπίδραση με τις ρυθμίσεις memcached περιγράφεται παρακάτω.
How it Works
Η οργάνωση μνήμης του 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, εξάγοντας και προαιρετικά εκτυπώνοντας τις τιμές κλειδιών.
ΕΚΤΥΠΩΣΗ ΚΛΕΙΔΙΩΝ 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
DUMPING TOOLS
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.
Never Set a Timeout > 30 Days!
Αν προσπαθήσετε να “ορίσετε” ή “προσθέσετε” ένα κλειδί με χρονικό όριο μεγαλύτερο από το επιτρεπόμενο μέγιστο, μπορεί να μην πάρετε αυτό που περιμένετε, επειδή το memcached τότε θεωρεί την τιμή ως Unix timestamp. Επίσης, αν το timestamp είναι στο παρελθόν, δεν θα κάνει τίποτα απολύτως. Η εντολή σας θα αποτύχει σιωπηλά.
Έτσι, αν θέλετε να χρησιμοποιήσετε τη μέγιστη διάρκεια ζωής, καθορίστε 2592000. Παράδειγμα:
set my_key 0 2592000 1
1
Disappearing Keys on Overflow
Παρά το γεγονός ότι η τεκμηρίωση λέει κάτι σχετικά με την περιτύλιξη γύρω από την υπερχείλιση μιας τιμής 64bit χρησιμοποιώντας το “incr”, αυτό προκαλεί την εξαφάνιση της τιμής. Πρέπει να δημιουργηθεί ξανά χρησιμοποιώντας το “add”/”set”.
Replication
Το memcached από μόνο του δεν υποστηρίζει αναπαραγωγή. Αν το χρειάζεστε πραγματικά, πρέπει να χρησιμοποιήσετε λύσεις τρίτων:
- repcached: Πολυμάστερ ασύγχρονη αναπαραγωγή (patch set memcached 1.2)
- Couchbase memcached interface: Χρησιμοποιήστε το CouchBase ως drop-in memcached
- yrmcds: Συμβατό με memcached Master-Slave αποθήκη κλειδιών-τιμών
- twemproxy (aka nutcracker): proxy με υποστήριξη memcached
Commands Cheat-Sheet
{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}
Shodan
port:11211 "STAT pid"
"STAT pid"
References
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.