11211 - Pentesting Memcache
Інформація про протокол
З вікіпедії:
Memcached (вимова: mem-cashed, mem-cash-dee) - це загальнопризначена розподілена система кешування пам'яті. Часто використовується для прискорення динамічних веб-сайтів, що працюють з базою даних, шляхом кешування даних та об'єктів у RAM для зменшення кількості разів, коли потрібно звертатися до зовнішнього джерела даних (такого як база даних або API).
Хоча Memcached підтримує SASL, більшість екземплярів відкриті без аутентифікації.
Порт за замовчуванням: 11211
Перелік
Ручний
Для виведення всієї інформації, збереженої в екземплярі memcache, вам потрібно:
Знайти слабки з активними елементами
Отримати імена ключів виявлених слабів
Ексфільтрувати збережені дані, отримавши імена ключів
Пам'ятайте, що цей сервіс - це просто кеш, тому дані можуть з'являтися і зникають.
Ручний2
Автоматичний
Виведення ключів Memcache
У світі memcache існує протокол, який допомагає організувати дані за допомогою слабів, існують конкретні команди для інспекції збережених даних, хоча з помітними обмеженнями:
Ключі можна виводити лише за класом слабу, групуючи ключі з подібним розміром вмісту.
Існує обмеження однієї сторінки на клас слабу, що еквівалентно 1 МБ даних.
Ця функція є неофіційною і може бути припинена у будь-який момент, як обговорюється в форумах спільноти.
Обмеження можливості виведення лише 1 МБ з потенційно гігабайтів даних є особливо значущим. Однак ця функціональність все ще може надати відомості про шаблони використання ключів, залежно від конкретних потреб. Для тих, хто менше зацікавлений у механіці, візит до розділу інструментів розкриває утиліти для комплексного виведення. Альтернативно, процес використання telnet для прямої взаємодії з налаштуваннями memcached описано нижче.
Як це працює
Організація пам'яті memcache є ключовою. Ініціюючи memcache з опцією "-vv", відображаються класи слабів, як показано нижче:
Для відображення всіх поточно існуючих слабів використовується наступна команда:
Додавання одного ключа до memcached 1.4.13 показує, як заповнюються та керуються класами плит у пам'яті. Наприклад:
Виконання команди "stats slabs" після додавання ключа надає докладну статистику використання слабу:
Цей вивід показує активні типи слабів, використані фрагменти та оперативну статистику, надаючи уявлення про ефективність операцій зчитування та запису.
Ще одна корисна команда, "stats items", надає дані про видалення, обмеження пам'яті та життєвий цикл елементів:
Вивантаження ключів
Для версій до 1.4.31 ключі вивантажуються за допомогою класу слабу:
Наприклад, щоб витягнути ключ у класі #1:
Цей метод ітерується по класах слою, витягаючи та за необхідності виводячи значення ключів.
ВИВЕДЕННЯ КЛЮЧІВ MEMCACHE (ВЕРСІЯ 1.4.31+)
З версії memcache 1.4.31 та вище, вводиться новий, безпечніший метод виведення ключів у виробничому середовищі, використовуючи неблокуючий режим, як описано в примітках до випуску. Цей підхід генерує обширний вивід, тому рекомендується використовувати команду 'nc' для ефективності. Приклади включають:
ІНСТРУМЕНТИ ВИТЯГУВАННЯ
Таблиця тут.
Мови програмування | Інструменти | Функціональність | ||
---|---|---|---|---|
PHP | Виводить назви ключів. | |||
Perl | Виводить ключі та значення. | |||
Ruby | Виводить назви ключів. | |||
Perl | Інструмент у модулі CPAN. | ached/) | ||
PHP | Графічний інтерфейс моніторингу Memcache, який також дозволяє витягувати ключі. | |||
libmemcached | Заморожує ваш процес memcached!!! Будьте обережні при використанні цього на продакшені. Використовуючи це, ви можете обійти обмеження 1 МБ та дійсно витягнути всі ключі. |
Усунення неполадок
Обмеження даних 1 МБ
Зверніть увагу, що до memcached 1.4 ви не можете зберігати об'єкти розміром більше 1 МБ через максимальний розмір слабу за замовчуванням.
Ніколи не встановлюйте таймаут > 30 днів!
Якщо ви спробуєте "встановити" або "додати" ключ з таймаутом більше дозволеного максимуму, ви можете не отримати те, що очікували, оскільки memcached тоді розглядає значення як мітку часу Unix. Також, якщо мітка часу в минулому, вона не зробить нічого взагалі. Ваша команда буде беззвучно не виконана.
Тому, якщо ви хочете використовувати максимальний термін зберігання, вкажіть 2592000. Приклад:
Зникнення ключів при переповненні
Незважаючи на те, що документація говорить щось про обгортання значення, що переповнюється на 64 біти за допомогою "incr", це призводить до зникнення значення. Його потрібно створити знову за допомогою "add"/"set".
Реплікація
memcached сам по собі не підтримує реплікацію. Якщо вам дійсно це потрібно, вам потрібно використовувати рішення від сторонніх розробників:
repcached: Мульти-мастер асинхронна реплікація (набір патчів для memcached 1.2)
Couchbase інтерфейс memcached: Використовуйте CouchBase як заміну memcached
yrmcds: сумісне з memcached сховище ключ-значення Майстер-Слейв
twemproxy (також відомий як nutcracker): проксі з підтримкою memcached
Шпаргалка з команд
pageMemcache CommandsShodan
port:11211 "STAT pid"
"STAT pid"
References
Last updated