hacktricks/network-services-pentesting/11211-memcache/README.md

306 lines
18 KiB
Markdown
Raw Normal View History

2024-02-10 13:11:20 +00:00
# 11211 - Pentestiranje Memcache
2023-02-16 13:29:30 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-02-03 01:15:34 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2023-02-16 13:29:30 +00:00
</details>
2024-02-10 13:11:20 +00:00
## Informacije o protokolu
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Sa [wikipedia](https://en.wikipedia.org/wiki/Memcached):
2024-02-08 21:36:15 +00:00
2024-02-10 13:11:20 +00:00
> **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).
2024-02-08 21:36:15 +00:00
2024-02-10 13:11:20 +00:00
Iako Memcached podržava SASL, većina instanci je **izložena bez autentifikacije**.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
**Podrazumevani port:** 11211
2023-02-16 13:29:30 +00:00
```
PORT STATE SERVICE
11211/tcp open unknown
```
2024-02-10 13:11:20 +00:00
## Enumeracija
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### Ručno
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Da biste izvukli sve informacije sačuvane unutar memcache instance, potrebno je:
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
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
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Zapamtite da je ovaj servis samo **keš**, pa se **podaci mogu pojavljivati i nestajati**.
2023-02-16 13:29:30 +00:00
```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() );'
```
2024-02-10 13:11:20 +00:00
### 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](#uvod-u-memcached)
2. [Sigurnosne ranjivosti Memcached-a](#sigurnosne-ranjivosti-memcached-a)
3. [Testiranje sigurnosti Memcached servera](#testiranje-sigurnosti-memcached-servera)
4. [Zaštita Memcached servera](#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
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Da biste zaštitili Memcached server od sigurnosnih ranjivosti, možete preduzeti sledeće mere:
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
- 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.
2023-02-16 13:29:30 +00:00
```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)
```
2024-02-10 13:11:20 +00:00
### 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.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
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:
2023-02-16 13:29:30 +00:00
```bash
2024-02-10 13:11:20 +00:00
nmap -p 11211 --script memcached-info <target>
2023-02-16 13:29:30 +00:00
```
2024-02-10 13:11:20 +00:00
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:
```bash
git clone https://github.com/649/Memcrashed-DDoS-Exploit.git
```
2. Change into the tool's directory:
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
```bash
cd Memcrashed-DDoS-Exploit
```
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
3. Launch the DDoS attack by specifying the target IP address and port:
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
```bash
python3 memcrashed.py <target> <port>
```
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Replace `<target>` with the IP address of the Memcached server and `<port>` with the port number (usually 11211).
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
---
2024-02-08 21:36:15 +00:00
2024-02-10 13:11:20 +00:00
#### 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
- [Memcached Official Website](https://memcached.org/)
- [Memcrashed-DDoS-Exploit GitHub Repository](https://github.com/649/Memcrashed-DDoS-Exploit)
```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
```
## **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](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM).
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](https://lzone.de/cheat-sheet/memcached#tools) 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:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
$ memcached -vv
slab class 1: chunk size 96 perslab 10922
[...]
```
2024-02-10 13:11:20 +00:00
Da biste prikazali sve trenutno postojeće slabe, koristi se sledeća komanda:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
stats slabs
```
2024-02-10 13:11:20 +00:00
Dodavanje jednog ključa u memcached 1.4.13 ilustruje kako se popunjavaju i upravljaju slab klase. Na primer:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
set mykey 0 60 1
1
STORED
```
2024-02-10 13:11:20 +00:00
Izvršavanje komande "stats slabs" nakon dodavanja ključa pruža detaljne statistike o iskorišćenosti slaba:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
stats slabs
2024-02-08 21:36:15 +00:00
[...]
2023-02-16 13:29:30 +00:00
```
2024-02-10 13:11:20 +00:00
Ovaj izlaz otkriva aktivne tipove slaba, iskorišćene delove i operativnu statistiku, pružajući uvid u efikasnost operacija čitanja i pisanja.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Još jedna korisna komanda, "stats items", pruža podatke o izbacivanju, ograničenjima memorije i životnom ciklusu stavki:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
stats items
2024-02-08 21:36:15 +00:00
[...]
2023-02-16 13:29:30 +00:00
```
2024-02-10 13:11:20 +00:00
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.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### **Izbacivanje ključeva**
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Za verzije pre 1.4.31, ključevi se izbacuju po slaboj klasi koristeći:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
stats cachedump <slab class> <number of items to dump>
```
2024-02-10 13:11:20 +00:00
Na primer, da biste izbacili ključ u klasi #1:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END
```
2024-02-10 13:11:20 +00:00
Ova metoda prolazi kroz slab klase, izvlači i opciono ispisuje vrednosti ključeva.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### **ISPISIVANJE MEMCACHE KLJUČEVA (VER 1.4.31+)**
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
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](https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Ovaj pristup generiše obimne rezultate, stoga se preporučuje korišćenje 'nc' komande radi efikasnosti. Primeri uključuju:
2024-02-08 21:36:15 +00:00
```bash
2023-02-16 13:29:30 +00:00
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
```
2024-02-10 13:11:20 +00:00
### **ALATI ZA ISPISIVANJE**
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Tabela [odavde](https://lzone.de/blog).
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
| Programski jezici | Alati | Funkcionalnost | | |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ------- |
| PHP | [jednostavan skript](http://snipt.org/xtP) | Ispisuje nazive ključeva. | | |
| Perl | [jednostavan skript](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1\&modificationDate=1229693957401) | Ispisuje ključeve i vrednosti | | |
| Ruby | [jednostavan skript](https://gist.github.com/1365005) | Ispisuje nazive ključeva. | | |
| Perl | [memdump](https://search.cpan.org/\~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Alat u CPAN modulu | [Memcached-libmemcached](https://search.cpan.org/\~dmaki/Memcached-libmemc) | ached/) |
| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | Memcache Monitoring GUI koji takođe omogućava ispisivanje ključeva | | |
| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **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. | | |
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
## Rešavanje problema <a href="#troubleshooting" id="troubleshooting"></a>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### Ograničenje podataka od 1MB <a href="#1mb-data-limit" id="1mb-data-limit"></a>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
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.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### Nikada ne postavljajte vremensko ograničenje veće od 30 dana! <a href="#never-set-a-timeout--30-days" id="never-set-a-timeout--30-days"></a>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
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.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Dakle, ako želite koristiti maksimalno trajanje, specificirajte 2592000. Primer:
2023-02-16 13:29:30 +00:00
```
set my_key 0 2592000 1
1
```
2024-02-10 13:11:20 +00:00
### Nestajući ključevi pri prekoračenju <a href="#disappearing-keys-on-overflow" id="disappearing-keys-on-overflow"></a>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
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.
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### Repliciranje <a href="#replication" id="replication"></a>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
memcached sam po sebi ne podržava repliciranje. Ako vam zaista treba, morate koristiti rešenja trećih strana:
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
* [repcached](http://repcached.lab.klab.org/): Asinhrono repliciranje više mastera (memcached 1.2 set zakrpa)
* [Couchbase memcached interfejs](http://www.couchbase.com/memcached): Koristite CouchBase kao zamenu za memcached
* [yrmcds](https://cybozu.github.io/yrmcds/): memcached kompatibilno skladište ključ-vrednost master-slave
* [twemproxy](https://github.com/twitter/twemproxy) (poznat i kao nutcracker): proxy sa podrškom za memcached
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
### Cheat-Sheet Komande
2023-02-16 13:29:30 +00:00
{% content-ref url="memcache-commands.md" %}
[memcache-commands.md](memcache-commands.md)
{% endcontent-ref %}
### **Shodan**
* `port:11211 "STAT pid"`
* `"STAT pid"`
2024-02-10 13:11:20 +00:00
## Reference
2023-02-16 13:29:30 +00:00
* [https://lzone.de/cheat-sheet/memcached](https://lzone.de/cheat-sheet/memcached)
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2023-02-16 13:29:30 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2024-02-03 01:15:34 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2023-02-16 13:29:30 +00:00
</details>