hacktricks/network-services-pentesting/11211-memcache/README.md
2024-02-11 02:07:06 +00:00

18 KiB

11211 - Pentesting Memcache

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Protokol-inligting

Van wikipedia:

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

Alhoewel Memcached SASL ondersteun, word die meeste instansies sonder outentifikasie blootgestel.

Verstekpoort: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Opstel

Handleiding

Om alle inligting wat binne 'n memcache-instantie gestoor is, uit te voer, moet jy die volgende doen:

  1. Vind slabs met aktiewe items
  2. Kry die sleutelname van die voorheen opgespoorde slabs
  3. Voer die gestoorde data uit deur die sleutelname te kry

Onthou dat hierdie diens net 'n kasgeheue is, so data kan verskyn en verdwyn.

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

Handleiding2

Memcached is een gedistribueerd geheugencachesysteem dat wordt gebruikt om de prestaties van dynamische webtoepassingen te verbeteren door veelgebruikte gegevens in het geheugen op te slaan. Het draait op poort 11211 en kan worden benaderd via het TCP-protocol.

Memcached-commando's

Hier zijn enkele veelgebruikte Memcached-commando's:

  • set: Hiermee kunt u een waarde instellen voor een specifieke sleutel.
  • get: Hiermee kunt u de waarde ophalen die is gekoppeld aan een specifieke sleutel.
  • add: Hiermee kunt u een waarde toevoegen aan een specifieke sleutel, maar alleen als de sleutel nog niet bestaat.
  • replace: Hiermee kunt u de waarde vervangen die is gekoppeld aan een specifieke sleutel, maar alleen als de sleutel al bestaat.
  • delete: Hiermee kunt u een specifieke sleutel en de bijbehorende waarde verwijderen.
  • incr: Hiermee kunt u de waarde van een specifieke sleutel met een bepaald bedrag verhogen.
  • decr: Hiermee kunt u de waarde van een specifieke sleutel met een bepaald bedrag verlagen.

Memcached-aanvallen

Memcached kan kwetsbaar zijn voor verschillende aanvallen, zoals:

  • Memcached DDoS-aanval: Een aanvaller kan een DDoS-aanval uitvoeren door een groot aantal valse verzoeken naar een Memcached-server te sturen, waardoor de server overbelast raakt en niet meer reageert op legitieme verzoeken.
  • Memcached-gegevenslek: Als een Memcached-server onjuist is geconfigureerd en toegankelijk is vanaf het internet, kan een aanvaller gevoelige gegevens uit het cachegeheugen extraheren.
  • Memcached-misbruik van onbeveiligde commando's: Een aanvaller kan onbeveiligde Memcached-commando's misbruiken om gegevens te wijzigen, te verwijderen of te stelen.

Memcached-pentesten

Bij het uitvoeren van een pentest op een Memcached-server, zijn hier enkele belangrijke stappen om te volgen:

  1. Identificeer de Memcached-server en bepaal of deze toegankelijk is vanaf het internet.
  2. Voer een poortscan uit om te controleren of poort 11211 open is.
  3. Gebruik de Memcached-commando's om gegevens te manipuleren en kwetsbaarheden te identificeren.
  4. Voer een DDoS-test uit om de veerkracht van de server te testen tegen een aanval.
  5. Controleer de configuratie van de Memcached-server om ervoor te zorgen dat deze correct is beveiligd.

Memcached-beveiligingstips

Om de beveiliging van een Memcached-server te verbeteren, kunt u de volgende maatregelen nemen:

  • Beperk de toegang tot de Memcached-server tot vertrouwde IP-adressen.
  • Schakel authenticatie in om ervoor te zorgen dat alleen geautoriseerde gebruikers toegang hebben.
  • Beveilig de communicatie met de Memcached-server door gebruik te maken van versleuteling.
  • Houd de Memcached-software up-to-date met de nieuwste patches en beveiligingsupdates.
  • Controleer regelmatig de configuratie van de Memcached-server om ervoor te zorgen dat deze correct is geconfigureerd en beveiligd.

Bronnen

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

Memcached is a widely used in-memory caching system that is often deployed in web applications to improve performance. However, misconfigurations in Memcached can lead to security vulnerabilities that can be exploited by attackers.

Memcached is a network service that listens on port 11211 by default. It uses a simple text-based protocol, making it easy to interact with using tools like telnet or netcat.

One common misconfiguration is leaving Memcached exposed to the internet without any authentication or access controls. This allows anyone to connect to the service and perform various operations, including retrieving and modifying data.

Attackers can take advantage of this misconfiguration to launch distributed denial-of-service (DDoS) attacks by sending a large number of requests to the Memcached service, overwhelming the target server's resources.

To automate the process of identifying and exploiting misconfigured Memcached instances, you can use tools like Memcrashed and DDoS-Memcached. These tools leverage the Memcached protocol to send a large number of requests to the target server, causing it to consume excessive resources and potentially crash.

It is important to note that exploiting misconfigured Memcached instances is illegal and unethical. It is recommended to only perform these actions in a controlled environment with proper authorization.

To protect against Memcached attacks, it is crucial to properly configure and secure Memcached instances. This includes enabling authentication, restricting access to trusted IP addresses, and monitoring for any suspicious activity.

By understanding the potential risks and taking appropriate security measures, you can mitigate the vulnerabilities associated with Memcached and ensure the integrity and availability of your web applications.

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 te organiseer deur middel van slabs, bestaan daar spesifieke bevele om die gestoorde data te ondersoek, alhoewel met merkbare beperkings:

  1. Sleutels kan slegs gedump word volgens slab-klas, wat sleutels van soortgelyke inhoudsgrootte groepeer.
  2. Daar is 'n limiet van een bladsy per slab-klas, wat gelykstaan aan 1MB data.
  3. Hierdie funksie is onoffisieel en kan enige tyd gestaak word, soos bespreek in gemeenskapsforums.

Die beperking om slegs 1MB te kan dump van moontlik gigabytes data is veral betekenisvol. Nietemin kan hierdie funksionaliteit steeds insig bied in sleutelgebruikspatrone, afhangende van spesifieke behoeftes. Vir diegene wat minder belangstel in die meganika, onthul 'n besoek aan die gereedskap-afdeling hulpmiddels vir omvattende dumping. Alternatiewelik word die proses om telnet te gebruik vir direkte interaksie met memcached-opsette hieronder uiteengesit.

Hoe dit Werk

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

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

Om al die tans bestaande slabs te vertoon, word die volgende bevel gebruik:

stats slabs

Die toevoeging van 'n enkele sleutel tot memcached 1.4.13 illustreer hoe slabsklasse bevolk en bestuur word. Byvoorbeeld:

set mykey 0 60 1
1
STORED

Die uitvoering van die "stats slabs" bevel na sleutel byvoeging lewer gedetailleerde statistieke oor die gebruik van slabs:

stats slabs
[...]

Hierdie uitset toon die aktiewe slabs, gebruikte stukke en operasionele statistieke, wat insig bied in die doeltreffendheid van lees- en skryfoperasies.

'n Ander nuttige bevel, "stats items", verskaf data oor verwyderings, geheuebeperkings en itemlewensiklusse:

stats items
[...]

Hierdie statistieke maak dit moontlik om opgevoede aannames te maak oor die gedrag van toepassingskaping, insluitend kapingseffektiwiteit vir verskillende inhoudsgroottes, geheue-toewysing en kapasiteit vir die kaping van groot voorwerpe.

Sleutels dump

Vir weergawes vóór 1.4.31 word sleutels gedump deur gebruik te maak van slab-klas:

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

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

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

Hierdie metode loop oor slab klasse, onttrek en opsioneel dump sleutelwaardes.

DUMPING MEMCACHE SLEUTELS (VER 1.4.31+)

Met memcache weergawe 1.4.31 en hoër, word 'n nuwe, veiliger metode vir die dump van sleutels in 'n produksie-omgewing geïntroduceer, deur gebruik te maak van nie-blokkerende modus soos beskryf in die vrystellingsnotas. Hierdie benadering genereer uitgebreide uitset, daarom word die aanbeveling gemaak om die 'nc' opdrag vir doeltreffendheid te gebruik. Voorbeelde sluit in:

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 GEREEDSKAP

Tabel van hier.

Programmeertaal Gereedskap Funksionaliteit
PHP eenvoudige skripsie Druk sleutelname.
Perl eenvoudige skripsie Druk sleutels en waardes af
Ruby eenvoudige skripsie Druk sleutelname.
Perl memdump Gereedskap in CPAN-module Memcached-libmemcached ached/)
PHP memcache.php Memcache Monitoringskerm wat ook sleutels kan dump
libmemcached peep Bevries jou memcached-proses!!! Wees versigtig wanneer jy dit in produksie gebruik. Deur dit te gebruik, kan jy die 1MB-beperking omseil en alle sleutels regtig dump.

Probleemoplossing

1MB Data Beperking

Let daarop dat voor memcached 1.4 kan jy nie voorwerpe groter as 1MB stoor nie as gevolg van die verstek maksimum slabs grootte.

Stel nooit 'n tydsbeperking > 30 dae nie!

As jy probeer om 'n sleutel met 'n tydsbeperking 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-timestamp hanteer. As die tydstempel in die verlede is, sal dit niks doen nie. Jou opdrag sal stilweg misluk.

As jy dus die maksimum leeftyd wil gebruik, spesifiseer 2592000. Voorbeeld:

set my_key 0 2592000 1
1

Verdwynende Sleutels by Oorvloei

Ten spyte van die dokumentasie wat iets sê oor die oorvloei van 'n waarde van 64-biet, veroorsaak die gebruik van "incr" dat die waarde verdwyn. Dit moet weer geskep word deur gebruik te maak van "add"/"set".

Replikasie

memcached ondersteun nie self replikasie nie. As jy dit regtig nodig het, moet jy van derde party-oplossings gebruik maak:

  • repcached: Multi-meester asynchrone replikasie (memcached 1.2-patchstel)
  • Couchbase memcached-interface: Gebruik CouchBase as 'n memcached-drop-in
  • yrmcds: memcached-kompatibele Meester-Slaaf sleutelwaardestoor
  • twemproxy (aka nutcracker): proksi met memcached-ondersteuning

Opdrag Spiekbriefie

{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}

Shodan

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

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: