11211 - Pentesting Memcache
Informations sur le protocole
D'après Wikipédia:
Memcached (prononciation : mem-cached, mem-cash-dee) est un système de mise en cache de mémoire distribuée à usage général. Il est souvent utilisé pour accélérer les sites Web dynamiques pilotés par une base de données en mettant en cache des données et des objets en RAM pour réduire le nombre de fois où 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
Énumération
Manuelle
Pour exfiltrer toutes les informations enregistrées à l'intérieur d'une instance memcache, vous devez :
Trouver les 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é
Rappelez-vous que ce service est juste un cache, donc les données peuvent apparaître et disparaître.
Manuel2
Automatique
Extraction des clés Memcache
Dans le domaine de memcache, un protocole qui aide à organiser les données par tranches, des commandes spécifiques existent pour inspecter les données stockées, bien que avec des contraintes notables :
Les clés ne peuvent être extraites que par classe de tranche, regroupant les clés de taille de contenu similaire.
Il existe une limite d'une page par classe de tranche, équivalant à 1 Mo de données.
Cette fonctionnalité est non officielle et peut être interrompue à tout moment, comme discuté dans les forums communautaires.
La limitation de ne pouvoir extraire que 1 Mo parmi potentiellement des gigaoctets de données est particulièrement significative. Cependant, cette fonctionnalité peut toujours offrir des informations sur les schémas d'utilisation des clés, en fonction des besoins spécifiques. Pour ceux qui sont moins intéressés par les mécanismes, une visite de la section des outils révèle des utilitaires pour une extraction complète. Alternativement, le processus d'utilisation de telnet pour une interaction directe avec les configurations memcached est décrit ci-dessous.
Comment ça Marche
L'organisation de la mémoire de Memcache est cruciale. L'initialisation de memcache avec l'option "-vv" révèle les classes de tranches qu'il génère, comme illustré ci-dessous :
Pour afficher toutes les dalles actuellement existantes, la commande suivante est utilisée :
Ajouter une clé unique à memcached 1.4.13 illustre comment les classes de slab sont peuplées et gérées. Par exemple:
Exécuter la commande "stats slabs" après l'ajout de clés fournit des statistiques détaillées sur l'utilisation des slab :
Cet output 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 :
Extraction des clés
Pour les versions antérieures à 1.4.31, les clés sont extraites par classe de slab en utilisant :
Par exemple, pour vider une clé dans la classe #1 :
Cette méthode itère sur les classes de slab, extrayant et éventuellement déversant les valeurs des clés.
EXTRACTION DES CLÉS MEMCACHE (VER 1.4.31+)
Avec la version de memcache 1.4.31 et supérieure, une nouvelle méthode plus sûre pour extraire les clés dans un environnement de production est introduite, en 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 :
OUTILS DE DUMPING
Tableau à partir d'ici.
PHP
Interface graphique de surveillance de Memcache qui permet également de vider les clés
libmemcached
Gèle votre processus memcached !!! Soyez prudent lors de son utilisation en production. En l'utilisant, vous pouvez contourner la limitation de 1 Mo et vraiment vider 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 Définissez Jamais un Délai > 30 Jours !
Si vous essayez de "définir" ou "ajouter" une clé avec un délai supérieur au maximum autorisé, vous pourriez ne pas obtenir le résultat attendu car memcached traitera alors la valeur comme un horodatage Unix. De plus, si l'horodatage est dans le passé, rien ne se produira du tout. Votre commande échouera silencieusement.
Donc, si vous voulez utiliser la durée de vie maximale, spécifiez 2592000. Exemple :
Clés Disparaissant en Cas de Dépassement
Malgré la documentation indiquant quelque chose à propos du dépassement de 64 bits, une valeur dépassement en utilisant "incr" fait disparaître la valeur. Il faut la recréer en utilisant "add"/"set" à nouveau.
Réplication
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 asynchrone multi-maître (ensemble de correctifs memcached 1.2)
Interface memcached de Couchbase : Utilisez CouchBase comme remplacement de memcached
yrmcds : Magasin de valeurs clés maître-esclave compatible avec memcached
twemproxy (alias nutcracker) : proxy avec support memcached
Feuille de Triche des Commandes
Memcache CommandsShodan
port:11211 "STAT pid"
"STAT pid"
Références
Last updated