.. | ||
memcache-commands.md | ||
README.md |
11211 - Pentesting Memcache
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Protocol Information
From wikipedia:
Memcached (pronunciación: mem-cashed, mem-cash-dee) es un sistema de caché de memoria distribuido de propósito general. A menudo se utiliza para acelerar sitios web dinámicos impulsados por bases de datos al almacenar en caché datos y objetos en RAM para reducir la cantidad de veces que se debe leer una fuente de datos externa (como una base de datos o API).
Aunque Memcached admite SASL, la mayoría de las instancias están expuestas sin autenticación.
Puerto por defecto: 11211
PORT STATE SERVICE
11211/tcp open unknown
Enumeración
Manual
Para exfiltrar toda la información guardada dentro de una instancia de memcache, necesitas:
- Encontrar slabs con elementos activos
- Obtener los nombres de las claves de los slabs detectados anteriormente
- Exfiltrar los datos guardados obteniendo los nombres de las claves
Recuerda que este servicio es solo un cache, por lo que los datos pueden aparecer y desaparecer.
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() );'
Manual2
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)
Automático
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
Dumping Memcache Keys
En el ámbito de memcache, un protocolo que ayuda a organizar datos por slabs, existen comandos específicos para inspeccionar los datos almacenados, aunque con notables limitaciones:
- Las claves solo se pueden volcar por clase de slab, agrupando claves de tamaño de contenido similar.
- Existe un límite de una página por clase de slab, equivalente a 1MB de datos.
- Esta función es no oficial y puede ser descontinuada en cualquier momento, como se discute en foros comunitarios.
La limitación de poder volcar solo 1MB de potencialmente gigabytes de datos es particularmente significativa. Sin embargo, esta funcionalidad aún puede ofrecer información sobre los patrones de uso de claves, dependiendo de las necesidades específicas. Para aquellos menos interesados en la mecánica, una visita a la sección de herramientas revela utilidades para un volcado completo. Alternativamente, el proceso de usar telnet para la interacción directa con configuraciones de memcached se describe a continuación.
How it Works
La organización de la memoria de Memcache es fundamental. Iniciar memcache con la opción "-vv" revela las clases de slab que genera, como se muestra a continuación:
$ memcached -vv
slab class 1: chunk size 96 perslab 10922
[...]
Para mostrar todos los slabs existentes actualmente, se utiliza el siguiente comando:
stats slabs
Agregar una sola clave a memcached 1.4.13 ilustra cómo se poblan y gestionan las clases de slab. Por ejemplo:
set mykey 0 60 1
1
STORED
Ejecutar el comando "stats slabs" después de la adición de la clave produce estadísticas detalladas sobre la utilización de los slabs:
stats slabs
[...]
Este resultado revela los tipos de slab activos, los chunks utilizados y las estadísticas operativas, ofreciendo información sobre la eficiencia de las operaciones de lectura y escritura.
Otro comando útil, "stats items", proporciona datos sobre desalojos, restricciones de memoria y ciclos de vida de los elementos:
stats items
[...]
Estas estadísticas permiten hacer suposiciones fundamentadas sobre el comportamiento de caché de la aplicación, incluida la eficiencia de la caché para diferentes tamaños de contenido, la asignación de memoria y la capacidad para almacenar en caché objetos grandes.
Volcando Claves
Para versiones anteriores a 1.4.31, las claves se vierten por clase de slab usando:
stats cachedump <slab class> <number of items to dump>
Por ejemplo, para volcar una clave en la clase #1:
stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END
Este método itera sobre las clases de slab, extrayendo y opcionalmente volcando valores clave.
VOLCANDO CLAVES DE MEMCACHE (VER 1.4.31+)
Con la versión de memcache 1.4.31 y superiores, se introduce un nuevo método más seguro para volcar claves en un entorno de producción, utilizando el modo no bloqueante como se detalla en las notas de la versión. Este enfoque genera una salida extensa, de ahí la recomendación de emplear el comando 'nc' para mayor eficiencia. Los ejemplos incluyen:
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
HERRAMIENTAS DE DUMPING
Tabla desde aquí.
Lenguajes de Programación | Herramientas | Funcionalidad | ||
---|---|---|---|---|
PHP | script simple | Imprime nombres de claves. | ||
Perl | script simple | Imprime claves y valores | ||
Ruby | script simple | Imprime nombres de claves. | ||
Perl | memdump | Herramienta en el módulo CPAN | Memcached-libmemcached | ached/) |
PHP | memcache.php | Interfaz gráfica de monitoreo de Memcache que también permite volcar claves | ||
libmemcached | peep | ¡Congela tu proceso de memcached! Ten cuidado al usar esto en producción. Aún así, puedes sortear la limitación de 1MB y realmente volcar todas las claves. |
Solución de Problemas
Límite de Datos de 1MB
Ten en cuenta que antes de memcached 1.4 no puedes almacenar objetos más grandes de 1MB debido al tamaño máximo de slab predeterminado.
¡Nunca Establezcas un Tiempo de Espera > 30 Días!
Si intentas “establecer” o “agregar” una clave con un tiempo de espera mayor que el máximo permitido, es posible que no obtengas lo que esperas porque memcached trata el valor como una marca de tiempo de Unix. Además, si la marca de tiempo está en el pasado, no hará nada en absoluto. Tu comando fallará silenciosamente.
Así que si deseas usar la vida útil máxima, especifica 2592000. Ejemplo:
set my_key 0 2592000 1
1
Claves Desaparecidas en Desbordamiento
A pesar de que la documentación dice algo sobre que el desbordamiento de un valor de 64 bits usando “incr” hace que el valor desaparezca. Necesita ser creado nuevamente usando “add”/”set”.
Replicación
memcached no soporta replicación. Si realmente lo necesitas, debes usar soluciones de terceros:
- repcached: Replicación asíncrona multi-maestro (conjunto de parches de memcached 1.2)
- Interfaz memcached de Couchbase: Usa CouchBase como reemplazo de memcached
- yrmcds: Almacenamiento de clave-valor compatible con memcached Master-Slave
- twemproxy (también conocido como nutcracker): proxy con soporte para memcached
Hoja de Trucos de Comandos
{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}
Shodan
port:11211 "STAT pid"
"STAT pid"
Referencias
{% hint style="success" %}
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los repositorios de HackTricks y HackTricks Cloud.