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)
З вікіпедії:
Memcached (вимова: мем-кешд, мем-кеш-ді) — це загальносистемна розподілена система кешування пам'яті. Вона часто використовується для прискорення динамічних веб-сайтів, що працюють з базами даних, шляхом кешування даних та об'єктів у пам'яті (RAM), щоб зменшити кількість разів, коли зовнішнє джерело даних (таке як база даних або API) потрібно читати.
Хоча Memcached підтримує SASL, більшість екземплярів відкриті без аутентифікації.
Порт за замовчуванням: 11211
Щоб ексфільтрувати всю інформацію, збережену в екземплярі memcache, вам потрібно:
Знайти slabs з активними елементами
Отримати імена ключів виявлених раніше slabs
Ексфільтрувати збережені дані, отримавши імена ключів
Пам'ятайте, що ця служба є лише кешем, тому дані можуть з'являтися і зникати.
У сфері memcache, протоколу, що допомагає організовувати дані за допомогою слебів, існують специфічні команди для перевірки збережених даних, хоча з помітними обмеженнями:
Ключі можуть бути вивантажені лише за класом слеба, групуючи ключі схожого розміру вмісту.
Існує обмеження в одну сторінку на клас слеба, що дорівнює 1MB даних.
Ця функція є неофіційною і може бути припинена в будь-який момент, як обговорюється на форумі спільноти.
Обмеження на вивантаження лише 1MB з потенційно гігабайтів даних є особливо значним. Однак ця функціональність все ще може надати уявлення про патерни використання ключів, залежно від конкретних потреб. Для тих, хто менш зацікавлений у механіці, візит до розділу інструментів розкриває утиліти для комплексного вивантаження. Альтернативно, процес використання telnet для прямої взаємодії з налаштуваннями memcached описано нижче.
Організація пам'яті memcache є ключовою. Ініціювання memcache з опцією "-vv" виявляє класи слебів, які він генерує, як показано нижче:
Щоб відобразити всі існуючі slabs, використовується наступна команда:
Додавання єдиного ключа до memcached 1.4.13 ілюструє, як заповнюються та управляються класи плит. Наприклад:
Виконання команди "stats slabs" після додавання ключа дає детальну статистику про використання слебів:
Цей вихід показує активні типи плит, використані частини та оперативну статистику, надаючи інформацію про ефективність операцій читання та запису.
Ще одна корисна команда, "stats items", надає дані про виселення, обмеження пам'яті та життєві цикли елементів:
Ця статистика дозволяє робити обґрунтовані припущення про поведінку кешування додатків, включаючи ефективність кешу для різних розмірів контенту, виділення пам'яті та ємність для кешування великих об'єктів.
Для версій до 1.4.31 ключі вивантажуються за класом плити за допомогою:
Наприклад, щоб вивантажити ключ у класі #1:
Цей метод ітерує по класах плит, витягуючи та за бажанням вивантажуючи значення ключів.
З версією memcache 1.4.31 та вище, введено новий, більш безпечний метод для вивантаження ключів у виробничому середовищі, що використовує неблокуючий режим, як детально описано в примітках до випуску. Цей підхід генерує великий обсяг виходу, тому рекомендується використовувати команду 'nc' для ефективності. Приклади включають:
Table from here.
libmemcached
Заморожує ваш процес memcached!!! Будьте обережні, використовуючи це в продуктивному середовищі. Все ще використовуючи це, ви можете обійти обмеження в 1 МБ і дійсно вивантажити всі ключі.
Зверніть увагу, що до memcached 1.4 ви не можете зберігати об'єкти, більші за 1 МБ через максимальний розмір плити за замовчуванням.
Якщо ви намагаєтеся “встановити” або “додати” ключ з тайм-аутом, більшим за дозволене максимальне, ви можете не отримати те, що очікуєте, оскільки memcached тоді трактує значення як Unix-мітку часу. Також, якщо мітка часу в минулому, вона нічого не зробить. Ваша команда тихо зазнає невдачі.
Отже, якщо ви хочете використовувати максимальний термін служби, вкажіть 2592000. Приклад:
Незважаючи на те, що в документації сказано, що обгортання 64-бітного переповнення значення за допомогою “incr” призводить до зникнення значення. Його потрібно створити знову за допомогою “add”/”set”.
memcached сам по собі не підтримує реплікацію. Якщо вам це дійсно потрібно, вам слід використовувати рішення сторонніх розробників:
repcached: Багато майстрів асинхронна реплікація (патч набір memcached 1.2)
Couchbase memcached interface: Використовуйте CouchBase як заміну memcached
yrmcds: Сумісний з memcached Master-Slave сховище ключ-значення
twemproxy (також відомий як nutcracker): проксі з підтримкою memcached
port:11211 "STAT pid"
"STAT pid"
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)