hacktricks/network-services-pentesting/11211-memcache
2024-05-02 15:11:26 +00:00
..
memcache-commands.md Translated ['binary-exploitation/rop-return-oriented-programing/ret2lib/ 2024-05-02 15:11:26 +00:00
README.md Translated to Polish 2024-02-11 01:46:25 +00:00

11211 - Testowanie penetracyjne Memcache

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Informacje o protokole

Z Wikipedii:

Memcached (wymowa: mem-cashed, mem-cash-dee) to ogólnego przeznaczenia rozproszony system buforowania pamięci. Często jest używany do przyspieszania dynamicznych stron internetowych opartych na bazie danych poprzez buforowanie danych i obiektów w pamięci RAM w celu zmniejszenia liczby odczytów zewnętrznego źródła danych (takiego jak baza danych lub interfejs API).

Chociaż Memcached obsługuje SASL, większość instancji jest narażona bez uwierzytelnienia.

Domyślny port: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Wyliczanie

Ręczne

Aby wydobyć wszystkie informacje zapisane w instancji memcache, musisz:

  1. Znaleźć slaby z aktywnymi elementami
  2. Pobrać nazwy kluczy wykrytych slabów
  3. Wydobyć zapisane dane, pobierając nazwy kluczy

Pamiętaj, że ta usługa to tylko pamięć podręczna, więc dane mogą się pojawiać i znikać.

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

Instrukcja2

Memcached jest rozproszonym systemem pamięci podręcznej, który jest szeroko stosowany w aplikacjach internetowych do przyspieszania dostępu do danych. Jednakże, niektóre konfiguracje Memcached mogą prowadzić do poważnych luk w zabezpieczeniach, które mogą być wykorzystane przez hakerów do uzyskania nieautoryzowanego dostępu do danych.

Wykrywanie Memcached

Aby wykryć, czy dana aplikacja korzysta z Memcached, można użyć narzędzi takich jak nmap lub masscan. Przeskanuj porty 11211 i 11212, które są domyślnie używane przez Memcached.

nmap -p 11211,11212 <adres_ip_aplikacji>

Ataki na Memcached

  1. Atak DDoS: Memcached może być wykorzystany do przeprowadzenia ataku DDoS poprzez wysyłanie zapytań UDP z fałszywym adresem IP ofiary. Aby przeprowadzić taki atak, można użyć narzędzi takich jak memcrashed lub Memcrashed-DDoS-Exploit.

  2. Atak na wyciek danych: Jeśli Memcached jest źle skonfigurowany, może wystąpić wyciek danych. Można to wykorzystać, aby uzyskać dostęp do poufnych informacji. Aby przeprowadzić taki atak, można użyć narzędzi takich jak Memcached-Server-Scanner lub Memcached-Dumper.

Zabezpieczanie Memcached

Aby zabezpieczyć Memcached przed atakami, należy podjąć następujące kroki:

  1. Wyłączanie nasłuchu na publicznym interfejsie sieciowym i ograniczenie dostępu tylko do lokalnego interfejsu sieciowego.

  2. Skonfiguruj Memcached, aby wymagał uwierzytelniania przy połączeniach.

  3. Zaktualizuj Memcached do najnowszej wersji, aby uniknąć znanych luk w zabezpieczeniach.

  4. Monitoruj Memcached, aby wykryć ewentualne nieprawidłowości lub ataki.

Podsumowanie

Memcached jest potężnym narzędziem do przyspieszania dostępu do danych w aplikacjach internetowych. Jednakże, należy pamiętać o odpowiednim zabezpieczeniu Memcached, aby uniknąć potencjalnych luk w zabezpieczeniach i ataków.

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)

Automatyczne

Memcached jest popularnym systemem cache'owania, który jest szeroko stosowany w aplikacjach internetowych. Jednakże, niektóre konfiguracje Memcached mogą być podatne na ataki zewnętrzne, co może prowadzić do wycieku poufnych danych. W tym rozdziale omówimy automatyczne narzędzia, które mogą pomóc w identyfikacji i eksploatacji takich podatności.

Memcrashed

Memcrashed to narzędzie napisane w języku Python, które automatyzuje ataki DDoS na serwery Memcached. Narzędzie to wykorzystuje protokół UDP, aby wysyłać zapytania do serwera Memcached, które są odpowiednio spreparowane, aby wywołać odpowiedź o dużej objętości. Atak DDoS za pomocą Memcrashed może spowodować znaczne obciążenie serwera i prowadzić do jego awarii.

Aby użyć narzędzia Memcrashed, należy wprowadzić adres IP docelowego serwera Memcached oraz port, na którym serwer nasłuchuje. Narzędzie automatycznie wygeneruje i wyśle odpowiednie zapytania, aby wywołać odpowiedź o dużej objętości.

python memcrashed.py <adres_IP_serwera_Memcached> <port_serwera>

Memcrashed Amplification Scanner

Memcrashed Amplification Scanner to narzędzie napisane w języku Python, które automatycznie skanuje sieć w poszukiwaniu serwerów Memcached, które mogą być wykorzystane do ataków DDoS za pomocą narzędzia Memcrashed. Narzędzie to wysyła zapytania do wszystkich adresów IP w podanej podsieci, aby sprawdzić, czy serwer Memcached jest dostępny i czy można go wykorzystać do ataku.

Aby użyć narzędzia Memcrashed Amplification Scanner, należy wprowadzić adres IP podsieci, którą chcemy zeskanować, oraz port, na którym serwery Memcached nasłuchują. Narzędzie automatycznie skanuje wszystkie adresy IP w podsieci i wyświetla wyniki.

python memcrashed_amplification_scanner.py <adres_IP_podsieci> <port_serwerów_Memcached>

Memcrashed Amplification Scanner (z wykorzystaniem Shodan)

Memcrashed Amplification Scanner (z wykorzystaniem Shodan) to rozszerzenie narzędzia Memcrashed Amplification Scanner, które wykorzystuje Shodan do automatycznego skanowania sieci w poszukiwaniu serwerów Memcached. Shodan to wyszukiwarka urządzeń podłączonych do Internetu, która umożliwia identyfikację publicznie dostępnych serwerów Memcached.

Aby użyć narzędzia Memcrashed Amplification Scanner z wykorzystaniem Shodan, należy wprowadzić klucz API Shodan oraz adres IP podsieci, którą chcemy zeskanować. Narzędzie automatycznie wykorzystuje Shodan do skanowania sieci i wyświetla wyniki.

python memcrashed_amplification_scanner_shodan.py <klucz_API_Shodan> <adres_IP_podsieci>

Memcrashed Amplification Scanner (z wykorzystaniem Censys)

Memcrashed Amplification Scanner (z wykorzystaniem Censys) to rozszerzenie narzędzia Memcrashed Amplification Scanner, które wykorzystuje Censys do automatycznego skanowania sieci w poszukiwaniu serwerów Memcached. Censys to platforma do monitorowania i analizy danych związanych z infrastrukturą internetową.

Aby użyć narzędzia Memcrashed Amplification Scanner z wykorzystaniem Censys, należy wprowadzić klucz API Censys oraz adres IP podsieci, którą chcemy zeskanować. Narzędzie automatycznie wykorzystuje Censys do skanowania sieci i wyświetla wyniki.

python memcrashed_amplification_scanner_censys.py <klucz_API_Censys> <adres_IP_podsieci>

Memcrashed Amplification Scanner (z wykorzystaniem ZoomEye)

Memcrashed Amplification Scanner (z wykorzystaniem ZoomEye) to rozszerzenie narzędzia Memcrashed Amplification Scanner, które wykorzystuje ZoomEye do automatycznego skanowania sieci w poszukiwaniu serwerów Memcached. ZoomEye to wyszukiwarka urządzeń podłączonych do Internetu, która umożliwia identyfikację publicznie dostępnych serwerów Memcached.

Aby użyć narzędzia Memcrashed Amplification Scanner z wykorzystaniem ZoomEye, należy wprowadzić klucz API ZoomEye oraz adres IP podsieci, którą chcemy zeskanować. Narzędzie automatycznie wykorzystuje ZoomEye do skanowania sieci i wyświetla wyniki.

python memcrashed_amplification_scanner_zoomeye.py <klucz_API_ZoomEye> <adres_IP_podsieci>
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

Dumpowanie kluczy Memcache

W świecie memcache istnieją specjalne polecenia umożliwiające inspekcję przechowywanych danych, choć z pewnymi ograniczeniami:

  1. Klucze mogą być dumpowane tylko według klasy slab, grupującej klucze o podobnym rozmiarze zawartości.
  2. Istnieje limit jednej strony na klasę slab, co równa się 1MB danych.
  3. Ta funkcjonalność jest nieoficjalna i może zostać wycofana w dowolnym momencie, jak omówiono w forum społecznościowym.

Ograniczenie polegające na możliwości dumpowania tylko 1MB danych spośród potencjalnie gigabajtów danych jest szczególnie istotne. Niemniej jednak, ta funkcjonalność może wciąż dostarczyć informacji na temat wzorców używania kluczy, w zależności od konkretnych potrzeb. Dla tych, którzy mniej interesują się mechaniką, w sekcji narzędzi można znaleźć narzędzia do kompleksowego dumpowania. Alternatywnie, poniżej przedstawiono proces korzystania z telnetu do bezpośredniej interakcji z konfiguracją memcached.

Jak to działa

Organizacja pamięci w memcache jest kluczowa. Uruchomienie memcache z opcją "-vv" ujawnia generowane przez niego klasy slab, jak pokazano poniżej:

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

Aby wyświetlić wszystkie obecnie istniejące slaby, używa się następującej komendy:

stats slabs

Dodanie pojedynczego klucza do memcached 1.4.13 ilustruje, jak są tworzone i zarządzane klasy slabów. Na przykład:

set mykey 0 60 1
1
STORED

Wykonanie polecenia "stats slabs" po dodaniu klucza dostarcza szczegółowych statystyk dotyczących wykorzystania slabów:

stats slabs
[...]

Ten wynik ujawnia aktywne typy slabów, wykorzystane fragmenty i statystyki operacyjne, dostarczając informacji na temat efektywności operacji odczytu i zapisu.

Inne przydatne polecenie, "stats items", dostarcza danych dotyczących usuwania, ograniczeń pamięciowych i cykli życia elementów:

stats items
[...]

Te statystyki te pozwalają na przypuszczenia dotyczące zachowania pamięci podręcznej aplikacji, w tym wydajności pamięci podręcznej dla różnych rozmiarów zawartości, alokacji pamięci i pojemności do przechowywania dużych obiektów.

Wyciek kluczy

Wersje wcześniejsze niż 1.4.31 wyciekają klucze według klasy slab za pomocą:

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

Na przykład, aby wydobyć klucz w klasie #1:

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

Ta metoda iteruje po klasach slab, wyodrębniając i opcjonalnie zrzutując wartości kluczy.

ZRZUTOWANIE KLUCZY MEMCACHE (WERSJA 1.4.31+)

Wersja memcache 1.4.31 i nowsze wprowadzają nową, bezpieczniejszą metodę zrzutu kluczy w środowisku produkcyjnym, wykorzystując tryb nieblokujący, jak szczegółowo opisano w notatkach wydania. Ten podejście generuje obszerny wynik, dlatego zaleca się użycie polecenia 'nc' dla efektywności. Przykłady obejmują:

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

NARZĘDZIA DO WYŚWIETLANIA DANYCH

Tabela stąd.

Języki programowania Narzędzia Funkcjonalność
PHP prosty skrypt Wyświetla nazwy kluczy.
Perl prosty skrypt Wyświetla klucze i wartości.
Ruby prosty skrypt Wyświetla nazwy kluczy.
Perl memdump Narzędzie w module CPAN Memcached-libmemcached ached/)
PHP memcache.php GUI monitorujące Memcache, które umożliwia również wyświetlanie kluczy.
libmemcached peep Zamraża proces memcached!!! Bądź ostrożny podczas używania tego w produkcji. Używając go, można obejść ograniczenie 1MB i naprawdę wyświetlić wszystkie klucze.

Rozwiązywanie problemów

Ograniczenie danych do 1MB

Należy pamiętać, że przed wersją memcached 1.4 nie można przechowywać obiektów większych niż 1MB ze względu na domyślny maksymalny rozmiar slabu.

Nigdy nie ustawiaj limitu czasu na więcej niż 30 dni!

Jeśli próbujesz ustawić klucz z limitem czasu większym niż dozwolony maksymalny, może się okazać, że nie otrzymasz oczekiwanego rezultatu, ponieważ memcached traktuje wartość jako znacznik czasu Unix. Jeśli znacznik czasu jest w przeszłości, nie zostanie wykonana żadna operacja. Twoje polecenie zakończy się bez żadnego komunikatu.

Jeśli chcesz użyć maksymalnego okresu ważności, należy podać wartość 2592000. Przykład:

set my_key 0 2592000 1
1

Znikające klucze przy przepełnieniu

Mimo że dokumentacja mówi o owinięciu wartości przy przepełnieniu 64-bitowym za pomocą polecenia "incr", powoduje to zniknięcie wartości. Należy ją ponownie utworzyć za pomocą polecenia "add"/"set".

Replikacja

Sam memcached nie obsługuje replikacji. Jeśli naprawdę jej potrzebujesz, musisz skorzystać z rozwiązań firm trzecich:

  • repcached: wielomasterowa replikacja asynchroniczna (zestaw łatek memcached 1.2)
  • Interfejs memcached Couchbase: Użyj CouchBase jako zamiennika memcached
  • yrmcds: kompatybilne z memcached, klucz-wartość, magazyn Master-Slave
  • twemproxy (znany również jako nutcracker): proxy obsługujące memcached

Arkusz podpowiedzi poleceń

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

Shodan

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

Odnośniki

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: