hacktricks/network-services-pentesting/11211-memcache
2024-05-02 15:56:18 +00:00
..
memcache-commands.md Translated ['binary-exploitation/rop-return-oriented-programing/ret2lib/ 2024-05-02 15:56:18 +00:00
README.md Translated to Greek 2024-02-10 22:40:18 +00:00

11211 - Ελεγκτική δοκιμή Memcache

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

Άλλοι τρόποι υποστήριξης του HackTricks:

Πληροφορίες πρωτοκόλλου

Από την wikipedia:

Το Memcached (προφορά: mem-cashed, mem-cash-dee) είναι ένα γενικού σκοπού κατανεμημένο σύστημα μνήμης κρυφής. Συχνά χρησιμοποιείται για την επιτάχυνση δυναμικών ιστότοπων που χρησιμοποιούν βάσεις δεδομένων, κρατώντας δεδομένα και αντικείμενα στη RAM για να μειώσει τον αριθμό των φορών που πρέπει να διαβαστεί μια εξωτερική πηγή δεδομένων (όπως μια βάση δεδομένων ή μια API).

Αν και το Memcached υποστηρίζει το SASL, οι περισσότερες περιπτώσεις είναι εκτεθειμένες χωρίς πιστοποίηση.

Προεπιλεγμένη θύρα: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Απαρίθμηση

Χειροκίνητη

Για να αποκτήσετε όλες τις πληροφορίες που έχουν αποθηκευτεί μέσα σε ένα περιβάλλον memcache, πρέπει να:

  1. Βρείτε τα slabs με ενεργά αντικείμενα
  2. Αποκτήστε τα ονόματα κλειδιών των εντοπισμένων slabs
  3. Αποκτήστε τα αποθηκευμένα δεδομένα με την ανάκτηση των ονομάτων κλειδιών

Θυμηθείτε ότι αυτή η υπηρεσία είναι απλά ένα 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() );'

Εγχειρίδιο2

Αυτό το εγχειρίδιο περιέχει πληροφορίες σχετικά με την εκμετάλλευση του Memcache σε μια υπηρεσία δικτύου.

Εισαγωγή

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

Εκμετάλλευση του Memcache

Για να εκμεταλλευτείτε το Memcache, μπορείτε να χρησιμοποιήσετε τις παρακάτω τεχνικές:

  1. Αποκάλυψη ευαίσθητων πληροφοριών: Μπορείτε να ανακτήσετε ευαίσθητες πληροφορίες, όπως κλειδιά πρόσβασης και διαπιστευτήρια, από το Memcache.

  2. Εκτέλεση κακόβουλου κώδικα: Μπορείτε να εκτελέσετε κακόβουλο κώδικα στο Memcache, προκαλώντας ζημιά στην εφαρμογή ή αποκτώντας απομακρυσμένη πρόσβαση στο σύστημα.

Προστασία από επιθέσεις Memcache

Για να προστατευτείτε από επιθέσεις Memcache, μπορείτε να λάβετε τα παρακάτω μέτρα:

  1. Απενεργοποίηση του Memcache: Αν δεν χρησιμοποιείτε το Memcache, απενεργοποιήστε το για να μειώσετε τον κίνδυνο εκμετάλλευσης.

  2. Περιορισμός της πρόσβασης: Περιορίστε την πρόσβαση στο Memcache μόνο σε αξιόπιστους χρήστες και εφαρμογές.

  3. Ενημέρωση του Memcache: Βεβαιωθείτε ότι χρησιμοποιείτε την πιο πρόσφατη έκδοση του Memcache, η οποία περιλαμβάνει βελτιώσεις ασφαλείας.

Συμπεράσματα

Το Memcache μπορεί να είναι ένα ευπαθές σημείο στο δίκτυό σας, το οποίο μπορεί να εκμεταλλευτείται από κακόβουλους επιτιθέμενους. Είναι σημαντικό να λάβετε τα απαραίτητα μέτρα προστασίας για να αποτρέψετε τις επιθέσεις και να διατηρήσετε την ασφάλεια του δικτύου σας.

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)

Αυτόματο

Το Memcached είναι ένα αποθηκευτικό σύστημα κλειδιού-τιμής που χρησιμοποιείται συχνά για την επιτάχυνση των εφαρμογών δικτύου. Ωστόσο, αυτό το σύστημα μπορεί να εκτεθεί σε επιθέσεις αν δεν ρυθμιστεί σωστά. Αυτό το κεφάλαιο παρέχει πληροφορίες σχετικά με το πώς να εκμεταλλευτείτε το Memcached και να αποκτήσετε πρόσβαση σε ευαίσθητα δεδομένα.

Αυτόματη Εκμετάλλευση

Η αυτόματη εκμετάλλευση του Memcached περιλαμβάνει την εκμετάλλευση ευπάθειών και αδυναμιών στην υλοποίηση του συστήματος. Οι επιθέσεις μπορούν να περιλαμβάνουν την ανάκτηση ευαίσθητων δεδομένων, την εκτέλεση κακόβουλου κώδικα ή την πρόκληση αποκλεισμού υπηρεσίας.

Εκμετάλλευση Ευπάθειας Memcached

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

Εκμετάλλευση Αποκλεισμού Υπηρεσίας

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

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, υπάρχουν συγκεκριμένες εντολές για την επιθεώρηση των αποθηκευμένων δεδομένων, αν και με σημαντικούς περιορισμούς:

  1. Τα κλειδιά μπορούν να αποθηκευτούν μόνο ανά κατηγορία slab, ομαδοποιώντας τα κλειδιά με παρόμοιο μέγεθος περιεχομένου.
  2. Υπάρχει ένα όριο ενός σελιδοδείκτη ανά κατηγορία slab, που αντιστοιχεί σε 1MB δεδομένων.
  3. Αυτή η λειτουργία είναι ανεπίσημη και μπορεί να διακοπεί ανά πάσα στιγμή, όπως συζητείται στα φόρουμ της κοινότητας.

Ο περιορισμός της δυνατότητας αποθήκευσης μόνο 1MB από δυνητικά gigabytes δεδομένων είναι ιδιαίτερα σημαντικός. Ωστόσο, αυτή η λειτουργικότητα μπορεί ακόμα να προσφέρει πληροφορίες για τα πρότυπα χρήσης των κλειδιών, ανάλογα με τις συγκεκριμένες ανάγκες. Για όσους δεν ενδιαφέρονται τόσο για τη μηχανική, μια επίσκεψη στην ενότητα εργαλείων αποκαλύπτει εργαλεία για περιεκτική αποθήκευση. Εναλλακτικά, η διαδικασία χρήσης του telnet για άμεση αλληλεπίδραση με τις εγκαταστάσεις memcached περιγράφεται παρακάτω.

Πώς λειτουργεί

Η οργάνωση της μνήμης του memcache είναι καθοριστική. Η εκκίνηση του memcache με την επιλογή "-vv" αποκαλύπτει τις κατηγορίες slab που δημιουργεί, όπως φαίνεται παρακάτω:

$ 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" μετά την προσθήκη του κλειδιού παρέχει λεπτομερείς στατιστικές σχετικά με τη χρήση των slab:

stats slabs
[...]

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

Ένα άλλο χρήσιμο παράδειγμα εντολής, "stats items", παρέχει δεδομένα για αποβολές, περιορισμούς μνήμης και κύκλους ζωής αντικειμένων:

stats items
[...]

Αυτές οι στατιστικές επιτρέπουν εκπαιδευμένες υποθέσεις σχετικά με τη συμπεριφορά της κρυφής μνήμης της εφαρμογής, συμπεριλαμβανομένης της αποδοτικότητας της κρυφής μνήμης για διάφορους μεγέθη περιεχομένου, της διάθεσης μνήμης και της χωρητικότητας για την αποθήκευση μεγάλων αντικειμένων.

Απορρόφηση Κλειδιών

Για εκδόσεις προηγούμενες της 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 (Έκδοση 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

ΕΡΓΑΛΕΙΑ ΑΠΟΚΤΗΣΗΣ ΔΕΔΟΜΕΝΩΝ

Πίνακας από εδώ.

Γλώσσες Προγραμματισμού Εργαλεία Λειτουργικότητα
PHP απλό σενάριο Εκτυπώνει τα ονόματα των κλειδιών.
Perl απλό σενάριο Εκτυπώνει τα κλειδιά και τις τιμές.
Ruby απλό σενάριο Εκτυπώνει τα ονόματα των κλειδιών.
Perl memdump Εργαλείο στο CPAN module Memcached-libmemcached ached/)
PHP memcache.php Παρακολούθηση του Memcache με γραφικό περιβάλλον που επιτρέπει επίσης την απόκτηση των κλειδιών.
libmemcached peep Προσοχή! Παγώνει τη διεργασία memcached σας!!! Να είστε προσεκτικοί κατά τη χρήση του σε παραγωγικό περιβάλλον. Με αυτό μπορείτε να παρακάμψετε τον περιορισμό των 1MB και να αποκτήσετε όλα τα κλειδιά.

Αντιμετώπιση προβλημάτων

Όριο Δεδομένων 1MB

Σημειώστε ότι πριν από το memcached 1.4 δεν μπορείτε να αποθηκεύσετε αντικείμενα μεγαλύτερα από 1MB λόγω του προεπιλεγμένου μέγιστου μεγέθους slab.

Ποτέ μην ορίζετε χρονικό όριο > 30 ημέρες!

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

Έτσι, εάν θέλετε να χρησιμοποιήσετε τη μέγιστη διάρκεια ζωής, καθορίστε 2592000. Παράδειγμα:

set my_key 0 2592000 1
1

Εξαφάνιση Κλειδιών από Υπερχείλιση

Παρόλο που η τεκμηρίωση αναφέρει κάτι για την επανατοποθέτηση ενός τιμής που υπερχειλίζει τα 64bit χρησιμοποιώντας την εντολή "incr", η τιμή αυτή εξαφανίζεται. Πρέπει να δημιουργηθεί ξανά χρησιμοποιώντας τις εντολές "add" ή "set".

Αντιγραφή

Το memcached από μόνο του δεν υποστηρίζει αντιγραφή. Εάν το χρειάζεστε πραγματικά, πρέπει να χρησιμοποιήσετε λύσεις από τρίτους:

  • repcached: Πολυ-κύρια ασύγχρονη αντιγραφή (σύνολο επιδιορθώσεων memcached 1.2)
  • Couchbase memcached interface: Χρησιμοποιήστε το CouchBase ως αντικατάσταση του memcached
  • yrmcds: Συμβατή με το memcached αποθήκη κλειδιών τύπου Master-Slave
  • twemproxy (επίσης γνωστό ως nutcracker): διαμεσολαβητής με υποστήριξη memcached

Συντομογραφίες Εντολών

{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}

Shodan

  • port:11211 "STAT pid"
  • "STAT pid"

Αναφορές

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

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