11211 - Pentesting Memcache
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Z wikipedia:
Memcached (wymowa: mem-cashed, mem-cash-dee) to ogólny system rozproszonego cache'owania pamięci. Często jest używany do przyspieszania dynamicznych stron internetowych opartych na bazach danych poprzez cache'owanie danych i obiektów w RAM, aby zmniejszyć liczbę odczytów z zewnętrznego źródła danych (takiego jak baza danych lub API).
Chociaż Memcached obsługuje SASL, większość instancji jest narażona bez uwierzytelnienia.
Domyślny port: 11211
Aby wyeksportować wszystkie informacje zapisane w instancji memcache, musisz:
Znaleźć slabs z aktywnymi elementami
Uzyskać nazwy kluczy z wcześniej wykrytych slabs
Wyeksportować zapisane dane poprzez uzyskanie nazw kluczy
Pamiętaj, że ta usługa to tylko cache, więc dane mogą się pojawiać i znikać.
W obszarze memcache, protokołu, który pomaga w organizacji danych według slabów, istnieją specyficzne polecenia do inspekcji przechowywanych danych, chociaż z zauważalnymi ograniczeniami:
Klucze mogą być dumpowane tylko według klasy slab, grupując klucze o podobnym rozmiarze zawartości.
Istnieje limit jednej strony na klasę slab, co odpowiada 1MB danych.
Ta funkcjonalność jest nieoficjalna i może zostać w każdej chwili wycofana, jak omówiono na forum społecznościowym.
Ograniczenie do dumpowania tylko 1MB z potencjalnie gigabajtów danych jest szczególnie istotne. Niemniej jednak, ta funkcjonalność może nadal oferować wgląd w wzorce użycia kluczy, w zależności od specyficznych potrzeb. Dla tych, którzy mniej interesują się mechaniką, wizyta w sekcji narzędzi ujawnia narzędzia do kompleksowego dumpowania. Alternatywnie, proces używania telnetu do bezpośredniej interakcji z konfiguracjami memcached jest opisany poniżej.
Organizacja pamięci memcache jest kluczowa. Inicjowanie memcache z opcją "-vv" ujawnia klasy slab, które generuje, jak pokazano poniżej:
Aby wyświetlić wszystkie obecnie istniejące slab, używa się następującego polecenia:
Dodanie pojedynczego klucza do memcached 1.4.13 ilustruje, jak klasy slab są zapełniane i zarządzane. Na przykład:
Wykonanie polecenia "stats slabs" po dodaniu klucza daje szczegółowe statystyki dotyczące wykorzystania slabów:
Ten wynik ujawnia aktywne typy slabów, wykorzystane kawałki oraz statystyki operacyjne, oferując wgląd w efektywność operacji odczytu i zapisu.
Inna przydatna komenda, "stats items", dostarcza danych na temat usunięć, ograniczeń pamięci oraz cykli życia elementów:
Te statystyki pozwalają na wyciąganie wyedukowanych wniosków na temat zachowania aplikacji w zakresie cache'owania, w tym efektywności cache dla różnych rozmiarów treści, alokacji pamięci i pojemności do cache'owania dużych obiektów.
Dla wersji wcześniejszych niż 1.4.31, klucze są zrzucane według klasy slab za pomocą:
Na przykład, aby zrzucić klucz w klasie #1:
Ta metoda iteruje po klasach slab, ekstraktując i opcjonalnie zrzucając wartości kluczy.
W wersji memcache 1.4.31 i wyższych wprowadzono nową, bezpieczniejszą metodę zrzucania kluczy w środowisku produkcyjnym, wykorzystując tryb non-blocking, jak szczegółowo opisano w notatkach wydania. To podejście generuje obszerne wyjście, stąd zalecenie użycia polecenia 'nc' dla efektywności. Przykłady obejmują:
Tabela stąd.
Języki programowania | Narzędzia | Funkcjonalność | ||
---|---|---|---|---|
PHP | Wyświetla nazwy kluczy. | |||
Perl | Wyświetla klucze i wartości | |||
Ruby | Wyświetla nazwy kluczy. | |||
Perl | Narzędzie w module CPAN | ached/) | ||
PHP | GUI do monitorowania Memcache, która również pozwala na dumping kluczy | |||
libmemcached | Zamraża twój proces memcached!!! Uważaj przy używaniu tego w produkcji. Mimo to, używając go, możesz obejść ograniczenie 1MB i naprawdę zrzucić wszystkie klucze. |
Zauważ, że przed memcached 1.4 nie możesz przechowywać obiektów większych niż 1MB z powodu domyślnego maksymalnego rozmiaru slab.
Jeśli spróbujesz „ustawić” lub „dodać” klucz z limitem czasu większym niż dozwolone maksimum, możesz nie otrzymać tego, czego oczekujesz, ponieważ memcached traktuje wartość jako znacznik czasu Unix. Jeśli znacznik czasu jest w przeszłości, nie zrobi nic. Twoje polecenie cicho się nie powiedzie.
Więc jeśli chcesz użyć maksymalnego czasu życia, określ 2592000. Przykład:
Pomimo dokumentacji mówiącej coś o przepełnieniu wartości 64bit przy użyciu „incr”, wartość znika. Należy ją ponownie utworzyć przy użyciu „add”/„set”.
memcached sam w sobie nie obsługuje replikacji. Jeśli naprawdę jej potrzebujesz, musisz użyć rozwiązań firm trzecich:
repcached: Replikacja multi-master asynchroniczna (patch set memcached 1.2)
Couchbase memcached interface: Użyj CouchBase jako zamiennika memcached
yrmcds: Zgodny z memcached magazyn kluczy-wartości Master-Slave
twemproxy (znany również jako nutcracker): proxy z obsługą memcached
port:11211 "STAT pid"
"STAT pid"
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)