11211 - Pentesting Memcache
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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
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.
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.
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:
Para mostrar todos los slabs existentes actualmente, se utiliza el siguiente comando:
Agregar una sola clave a memcached 1.4.13 ilustra cómo se poblan y gestionan las clases de slab. Por ejemplo:
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:
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:
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.
Para versiones anteriores a 1.4.31, las claves se vierten por clase de slab usando:
Por ejemplo, para volcar una clave en la clase #1:
Este método itera sobre las clases de slab, extrayendo y opcionalmente volcando valores clave.
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:
Tabla desde aquí.
Lenguajes de Programación | Herramientas | Funcionalidad | ||
---|---|---|---|---|
PHP | Imprime nombres de claves. | |||
Perl | Imprime claves y valores | |||
Ruby | Imprime nombres de claves. | |||
Perl | Herramienta en el módulo CPAN | ached/) | ||
PHP | Interfaz gráfica de monitoreo de Memcache que también permite volcar claves | |||
libmemcached | ¡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. |
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.
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:
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”.
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
port:11211 "STAT pid"
"STAT pid"
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)