hacktricks/network-services-pentesting/11211-memcache/README.md
2024-02-10 13:11:20 +00:00

18 KiB

11211 - Pentestiranje Memcache

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Informacije o protokolu

Sa wikipedia:

Memcached (izgovor: mem-kešd, mem-kaš-di) je sistem za keširanje memorije opšte namene. Često se koristi za ubrzavanje dinamičkih veb sajtova koji koriste bazu podataka tako što kešira podatke i objekte u RAM-u kako bi se smanjio broj puta kada se mora čitati spoljni izvor podataka (kao što je baza podataka ili API).

Iako Memcached podržava SASL, većina instanci je izložena bez autentifikacije.

Podrazumevani port: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Enumeracija

Ručno

Da biste izvukli sve informacije sačuvane unutar memcache instance, potrebno je:

  1. Pronaći slabove sa aktivnim stavkama
  2. Dobiti nazive ključeva pronađenih slabova
  3. Izvući sačuvane podatke dobijanjem naziva ključeva

Zapamtite da je ovaj servis samo keš, pa se podaci mogu pojavljivati i nestajati.

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

Priručnik2

Memcached je distribuirani sistem keširanja podataka koji se često koristi za ubrzavanje performansi web aplikacija. Međutim, zbog svoje konfiguracije, Memcached može biti podložan različitim sigurnosnim ranjivostima koje mogu biti iskorišćene za neovlašćeni pristup ili zloupotrebu podataka.

Ovaj priručnik će vam pružiti detaljan pregled Memcached-a, kao i nekoliko tehnika i alata koje možete koristiti za testiranje sigurnosti Memcached servera.

Sadržaj

  1. Uvod u Memcached
  2. Sigurnosne ranjivosti Memcached-a
  3. Testiranje sigurnosti Memcached servera
  4. Zaštita Memcached servera

Uvod u Memcached

Memcached je open-source sistem keširanja podataka koji se koristi za ubrzavanje pristupa podacima u distribuiranim okruženjima. On funkcioniše tako što podatke smešta u memoriju kako bi se smanjilo vreme pristupa bazi podataka. Memcached se često koristi u kombinaciji sa web aplikacijama kako bi se poboljšala njihova performansa.

Sigurnosne ranjivosti Memcached-a

Memcached može biti podložan različitim sigurnosnim ranjivostima, uključujući:

  • Neovlašćeni pristup: Ako Memcached server nije pravilno konfigurisan, može biti dostupan javno i omogućiti neovlašćenim korisnicima pristup osetljivim podacima.
  • DoS napadi: Memcached server može biti iskorišćen za izvođenje napada uskraćivanja usluge (DoS) tako što će biti preplavljen zahtevima i postati nedostupan za legitimne korisnike.
  • Memcached Injection: Slično SQL Injection-u, Memcached Injection se odnosi na ubacivanje zlonamernih komandi u Memcached zahtevima kako bi se izvršile neovlaštene operacije.

Testiranje sigurnosti Memcached servera

Da biste testirali sigurnost Memcached servera, možete koristiti različite tehnike i alate, uključujući:

  • Memcrashed: Alat koji se koristi za izvođenje DoS napada na Memcached servere.
  • Memcached Injection: Tehnika koja se koristi za ubacivanje zlonamernih komandi u Memcached zahtevima kako bi se izvršile neovlaštene operacije.
  • Memcached sniffer: Alat koji se koristi za presretanje i analizu Memcached saobraćaja kako bi se identifikovali potencijalni bezbednosni propusti.

Zaštita Memcached servera

Da biste zaštitili Memcached server od sigurnosnih ranjivosti, možete preduzeti sledeće mere:

  • Konfiguracija pristupa: Ograničite pristup Memcached serveru samo na autorizovane IP adrese.
  • Enkripcija saobraćaja: Koristite SSL/TLS enkripciju kako biste obezbedili siguran prenos podataka između Memcached servera i klijenata.
  • Redovno ažuriranje: Redovno ažurirajte Memcached server kako biste ispravili poznate sigurnosne ranjivosti i poboljšali bezbednost.

Napomena: Pre testiranja sigurnosti Memcached servera, uvek se pobrinite da imate dozvolu od vlasnika sistema i da se pridržavate zakona i etičkih smernica.

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)

Automatsko


Description

Memcached is an open-source, high-performance, distributed memory caching system that is commonly used to speed up dynamic web applications by caching data and objects in memory. However, misconfigurations or vulnerabilities in Memcached can lead to unauthorized access and potential data leaks.

This section provides information on how to perform automatic enumeration and exploitation of Memcached servers.


Automatic Enumeration

To automatically enumerate Memcached servers, you can use the nmap tool with the Memcached script:

nmap -p 11211 --script memcached-info <target>

This command will scan the specified target for open port 11211 and run the Memcached script to gather information about the server.


Automatic Exploitation

Once you have identified a Memcached server, you can use the memcrashed tool to launch a distributed denial-of-service (DDoS) attack against it. This tool takes advantage of the stats command in Memcached to amplify the attack traffic and overwhelm the target server.

To use memcrashed, follow these steps:

  1. Install the tool by cloning the GitHub repository:

    git clone https://github.com/649/Memcrashed-DDoS-Exploit.git
    
  2. Change into the tool's directory:

    cd Memcrashed-DDoS-Exploit
    
  3. Launch the DDoS attack by specifying the target IP address and port:

    python3 memcrashed.py <target> <port>
    

    Replace <target> with the IP address of the Memcached server and <port> with the port number (usually 11211).


Mitigation

To protect your Memcached servers from enumeration and exploitation, consider the following mitigation measures:

  • Disable external access to Memcached servers or restrict access to trusted IP addresses only.
  • Implement strong authentication mechanisms, such as SASL, to prevent unauthorized access.
  • Regularly update Memcached to the latest version to patch any known vulnerabilities.
  • Monitor network traffic for any suspicious activity and implement intrusion detection and prevention systems.
  • Implement rate limiting or traffic shaping to mitigate the impact of DDoS attacks.

References

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

Dumpiranje Memcache ključeva

U svetu memcache-a, protokol koji pomaže u organizaciji podataka po slabs, postoje specifične komande za inspekciju sačuvanih podataka, iako uz primetna ograničenja:

  1. Ključevi se mogu dumpovati samo po slab klasi, grupišući ključeve slične veličine sadržaja.
  2. Postoji ograničenje od jedne stranice po slab klasi, što je ekvivalentno 1MB podataka.
  3. Ova funkcionalnost je nezvanična i može biti ukinuta u bilo kom trenutku, kako je diskutovano u forumima zajednice.

Ograničenje da se može dumpovati samo 1MB podataka iz potencijalno gigabajta podataka je posebno značajno. Međutim, ova funkcionalnost i dalje može pružiti uvid u obrasce korišćenja ključeva, u zavisnosti od specifičnih potreba. Za one manje zainteresovane za mehaniku, poseta odeljku sa alatima otkriva alate za sveobuhvatno dumpovanje. Alternativno, postupak korišćenja telnet-a za direktnu interakciju sa memcached podešavanjima je opisan u nastavku.

Kako radi

Organizacija memorije u memcache-u je ključna. Pokretanje memcache-a sa opcijom "-vv" otkriva slab klase koje generiše, kao što je prikazano ispod:

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

Da biste prikazali sve trenutno postojeće slabe, koristi se sledeća komanda:

stats slabs

Dodavanje jednog ključa u memcached 1.4.13 ilustruje kako se popunjavaju i upravljaju slab klase. Na primer:

set mykey 0 60 1
1
STORED

Izvršavanje komande "stats slabs" nakon dodavanja ključa pruža detaljne statistike o iskorišćenosti slaba:

stats slabs
[...]

Ovaj izlaz otkriva aktivne tipove slaba, iskorišćene delove i operativnu statistiku, pružajući uvid u efikasnost operacija čitanja i pisanja.

Još jedna korisna komanda, "stats items", pruža podatke o izbacivanju, ograničenjima memorije i životnom ciklusu stavki:

stats items
[...]

Ove statistike omogućavaju obrazovane pretpostavke o ponašanju keširanja aplikacija, uključujući efikasnost keširanja za različite veličine sadržaja, alokaciju memorije i kapacitet za keširanje velikih objekata.

Izbacivanje ključeva

Za verzije pre 1.4.31, ključevi se izbacuju po slaboj klasi koristeći:

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

Na primer, da biste izbacili ključ u klasi #1:

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

Ova metoda prolazi kroz slab klase, izvlači i opciono ispisuje vrednosti ključeva.

ISPISIVANJE MEMCACHE KLJUČEVA (VER 1.4.31+)

Sa memcache verzijom 1.4.31 i novijom, uvedena je nova, sigurnija metoda za ispisivanje ključeva u produkcionom okruženju, koristeći neblokirajući režim kako je detaljno opisano u beleškama o izdanju. Ovaj pristup generiše obimne rezultate, stoga se preporučuje korišćenje 'nc' komande radi efikasnosti. Primeri uključuju:

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

ALATI ZA ISPISIVANJE

Tabela odavde.

Programski jezici Alati Funkcionalnost
PHP jednostavan skript Ispisuje nazive ključeva.
Perl jednostavan skript Ispisuje ključeve i vrednosti
Ruby jednostavan skript Ispisuje nazive ključeva.
Perl memdump Alat u CPAN modulu Memcached-libmemcached ached/)
PHP memcache.php Memcache Monitoring GUI koji takođe omogućava ispisivanje ključeva
libmemcached peep Zamrzava vaš memcached proces!!! Budite oprezni prilikom korišćenja ovoga u produkciji. Ipak, koristeći ga, možete zaobići ograničenje od 1MB i zaista ispisati sve ključeve.

Rešavanje problema

Ograničenje podataka od 1MB

Imajte na umu da pre memcached verzije 1.4 ne možete skladištiti objekte veće od 1MB zbog podrazumevane maksimalne veličine slota.

Nikada ne postavljajte vremensko ograničenje veće od 30 dana!

Ako pokušate da "postavite" ili "dodate" ključ sa vremenskim ograničenjem većim od dozvoljenog maksimuma, možda nećete dobiti očekivani rezultat jer memcached tada tretira vrednost kao Unix vremenski žig. Takođe, ako je vremenski žig u prošlosti, neće se desiti ništa. Vaša komanda će tiho neuspeti.

Dakle, ako želite koristiti maksimalno trajanje, specificirajte 2592000. Primer:

set my_key 0 2592000 1
1

Nestajući ključevi pri prekoračenju

Iako dokumentacija kaže nešto o prekoračenju vrednosti od 64 bita pomoću "incr" komande, to uzrokuje da vrednost nestane. Potrebno je ponovo je kreirati pomoću "add"/"set" komande.

Repliciranje

memcached sam po sebi ne podržava repliciranje. Ako vam zaista treba, morate koristiti rešenja trećih strana:

  • repcached: Asinhrono repliciranje više mastera (memcached 1.2 set zakrpa)
  • Couchbase memcached interfejs: Koristite CouchBase kao zamenu za memcached
  • yrmcds: memcached kompatibilno skladište ključ-vrednost master-slave
  • twemproxy (poznat i kao nutcracker): proxy sa podrškom za memcached

Cheat-Sheet Komande

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

Shodan

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

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u: