11211 - Pentesting Memcache

Reading time: 8 minutes

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks

Protocol Inligting

From wikipedia:

Memcached (uitspraak: mem-cashed, mem-cash-dee) is 'n algemene verspreide geheue-kas stelsel. Dit word dikwels gebruik om dinamiese databasis-gedrewe webwerwe te versnel deur data en voorwerpe in RAM te kas om die aantal kere te verminder wat 'n eksterne databron (soos 'n databasis of API) gelees moet word.

Alhoewel Memcached SASL ondersteun, is die meeste instansies blootgestel sonder outentisering.

Standaard poort: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Enumerasie

Handmatig

Om al die inligting wat in 'n memcache-instantie gestoor is, te exfiltreer, moet jy:

  1. Slabs met aktiewe items vind
  2. Die sleutelname van die voorheen opgespoor slabs kry
  3. Die gestoor data exfiltreer deur die sleutelname te verkry

Onthou dat hierdie diens net 'n cache is, so data mag verskyn en verdwyn.

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

Manual2

bash
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)

Outomaties

bash
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 Sleutels

In die wêreld van memcache, 'n protokol wat help om data volgens slabs te organiseer, bestaan daar spesifieke opdragte om die gestoor data te inspekteer, alhoewel met noemenswaardige beperkings:

  1. Sleutels kan slegs volgens slab klas gedump word, wat sleutels van soortgelyke inhoudsgrootte groepeer.
  2. 'n Beperking bestaan van een bladsy per slab klas, wat gelyk is aan 1MB data.
  3. Hierdie funksie is nie amptelik nie en kan te eniger tyd gestaak word, soos bespreek in community forums.

Die beperking om slegs 1MB van potensieel gigabytes data te dump, is veral betekenisvol. Tog kan hierdie funksionaliteit steeds insigte bied in sleutels gebruikspatrone, afhangende van spesifieke behoeftes. Vir diegene wat minder geïnteresseerd is in die meganika, 'n besoek aan die tools section onthul nutsmiddels vir omvattende dumping. Alternatiewelik, die proses om telnet te gebruik vir direkte interaksie met memcached opstellings word hieronder uiteengesit.

Hoe Dit Werk

Memcache se geheue-organisasie is van kardinale belang. Om memcache met die "-vv" opsie te begin, onthul die slab klasse wat dit genereer, soos hieronder getoon:

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

Om al die huidige slabs te vertoon, word die volgende opdrag gebruik:

bash
stats slabs

Die toevoeging van 'n enkele sleutel aan memcached 1.4.13 illustreer hoe slab klasse bevolk en bestuur word. Byvoorbeeld:

bash
set mykey 0 60 1
1
STORED

Die uitvoering van die "stats slabs" opdrag na sleutel toevoeging lewer gedetailleerde statistieke oor slab benutting:

bash
stats slabs
[...]

Hierdie uitvoer onthul die aktiewe slab tipe, gebruikte stukke, en operasionele statistieke, wat insigte bied in die doeltreffendheid van lees- en skryfoperasies.

'n Ander nuttige opdrag, "stats items", bied data oor ontruimings, geheuebeperkings, en itemlewe siklusse:

bash
stats items
[...]

Hierdie statistieke stel in staat om ingeligte aannames te maak oor toepassingskasgedrag, insluitend kasdoeltreffendheid vir verskillende inhoudgroottes, geheue-toewysing, en kapasiteit om groot voorwerpe te kas.

Dumping Keys

Vir weergawes voor 1.4.31, word sleutels volgens slab klas gedump deur:

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

Byvoorbeeld, om 'n sleutel in klas #1 te dump:

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

Hierdie metode herhaal slab klasse, wat sleutelwaardes onttrek en opsioneel dump.

DUMP VAN MEMCACHE SLEUTELS (VER 1.4.31+)

Met memcache weergawe 1.4.31 en hoër, is 'n nuwe, veiliger metode vir die dump van sleutels in 'n produksie-omgewing bekendgestel, wat nie-blokkerende modus gebruik soos in die release notes beskryf. Hierdie benadering genereer uitgebreide uitvoer, daarom die aanbeveling om die 'nc' opdrag vir doeltreffendheid te gebruik. Voorbeelde sluit in:

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

Programming LanguagesToolsFunctionality
PHPsimple scriptDruk sleutelname.
Perlsimple scriptDruk sleutels en waardes
Rubysimple scriptDruk sleutelname.
PerlmemdumpGereedskap in CPAN moduleMemcached-libmemcachedached/)
PHPmemcache.phpMemcache Monitering GUI wat ook toelaat om sleutels te dump
libmemcachedpeepBevries jou memcached proses!!! Wees versigtig wanneer jy dit in produksie gebruik. Deur dit steeds te gebruik kan jy die 1MB beperking omseil en regtig alle sleutels dump.

Troubleshooting

1MB Data Limit

Let daarop dat voor memcached 1.4 jy nie voorwerpe groter as 1MB kan stoor nie weens die standaard maksimum slab grootte.

Never Set a Timeout > 30 Days!

As jy probeer om 'n sleutel met 'n timeout groter as die toegelate maksimum te “stel” of “toe te voeg”, mag jy nie kry wat jy verwag nie, omdat memcached dan die waarde as 'n Unix tydstempel behandel. Ook, as die tydstempel in die verlede is, sal dit glad nie iets doen nie. Jou opdrag sal stilweg misluk.

So as jy die maksimum leeftyd wil gebruik, spesifiseer 2592000. Voorbeeld:

set my_key 0 2592000 1
1

Verdwynende Sleutels op Oorloop

Ten spyte van die dokumentasie wat iets sê oor die omhulsel van 64bit wat 'n waarde oorgooi, veroorsaak die gebruik van “incr” dat die waarde verdwyn. Dit moet weer geskep word met “add”/”set”.

Replikaasje

memcached self ondersteun nie replikaasie nie. As jy dit regtig nodig het, moet jy 3departy-oplossings gebruik:

  • repcached: Multi-master asynchrone replikaasie (memcached 1.2 patch stel)
  • Couchbase memcached interface: Gebruik CouchBase as memcached drop-in
  • yrmcds: memcached-compatibele Meester-Slaaf sleutelwaarde winkel
  • twemproxy (ook bekend as nutcracker): proxy met memcached ondersteuning

Opdrag Cheat-Sheet

Memcache Commands

Shodan

  • port:11211 "STAT pid"
  • "STAT pid"

Verwysings

tip

Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Leer en oefen Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Ondersteun HackTricks