.. | ||
memcache-commands.md | ||
README.md |
11211 - Test d'intrusion Memcache
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks:
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud dépôts GitHub.
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 basés sur des bases 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
PORT STATE SERVICE
11211/tcp open unknown
Énumération
Manuel
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.
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
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 à partir de 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 l'extraction complète. Alternativement, le processus d'utilisation de telnet pour interagir directement 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 :
$ memcached -vv
slab class 1: chunk size 96 perslab 10922
[...]
Pour afficher toutes les dalles actuellement existantes, la commande suivante est utilisée :
stats slabs
Ajouter une clé unique à 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
Exécuter la commande "stats slabs" après l'ajout de clés fournit des statistiques détaillées sur l'utilisation des slab :
stats slabs
[...]
Cet affichage 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
[...]
Extraction des clés
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 vider 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 é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 :
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
Tableau à partir d'ici.
Langages de programmation | Outils | Fonctionnalité | ||
---|---|---|---|---|
PHP | script simple | Affiche les noms des clés. | ||
Perl | script simple | Affiche les clés et les valeurs. | ||
Ruby | script simple | Affiche les noms des clés. | ||
Perl | memdump | Outil dans le module CPAN. | Memcached-libmemcached | ached/) |
PHP | memcache.php | Interface graphique de surveillance de Memcache qui permet également de faire des dumps de clés. | ||
libmemcached | peep | 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 déverser 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 de slab maximale 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 passera 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
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 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 clés-valeurs maître-esclave compatible avec memcached
- twemproxy (alias nutcracker) : proxy avec support memcached
Feuille de Triche des Commandes
{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}
Shodan
port:11211 "STAT pid"
"STAT pid"
Références
Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en Équipe Rouge AWS de HackTricks)!
Autres façons de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT !
- Obtenez le swag officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection exclusive de NFTs
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux HackTricks et HackTricks Cloud github repos.