11211 - Pentesting Memcache

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Інформація про протокол

З вікіпедії:

Memcached (вимова: mem-cashed, mem-cash-dee) - це загальнопризначена розподілена система кешування пам'яті. Часто використовується для прискорення динамічних веб-сайтів, що працюють з базою даних, шляхом кешування даних та об'єктів у RAM для зменшення кількості разів, коли потрібно звертатися до зовнішнього джерела даних (такого як база даних або API).

Хоча Memcached підтримує SASL, більшість екземплярів відкриті без аутентифікації.

Порт за замовчуванням: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Перелік

Ручний

Для виведення всієї інформації, збереженої в екземплярі memcache, вам потрібно:

  1. Знайти слабки з активними елементами

  2. Отримати імена ключів виявлених слабів

  3. Ексфільтрувати збережені дані, отримавши імена ключів

Пам'ятайте, що цей сервіс - це просто кеш, тому дані можуть з'являтися і зникають.

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

Ручний2

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)

Автоматичний

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

Виведення ключів Memcache

У світі memcache існує протокол, який допомагає організувати дані за допомогою слабів, існують конкретні команди для інспекції збережених даних, хоча з помітними обмеженнями:

  1. Ключі можна виводити лише за класом слабу, групуючи ключі з подібним розміром вмісту.

  2. Існує обмеження однієї сторінки на клас слабу, що еквівалентно 1 МБ даних.

  3. Ця функція є неофіційною і може бути припинена у будь-який момент, як обговорюється в форумах спільноти.

Обмеження можливості виведення лише 1 МБ з потенційно гігабайтів даних є особливо значущим. Однак ця функціональність все ще може надати відомості про шаблони використання ключів, залежно від конкретних потреб. Для тих, хто менше зацікавлений у механіці, візит до розділу інструментів розкриває утиліти для комплексного виведення. Альтернативно, процес використання telnet для прямої взаємодії з налаштуваннями memcached описано нижче.

Як це працює

Організація пам'яті memcache є ключовою. Ініціюючи memcache з опцією "-vv", відображаються класи слабів, як показано нижче:

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

Для відображення всіх поточно існуючих слабів використовується наступна команда:

stats slabs

Додавання одного ключа до memcached 1.4.13 показує, як заповнюються та керуються класами плит у пам'яті. Наприклад:

set mykey 0 60 1
1
STORED

Виконання команди "stats slabs" після додавання ключа надає докладну статистику використання слабу:

stats slabs
[...]

Цей вивід показує активні типи слабів, використані фрагменти та оперативну статистику, надаючи уявлення про ефективність операцій зчитування та запису.

Ще одна корисна команда, "stats items", надає дані про видалення, обмеження пам'яті та життєвий цикл елементів:

stats items
[...]

Вивантаження ключів

Для версій до 1.4.31 ключі вивантажуються за допомогою класу слабу:

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

Наприклад, щоб витягнути ключ у класі #1:

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

Цей метод ітерується по класах слою, витягаючи та за необхідності виводячи значення ключів.

ВИВЕДЕННЯ КЛЮЧІВ MEMCACHE (ВЕРСІЯ 1.4.31+)

З версії memcache 1.4.31 та вище, вводиться новий, безпечніший метод виведення ключів у виробничому середовищі, використовуючи неблокуючий режим, як описано в примітках до випуску. Цей підхід генерує обширний вивід, тому рекомендується використовувати команду 'nc' для ефективності. Приклади включають:

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

ІНСТРУМЕНТИ ВИТЯГУВАННЯ

Таблиця тут.

Мови програмуванняІнструментиФункціональність

PHP

Виводить назви ключів.

Perl

Виводить ключі та значення.

Ruby

Виводить назви ключів.

Perl

Інструмент у модулі CPAN.

ached/)

PHP

Графічний інтерфейс моніторингу Memcache, який також дозволяє витягувати ключі.

libmemcached

Заморожує ваш процес memcached!!! Будьте обережні при використанні цього на продакшені. Використовуючи це, ви можете обійти обмеження 1 МБ та дійсно витягнути всі ключі.

Усунення неполадок

Обмеження даних 1 МБ

Зверніть увагу, що до memcached 1.4 ви не можете зберігати об'єкти розміром більше 1 МБ через максимальний розмір слабу за замовчуванням.

Ніколи не встановлюйте таймаут > 30 днів!

Якщо ви спробуєте "встановити" або "додати" ключ з таймаутом більше дозволеного максимуму, ви можете не отримати те, що очікували, оскільки memcached тоді розглядає значення як мітку часу Unix. Також, якщо мітка часу в минулому, вона не зробить нічого взагалі. Ваша команда буде беззвучно не виконана.

Тому, якщо ви хочете використовувати максимальний термін зберігання, вкажіть 2592000. Приклад:

set my_key 0 2592000 1
1

Зникнення ключів при переповненні

Незважаючи на те, що документація говорить щось про обгортання значення, що переповнюється на 64 біти за допомогою "incr", це призводить до зникнення значення. Його потрібно створити знову за допомогою "add"/"set".

Реплікація

memcached сам по собі не підтримує реплікацію. Якщо вам дійсно це потрібно, вам потрібно використовувати рішення від сторонніх розробників:

  • repcached: Мульти-мастер асинхронна реплікація (набір патчів для memcached 1.2)

  • Couchbase інтерфейс memcached: Використовуйте CouchBase як заміну memcached

  • yrmcds: сумісне з memcached сховище ключ-значення Майстер-Слейв

  • twemproxy (також відомий як nutcracker): проксі з підтримкою memcached

Шпаргалка з команд

pageMemcache Commands

Shodan

  • port:11211 "STAT pid"

  • "STAT pid"

References

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated