mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-22 19:13:39 +00:00
282 lines
16 KiB
Markdown
282 lines
16 KiB
Markdown
## Commandes Memcache
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
|
|
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|
|
|
|
## Feuille de triche des commandes
|
|
|
|
**De** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)\*\*\*\*
|
|
|
|
Les commandes prises en charge (officielles et non officielles) sont documentées dans le document [doc/protocol.txt](https://github.com/memcached/memcached/blob/master/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](https://github.com/memcached/memcached) (au 19.08.2016) :
|
|
|
|
| Commande | Description | Exemple |
|
|
| --------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| get | Lit une valeur | `get mykey` |
|
|
| set | Définit une clé sans condition | <p><code>set mykey <flags> <ttl> <size></code><br><br><p>Assurez-vous d'utiliser \r\n comme sauts de ligne lorsque vous utilisez des outils CLI Unix. Par exemple</p> <code>printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211</code></p> |
|
|
| 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 <a href="#traffic-statistics" id="traffic-statistics"></a>
|
|
|
|
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 <a href="#memory-statistics" id="memory-statistics"></a>
|
|
|
|
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? <a href="#which-keys-are-used" id="which-keys-are-used"></a>
|
|
|
|
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](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html).
|