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)
Da wikipedia:
Memcached (pronuncia: mem-cashed, mem-cash-dee) è un sistema di memoria cache distribuito di uso generale. Viene spesso utilizzato per accelerare siti web dinamici basati su database memorizzando dati e oggetti nella RAM per ridurre il numero di volte in cui una fonte di dati esterna (come un database o un'API) deve essere letta.
Sebbene Memcached supporti SASL, la maggior parte delle istanze è esposta senza autenticazione.
Porta predefinita: 11211
Per estrarre tutte le informazioni salvate all'interno di un'istanza memcache è necessario:
Trovare slabs con elementi attivi
Ottenere i nomi delle chiavi degli slabs rilevati in precedenza
Estrarre i dati salvati ottenendo i nomi delle chiavi
Ricorda che questo servizio è solo una cache, quindi i dati possono apparire e scomparire.
Nel campo del memcache, un protocollo che aiuta a organizzare i dati per slab, esistono comandi specifici per ispezionare i dati memorizzati, sebbene con notevoli vincoli:
Le chiavi possono essere estratte solo per classe di slab, raggruppando chiavi di dimensioni di contenuto simile.
Esiste un limite di una pagina per classe di slab, equivalente a 1MB di dati.
Questa funzionalità è non ufficiale e potrebbe essere interrotta in qualsiasi momento, come discusso nei forum della comunità.
Il limite di poter estrarre solo 1MB da potenzialmente gigabyte di dati è particolarmente significativo. Tuttavia, questa funzionalità può comunque offrire spunti sui modelli di utilizzo delle chiavi, a seconda delle esigenze specifiche. Per coloro che sono meno interessati alla meccanica, una visita alla sezione strumenti rivela utilità per un dumping completo. In alternativa, il processo di utilizzo di telnet per l'interazione diretta con le configurazioni di memcached è descritto di seguito.
L'organizzazione della memoria di Memcache è fondamentale. Iniziare memcache con l'opzione "-vv" rivela le classi di slab che genera, come mostrato di seguito:
Per visualizzare tutti i blocchi attualmente esistenti, viene utilizzato il seguente comando:
Aggiungere una singola chiave a memcached 1.4.13 illustra come le classi slab vengono popolate e gestite. Ad esempio:
Eseguire il comando "stats slabs" dopo l'aggiunta della chiave fornisce statistiche dettagliate sull'utilizzo delle lastre:
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 espulsioni, vincoli di memoria e cicli di vita degli oggetti:
Queste statistiche consentono di fare assunzioni 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 oggetti di grandi dimensioni.
Per le versioni precedenti alla 1.4.31, le chiavi vengono estratte per classe di slab utilizzando:
Ad esempio, per estrarre una chiave nella classe #1:
Questo metodo itera sulle classi di slab, estraendo e, facoltativamente, dumpando i valori delle chiavi.
Con la versione di memcache 1.4.31 e successive, viene introdotto un nuovo metodo più sicuro per dumpare le chiavi in un ambiente di produzione, utilizzando la modalità non bloccante come dettagliato nelle note di rilascio. Questo approccio genera un output esteso, quindi si raccomanda di utilizzare il comando 'nc' per efficienza. Gli esempi includono:
Table from here.
libmemcached
Congela il tuo processo memcached!!! Fai attenzione quando lo usi in produzione. Usandolo puoi aggirare il limite di 1MB e scaricare davvero tutte le chiavi.
Nota che prima di memcached 1.4 non puoi memorizzare oggetti più grandi di 1MB a causa della dimensione massima di slab predefinita.
Se provi a “impostare” o “aggiungere” 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 la durata massima, specifica 2592000. Esempio:
Nonostante la documentazione dica qualcosa riguardo al wrapping attorno a 64bit, il sovraccarico di un valore usando “incr” causa la scomparsa del valore. Deve essere creato di nuovo usando “add”/”set”.
memcached stesso non supporta la replicazione. Se ne hai davvero bisogno, devi utilizzare soluzioni di terze parti:
repcached: Replicazione multi-master asincrona (set di patch memcached 1.2)
Couchbase memcached interface: Usa CouchBase come drop-in per memcached
yrmcds: store di chiavi e valori compatibile con memcached Master-Slave
twemproxy (noto anche come nutcracker): proxy con supporto per memcached
port:11211 "STAT pid"
"STAT pid"
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)