* 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).
**Memcached** (prononciation : mem-cached, mem-cash-dee) est un système de mise en cache de mémoire distribué à 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 dans la 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. (De [wikipedia](https://en.wikipedia.org/wiki/Memcached))\
Bien que Memcached prenne en charge SASL, la plupart des instances sont **exposées sans authentification**.
Memcached est un système de mise en 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.
Cependant, si Memcached est mal configuré, il peut être utilisé pour mener des attaques DDoS massives. En effet, Memcached peut être utilisé pour amplifier le trafic en renvoyant des réponses beaucoup plus grandes que les requêtes initiales.
Memcached écoute par défaut sur le port 11211. Pour vérifier si un serveur Memcached est en cours d'exécution, vous pouvez utiliser la commande `nmap` suivante :
```
nmap -sU -p 11211 --script memcached-info <cible>
```
Si Memcached est en cours d'exécution, vous devriez voir une sortie similaire à celle-ci :
```
PORT STATE SERVICE
11211/udp open memcache
| memcached-info:
| Process ID: 1
| Uptime: 2 hours 1 min
| Server time: 2021-06-22 14:22:08
| Architecture: x86_64
| Used CPU sys: 0.000000
| Used CPU user: 0.000000
| Current connections: 1
| Total connections: 2
| Maximum connections: 1024
| TCP Port: 11211
| UDP Port: 11211
| Authenticated: no
| Threads: 4
| Forks: 1
| Reserved file descriptors: 20
| Available file descriptors: 1024
| Total bytes read: 0
| Total bytes written: 0
| Bytes read per second: 0.00
| Bytes written per second: 0.00
| Total bytes: 0
| Current bytes per connection: 0
| Maximum bytes per connection: 0
| Evictions: 0
| Reclaimed: 0
|_ Get hits: 0
```
## Attaque Memcached DDoS
Pour mener une attaque DDoS Memcached, vous devez d'abord trouver des serveurs Memcached mal configurés qui répondent aux requêtes UDP. Vous pouvez utiliser le script `memcrashed.py` pour cela :
```
python memcrashed.py <cible>
```
Le script enverra une requête UDP à tous les serveurs Memcached qu'il trouve et mesurera la taille de la réponse. Si la réponse est supérieure à 0, le serveur est vulnérable à l'attaque DDoS Memcached.
Une fois que vous avez identifié des serveurs vulnérables, vous pouvez utiliser un outil d'attaque DDoS tel que `hping3` pour envoyer des paquets UDP falsifiés à ces serveurs en utilisant l'adresse IP de la victime comme adresse source. Cela forcera les serveurs à renvoyer des réponses beaucoup plus grandes à la victime, ce qui peut entraîner une surcharge du réseau de la victime.
Pour éviter les attaques DDoS Memcached, il est important de configurer correctement les serveurs Memcached en limitant l'accès aux adresses IP autorisées et en désactivant l'écoute UDP si elle n'est pas nécessaire. Les pare-feu et les systèmes de détection d'intrusion peuvent également être utilisés pour détecter et bloquer les attaques DDoS Memcached.
Le protocole memcache fournit des [commandes](https://lzone.de/articles/memcached.htm) pour jeter un coup d'œil aux données organisées par des dalles (catégories de données d'une plage de taille donnée). Cependant, il y a certaines limitations significatives :
1. Vous ne pouvez jeter les clés que par classe de dalle (clés avec une taille de contenu approximativement similaire)
2. Vous ne pouvez jeter qu'une page par classe de dalle (1 Mo de données)
3. Il s'agit d'une fonctionnalité non officielle qui [peut être supprimée à tout moment.](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM)
La deuxième limitation est probablement la plus difficile car 1 Mo sur plusieurs gigaoctets, c'est presque rien. Cependant, cela peut être utile pour surveiller comment vous utilisez un sous-ensemble de vos clés. Mais cela peut dépendre de votre cas d'utilisation. Si vous ne vous souciez pas des détails techniques, passez directement à la [section outils](https://lzone.de/cheat-sheet/memcached#tools) pour en savoir plus sur les outils qui vous permettent de tout jeter facilement. Sinon, suivez le guide suivant et essayez les commandes [en utilisant telnet](https://lzone.de/articles/memcached.htm) contre votre configuration memcached. **Comment ça marche** Tout d'abord, vous devez savoir comment memcache organise sa mémoire. Si vous démarrez memcache avec l'option "-vv", vous verrez les classes de dalle qu'il crée. Par exemple
Dans la configuration imprimée ci-dessus, memcache conservera 6898 morceaux de données entre 121 et 152 octets dans une seule dalle de 1 Mo (6898\*152). Toutes les dalles ont une taille de 1 Mo par défaut. Utilisez la commande suivante pour imprimer toutes les dalles existantes actuellement :
L'exemple montre que nous n'avons qu'un seul type de slab actif, le #1. Notre clé, qui ne fait qu'un octet, s'adapte à la taille de chunk la plus petite possible. Les statistiques de slab montrent qu'il n'y a actuellement qu'une page de la classe de slab existante et qu'un seul chunk est utilisé. **Le plus important est qu'il montre un compteur pour chaque opération d'écriture (set, incr, decr, cas, touch) et un pour les gets. En utilisant ceux-ci, vous pouvez déterminer un taux de réussite !** Vous pouvez également récupérer un autre ensemble d'informations en utilisant "stats items" avec des compteurs intéressants concernant les évictions et les compteurs de mémoire insuffisante.
**Ce que nous pouvons deviner déjà…** En se basant sur les informations statistiques par classe de dalles, nous pouvons déjà deviner beaucoup de choses sur le comportement de l'application :
Bien sûr, pour répondre à ces questions, vous devez connaître les objets mis en cache de votre application. **Maintenant : Comment extraire les clés ?** Les clés peuvent être extraites par classe de dalles en utilisant la commande "stats cachedump".
Le "cachedump" renvoie un élément par ligne. Le premier nombre entre accolades donne la taille en octets, le second le timestamp de la création. Étant donné le nom de la clé, vous pouvez maintenant également déverser sa valeur en utilisant.
Dans la version 1.4.31 et supérieure de Memcache, il existe une nouvelle commande pour déverser les clés de mémoire en mode non-bloquant (lire https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Cette méthode est sûre à exécuter en production. La sortie n'est pas cohérente, mais suffisamment bonne pour trouver les clés, leur temps d'expiration exact (EXP) et le dernier temps d'accès (LA). En raison de la grande quantité de sortie générée, il est recommandé d'utiliser la commande « nc ». Exemples :
EXP=-1 signifie que l'élément n'expire jamais. EXP=1590718787 (ven. 29 mai 2020 02:19:47 GMT) conserve le timestamp Unix indiquant quand l'élément doit expirer. LA=1590712292 (lun. 25 mai 2020 05:55:57 GMT) conserve le timestamp Unix indiquant quand l'élément a été accédé pour la dernière fois.
| PHP | [simple script](http://snipt.org/xtP) | Imprime les noms de clés. | | |
| Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1\&modificationDate=1229693957401) | Imprime les noms et les valeurs des clés. | | |
| Ruby | [simple script](https://gist.github.com/1365005) | Imprime les noms de clés. | | |
| Perl | [memdump](https://search.cpan.org/\~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Outil dans le module CPAN | [Memcached-libmemcached](https://search.cpan.org/\~dmaki/Memcached-libmemc) | ached/) |
| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | Interface graphique de surveillance de Memcache qui permet également de vider les clés. | | |
| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Gèle votre processus memcached !!!** Soyez prudent lors de l'utilisation de cette méthode en production. En l'utilisant, vous pouvez contourner la limitation de 1 Mo et vraiment vider **toutes** les clés. | | |
Si vous essayez de "définir" ou "ajouter" une clé avec un délai d'expiration supérieur à la durée maximale autorisée, vous pourriez ne pas obtenir ce que vous attendez car memcached traite alors la valeur comme un timestamp Unix. De plus, si le timestamp est dans le passé, il ne fera rien du tout. Votre commande échouera silencieusement.
Malgré la documentation qui indique que le débordement d'une valeur de 64 bits en utilisant "incr" provoque la disparition de la valeur, il est nécessaire de la recréer en utilisant "add"/"set".
* 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 [**NFT**](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).