hacktricks/network-services-pentesting/11211-memcache/memcache-commands.md
2023-06-03 13:10:46 +00:00

16 KiB

Commandes Memcache

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Feuille de triche des commandes

De https://lzone.de/cheat-sheet/memcached****

Les commandes prises en charge (officielles et non officielles) sont documentées dans le document doc/protocol.txt.

Malheureusement, la description de la syntaxe n'est pas vraiment claire et une simple commande d'aide listant les commandes existantes serait bien meilleure. Voici un aperçu des commandes que vous pouvez trouver dans la source (au 19.08.2016) :

Commande Description Exemple
get Lit une valeur get mykey
set Définit une clé sans condition

set mykey <flags> <ttl> <size>

<p>Assurez-vous d'utiliser \r\n comme sauts de ligne lorsque vous utilisez des outils CLI Unix. Par exemple</p> printf "set mykey 0 60 4\r\ndata\r\n"

add Ajoute une nouvelle clé add newkey 0 60 5
replace Remplace une clé existante replace key 0 60 5
append Ajoute des données à une clé existante append key 0 60 15
prepend Ajoute des données au début d'une clé existante prepend key 0 60 15
incr Incrémente la valeur numérique de la clé donnée par un nombre donné incr mykey 2
decr Décrémente la valeur numérique de la clé donnée par un nombre donné decr mykey 5
delete Supprime une clé existante delete mykey
flush_all Invalide tous les éléments immédiatement flush_all
flush_all Invalide tous les éléments en n secondes flush_all 900
stats Affiche des statistiques générales stats
Affiche des statistiques de mémoire stats slabs
Affiche des statistiques d'allocation de niveau supérieur stats malloc
Affiche des informations sur les éléments stats items
stats detail
stats sizes
Réinitialise les compteurs de statistiques stats reset
lru_crawler metadump Dump (la plupart) des métadonnées pour (tous) les éléments dans le cache lru_crawler metadump all
version Affiche la version du serveur. version
verbosity Augmente le niveau de journalisation verbosity
quit Termine la session quit

Statistiques de trafic

Vous pouvez interroger les statistiques de trafic actuelles à l'aide de la commande

stats

Vous obtiendrez une liste qui indique le nombre de connexions, les octets entrants/sortants et bien plus encore.

Exemple de sortie :

STAT pid 14868
STAT uptime 175931
STAT time 1220540125
STAT version 1.2.2
STAT pointer_size 32
STAT rusage_user 620.299700
STAT rusage_system 1545.703017
STAT curr_items 228
STAT total_items 779
STAT bytes 15525
STAT curr_connections 92
STAT total_connections 1740
STAT connection_structures 165
STAT cmd_get 7411
STAT cmd_set 28445156
STAT get_hits 5183
STAT get_misses 2228
STAT evictions 0
STAT bytes_read 2112768087
STAT bytes_written 1000038245
STAT limit_maxbytes 52428800
STAT threads 1
END

Statistiques de mémoire

Vous pouvez interroger les statistiques de mémoire actuelles en utilisant

stats slabs

Commandes Memcache

Memcached est un système de cache distribué open source très populaire. Il est souvent utilisé pour accélérer les applications web en stockant en mémoire des données fréquemment utilisées telles que des résultats de requêtes de base de données ou des pages web générées dynamiquement.

Commandes de base

set

Stocke une valeur dans la clé spécifiée.

set <key> <flags> <exptime> <bytes> [noreply]\r\n
<value>\r\n
  • <key> : Nom de la clé à stocker.
  • <flags> : Entier optionnel qui peut être utilisé pour stocker des métadonnées sur la valeur stockée.
  • <exptime> : Temps d'expiration en secondes. Si la valeur est 0, elle ne sera jamais expirée.
  • <bytes> : Taille de la valeur en octets.
  • [noreply] : Optionnel. Si spécifié, le serveur ne renverra pas de réponse.
  • <value> : Valeur à stocker.

Exemple :

set mykey 0 60 5\r\nhello\r\n

Stocke la chaîne "hello" dans la clé "mykey" pendant 60 secondes.

get

Récupère la valeur stockée dans la clé spécifiée.

get <key>\r\n
  • <key> : Nom de la clé à récupérer.

Exemple :

get mykey\r\n

Récupère la valeur stockée dans la clé "mykey".

delete

Supprime la clé spécifiée.

delete <key> [noreply]\r\n
  • <key> : Nom de la clé à supprimer.
  • [noreply] : Optionnel. Si spécifié, le serveur ne renverra pas de réponse.

Exemple :

delete mykey\r\n

Supprime la clé "mykey".

incr et decr

Incrémente ou décrémente la valeur stockée dans la clé spécifiée.

incr <key> <value> [noreply]\r\n
decr <key> <value> [noreply]\r\n
  • <key> : Nom de la clé à incrémenter/décrémenter.
  • <value> : Valeur à incrémenter/décrémenter.
  • [noreply] : Optionnel. Si spécifié, le serveur ne renverra pas de réponse.

Exemple :

set mycounter 0 0 1\r\n0\r\n
incr mycounter 1\r\n

Stocke la valeur "0" dans la clé "mycounter", puis l'incrémente de 1.

Commandes avancées

stats

Récupère des statistiques sur le serveur.

stats\r\n

Exemple :

stats\r\n

Récupère des statistiques sur le serveur.

flush_all

Supprime toutes les clés stockées sur le serveur.

flush_all [delay] [noreply]\r\n
  • [delay] : Optionnel. Temps en secondes avant que les clés ne soient supprimées.
  • [noreply] : Optionnel. Si spécifié, le serveur ne renverra pas de réponse.

Exemple :

flush_all\r\n

Supprime toutes les clés stockées sur le serveur immédiatement.

cas

Stocke une valeur dans la clé spécifiée si elle n'a pas été modifiée depuis la dernière récupération.

cas <key> <flags> <exptime> <bytes> <cas_unique> [noreply]\r\n
<value>\r\n
  • <key> : Nom de la clé à stocker.
  • <flags> : Entier optionnel qui peut être utilisé pour stocker des métadonnées sur la valeur stockée.
  • <exptime> : Temps d'expiration en secondes. Si la valeur est 0, elle ne sera jamais expirée.
  • <bytes> : Taille de la valeur en octets.
  • <cas_unique> : Valeur unique qui identifie la dernière récupération de la clé.
  • [noreply] : Optionnel. Si spécifié, le serveur ne renverra pas de réponse.
  • <value> : Valeur à stocker.

Exemple :

get mykey\r\n
VALUE mykey 0 5 123456\r\nhello\r\n
cas mykey 0 60 5 123456\r\nworld\r\n

Récupère la valeur stockée dans la clé "mykey", puis tente de la stocker avec la valeur "world" si elle n'a pas été modifiée depuis la dernière récupération.

STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
STAT 1:total_pages 1
STAT 1:total_chunks 13107
STAT 1:used_chunks 13106
STAT 1:free_chunks 1
STAT 1:free_chunks_end 12886
STAT 2:chunk_size 100
STAT 2:chunks_per_page 10485
STAT 2:total_pages 1
STAT 2:total_chunks 10485
STAT 2:used_chunks 10484
STAT 2:free_chunks 1
STAT 2:free_chunks_end 10477
[...]
STAT active_slabs 3
STAT total_malloced 3145436
END

Si vous n'êtes pas sûr d'avoir suffisamment de mémoire pour votre instance memcached, surveillez toujours les compteurs "évictions" donnés par la commande "stats". Si vous avez suffisamment de mémoire pour l'instance, le compteur "évictions" devrait être de 0 ou du moins ne pas augmenter.

Quelles clés sont utilisées?

Il n'y a pas de fonction intégrée pour déterminer directement l'ensemble actuel de clés. Cependant, vous pouvez utiliser la

stats items

Commande pour déterminer combien de clés existent.

stats items
stats items
STAT items:1:number 220
STAT items:1:age 83095
STAT items:2:number 7
STAT items:2:age 1405
[...]
END

Cela aide au moins à voir si des clés sont utilisées. Pour extraire les noms de clés à partir d'un script PHP qui accède déjà à memcache, vous pouvez utiliser le code PHP de 100days.de.