11211 - Pentesting Memcache
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
Protocol Information
From wikipedia:
Memcached (pronuncia: mem-cashed, mem-cash-dee) è un sistema di memoria caching 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
PORT STATE SERVICE
11211/tcp open unknown
Enumerazione
Manuale
Per estrarre tutte le informazioni salvate allâinterno di unâistanza di 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.
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
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
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
Nel campo di memcache, un protocollo che assiste nellâorganizzazione dei dati per slab, esistono comandi specifici per ispezionare i dati memorizzati, sebbene con notevoli vincoli:
- Le chiavi possono essere scaricate 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 scaricare solo 1MB da potenzialmente gigabyte di dati è particolarmente significativo. Tuttavia, questa funzionalitĂ può comunque offrire intuizioni 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.
How it Works
Lâorganizzazione della memoria di Memcache è fondamentale. Iniziare 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 tutti i slab attualmente esistenti, viene utilizzato il seguente comando:
stats slabs
Aggiungere una singola chiave a memcached 1.4.13 illustra come le classi slab vengono popolate e gestite. Ad esempio:
set mykey 0 60 1
1
STORED
Eseguire il comando âstats slabsâ dopo lâaggiunta della chiave fornisce statistiche dettagliate sullâutilizzo delle lastre:
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 espulsioni, vincoli di memoria e cicli di vita degli oggetti:
stats items
[...]
Queste statistiche consentono di fare assunzioni informate sul comportamento della cache delle applicazioni, inclusa lâefficienza della cache per diverse dimensioni dei contenuti, lâallocazione della memoria e la capacitĂ di memorizzare oggetti di grandi dimensioni.
Dumping Keys
Per le versioni precedenti alla 1.4.31, le chiavi vengono estratte per classe di slab utilizzando:
stats cachedump <slab class> <number of items to dump>
Ad esempio, per estrarre una chiave nella classe #1:
stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END
Questo metodo itera sulle classi di slab, estraendo e, facoltativamente, dumpando i valori delle chiavi.
DUMPING MEMCACHE KEYS (VER 1.4.31+)
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 release notes. Questo approccio genera un output esteso, quindi si raccomanda di utilizzare il comando âncâ per 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
DUMPING TOOLS
Table from here.
| Linguaggi di programmazione | Strumenti | FunzionalitĂ | ||
|---|---|---|---|---|
| PHP | simple script | Stampa i nomi delle chiavi. | ||
| Perl | simple script | Stampa chiavi e valori | ||
| Ruby | simple script | Stampa i nomi delle chiavi. | ||
| Perl | memdump | Strumento nel modulo CPAN | Memcached-libmemcached | ached/) |
| PHP | memcache.php | GUI di monitoraggio Memcache che consente anche di scaricare le chiavi | ||
| libmemcached | peep | 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. |
Troubleshooting
Limite di dati di 1MB
Nota che prima di memcached 1.4 non puoi memorizzare oggetti piĂš grandi di 1MB a causa della dimensione massima di slab predefinita.
Non impostare mai un timeout > 30 giorni!
Se provi a âimpostareâ o âaggiungereâ una chiave con un timeout maggiore di quello 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:
set my_key 0 2592000 1
1
Disappearing Keys on Overflow
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â.
Replication
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
Commands Cheat-Sheet
Shodan
port:11211 "STAT pid""STAT pid"
References
Tip
Impara e pratica il hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Impara e pratica il hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al đŹ gruppo Discord o al gruppo telegram o seguici su Twitter đŚ @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos github.
HackTricks

