11211 - Pentesting Memcache
Reading time: 8 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
Informations sur le protocole
De wikipedia:
Memcached (prononciation : mem-cashed, mem-cash-dee) est un systĂšme de mise en cache en mĂ©moire distribuĂ© Ă usage gĂ©nĂ©ral. Il est souvent utilisĂ© pour accĂ©lĂ©rer les sites Web dynamiques basĂ©s sur des bases de donnĂ©es en mettant en cache des donnĂ©es et des objets dans la RAM pour rĂ©duire le nombre de fois qu'une source de donnĂ©es externe (comme une base de donnĂ©es ou une API) doit ĂȘtre lue.
Bien que Memcached prenne en charge SASL, la plupart des instances sont exposées sans authentification.
Port par défaut : 11211
PORT STATE SERVICE
11211/tcp open unknown
ĂnumĂ©ration
Manuel
Pour exfiltrer toutes les informations enregistrées dans une instance de memcache, vous devez :
- Trouver des slabs avec des éléments actifs
- Obtenir les noms de clé des slabs détectés précédemment
- Exfiltrer les données enregistrées en obtenant les noms de clé
N'oubliez pas que ce service n'est qu'un cache, donc les données peuvent apparaßtre et disparaßtre.
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() );'
Manuel2
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)
Automatique
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
Dans le domaine de memcache, un protocole qui aide à organiser les données par slabs, des commandes spécifiques existent pour inspecter les données stockées, bien qu'avec des contraintes notables :
- Les clĂ©s ne peuvent ĂȘtre extraites que par classe de slab, regroupant les clĂ©s de taille de contenu similaire.
- Une limite existe d'une page par classe de slab, équivalant à 1 Mo de données.
- Cette fonctionnalitĂ© est non officielle et peut ĂȘtre interrompue Ă tout moment, comme discutĂ© dans community forums.
La limitation de ne pouvoir extraire que 1 Mo de données potentiellement de plusieurs gigaoctets est particuliÚrement significative. Cependant, cette fonctionnalité peut encore offrir des aperçus sur les modÚles d'utilisation des clés, selon les besoins spécifiques. Pour ceux qui s'intéressent moins à la mécanique, une visite à la tools section révÚle des utilitaires pour un dumping complet. Alternativement, le processus d'utilisation de telnet pour une interaction directe avec les configurations memcached est décrit ci-dessous.
How it Works
L'organisation de la mémoire de Memcache est essentielle. Initier memcache avec l'option "-vv" révÚle les classes de slab qu'il génÚre, comme montré ci-dessous :
$ memcached -vv
slab class 1: chunk size 96 perslab 10922
[...]
Pour afficher tous les slabs actuellement existants, la commande suivante est utilisée :
stats slabs
Ajouter une seule clé à memcached 1.4.13 illustre comment les classes de slab sont peuplées et gérées. Par exemple :
set mykey 0 60 1
1
STORED
L'exécution de la commande "stats slabs" aprÚs l'ajout de la clé fournit des statistiques détaillées sur l'utilisation des slabs :
stats slabs
[...]
Cette sortie révÚle les types de slab actifs, les chunks utilisés et les statistiques opérationnelles, offrant des informations sur l'efficacité des opérations de lecture et d'écriture.
Une autre commande utile, "stats items", fournit des données sur les évictions, les contraintes de mémoire et les cycles de vie des éléments :
stats items
[...]
Ces statistiques permettent de faire des hypothÚses éclairées sur le comportement de mise en cache des applications, y compris l'efficacité du cache pour différentes tailles de contenu, l'allocation de mémoire et la capacité de mise en cache des grands objets.
Dumping Keys
Pour les versions antérieures à 1.4.31, les clés sont extraites par classe de slab en utilisant :
stats cachedump <slab class> <number of items to dump>
Par exemple, pour extraire une clé dans la classe #1 :
stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END
Cette méthode itÚre sur les classes de slab, extrayant et optionnellement vidant les valeurs clés.
VIDAGE DES CLĂS MEMCACHE (VER 1.4.31+)
Avec la version memcache 1.4.31 et supĂ©rieure, une nouvelle mĂ©thode plus sĂ»re pour vider les clĂ©s dans un environnement de production est introduite, utilisant le mode non-bloquant comme dĂ©taillĂ© dans les notes de version. Cette approche gĂ©nĂšre une sortie extensive, d'oĂč la recommandation d'utiliser la commande 'nc' pour plus d'efficacitĂ©. Des exemples incluent :
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
OUTILS DE DUMPING
Table from here.
Langages de programmation | Outils | Fonctionnalité | ||
---|---|---|---|---|
PHP | simple script | Imprime les noms de clés. | ||
Perl | simple script | Imprime les clés et les valeurs | ||
Ruby | simple script | Imprime les noms de clés. | ||
Perl | memdump | Outil dans le module CPAN | Memcached-libmemcached | ached/) |
PHP | memcache.php | Interface de surveillance Memcache qui permet également de dumper les clés | ||
libmemcached | peep | Fait geler votre processus memcached !!! Faites attention en l'utilisant en production. En l'utilisant, vous pouvez contourner la limitation de 1 Mo et vraiment dumper toutes les clés. |
DĂ©pannage
Limite de données de 1 Mo
Notez qu'avant memcached 1.4, vous ne pouvez pas stocker des objets de plus de 1 Mo en raison de la taille maximale de slab par défaut.
Ne jamais définir un délai d'expiration > 30 jours !
Si vous essayez de âdĂ©finirâ ou âajouterâ une clĂ© avec un dĂ©lai d'expiration supĂ©rieur au maximum autorisĂ©, vous pourriez ne pas obtenir ce que vous attendez car memcached traite alors la valeur comme un horodatage Unix. De plus, si l'horodatage est dans le passĂ©, il ne fera rien du tout. Votre commande Ă©chouera silencieusement.
Donc, si vous voulez utiliser la durée de vie maximale, spécifiez 2592000. Exemple :
set my_key 0 2592000 1
1
Disappearing Keys on Overflow
MalgrĂ© la documentation disant quelque chose sur le fait que le dĂ©bordement d'une valeur 64 bits en utilisant âincrâ fait disparaĂźtre la valeur. Elle doit ĂȘtre crĂ©Ă©e Ă nouveau en utilisant âaddâ/âsetâ.
Replication
memcached lui-mĂȘme ne prend pas en charge la rĂ©plication. Si vous en avez vraiment besoin, vous devez utiliser des solutions tierces :
- repcached: RĂ©plication multi-maĂźtre asynchrone (ensemble de correctifs memcached 1.2)
- Couchbase memcached interface: Utilisez CouchBase comme remplacement de memcached
- yrmcds: magasin de valeurs clés Master-Slave compatible memcached
- twemproxy (alias nutcracker): proxy avec support memcached
Commands Cheat-Sheet
Shodan
port:11211 "STAT pid"
"STAT pid"
References
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.