Learn & practice AWS Hacking:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Learn & practice GCP Hacking: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
З [документації](https://redis.io/topics/introduction): Redis - це відкритий код (ліцензія BSD), сховище **структур даних** в пам'яті, яке використовується як **база даних**, кеш і брокер повідомлень.
За замовчуванням Redis використовує протокол на основі простого тексту, але ви повинні пам'ятати, що він також може реалізувати **ssl/tls**. Дізнайтеся, як [запустити Redis з ssl/tls тут](https://fossies.org/linux/redis/TLS.md).
Redis є **текстовим протоколом**, ви можете просто **надіслати команду в сокет**і повернуті значення будуть читабельними. Також пам'ятайте, що Redis може працювати з використанням **ssl/tls** (але це дуже дивно).
Першою командою, яку ви можете спробувати, є **`info`**. Вона **може повернути вихід з інформацією** про екземпляр Redis **або щось** подібне до наступного:
**За замовчуванням** Redis можна отримати доступ **без облікових даних**. Однак його можна **налаштувати** на підтримку **тільки пароля або імені користувача + пароля**.\
Можна **встановити пароль**у файлі _**redis.conf**_ за допомогою параметра `requirepass`**або тимчасово** до перезапуску служби, підключившись до неї та виконавши: `config set requirepass p@ss$12E45`.\
Також можна налаштувати **ім'я користувача** в параметрі `masteruser` всередині файлу _**redis.conf**_.
У таких випадках вам **потрібно знайти дійсні облікові дані** для взаємодії з Redis, тому ви можете спробувати [**brute-force**](../generic-methodologies-and-resources/brute-force.md#redis).\
**У разі, якщо ви знайшли дійсні облікові дані, вам потрібно аутентифікувати сесію** після встановлення з'єднання за допомогою команди:
Якщо сервер Redis дозволяє **анонімні з'єднання**або якщо ви отримали дійсні облікові дані, ви можете розпочати процес енумерації для служби, використовуючи наступні **команди**:
Зверніть увагу, що **команди Redis екземпляра можуть бути перейменовані**або видалені у файлі _redis.conf_. Наприклад, цей рядок видалить команду FLUSHDB:
Більше про безпечну конфігурацію служби Redis тут: [https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04)
Ви також можете **моніторити в реальному часі команди Redis**, виконані за допомогою команди **`monitor`**, або отримати топ **25 найповільніших запитів** за допомогою **`slowlog get 25`**
У Redis **бази даних - це числа, що починаються з 0**. Ви можете дізнатися, чи використовується якась з них, у виході команди `info`у частині "Keyspace":
У цьому прикладі використовуються **бази даних 0 та 1**. **База даних 0 містить 4 ключі, а база даних 1 містить 1**. За замовчуванням Redis використовуватиме базу даних 0. Щоб, наприклад, скинути базу даних 1, вам потрібно зробити:
У випадку, якщо ви отримаєте наступну помилку `-WRONGTYPE Operation against a key holding the wrong kind of value` під час виконання `GET <KEY>`, це може бути через те, що ключ може бути чимось іншим, ніж рядок або ціле число, і вимагає спеціального оператора для його відображення.
**Вивантажте базу даних за допомогою npm**[ **redis-dump**](https://www.npmjs.com/package/redis-dump) **або python** [**redis-utils**](https://pypi.org/project/redis-utils/)
Приєднуйтесь до [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!
[**redis-rogue-server**](https://github.com/n0b0dyCN/redis-rogue-server) може автоматично отримати інтерактивну оболонку або зворотну оболонку в Redis(<=5.0.5).
Інформація з [**тут**](https://web.archive.org/web/20191201022931/http://reverse-tcp.xyz/pentest/database/2017/02/09/Redis-Hacking-Tips.html). Ви повинні знати **шлях** до **папки веб-сайту**:
Якщо виникає виняток доступу до веб-оболонки, ви можете очистити базу даних після резервного копіювання і спробувати знову, не забувайте відновити базу даних.
Як і в попередньому розділі, ви також можете перезаписати деякий html шаблонний файл, який буде інтерпретовано шаблонним двигуном, і отримати оболонку.
Наприклад, слідуючи [**цьому опису**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), ви можете побачити, що зловмисник вставив **rev shell в html**, інтерпретований **двигуном шаблонів nunjucks:**
Зверніть увагу, що **декілька шаблонних движків кешують** шаблони в **пам'яті**, тому навіть якщо ви їх перезапишете, новий **не буде виконаний**. У таких випадках або розробник залишив автоматичне перезавантаження активним, або вам потрібно зробити DoS над сервісом (і сподіватися, що він буде перезапущений автоматично).
Будь ласка, зверніть увагу, що результат **`config get dir`** може змінитися після інших ручних експлойт-команд. Рекомендується виконати його спочатку відразу після входу в Redis. У виході **`config get dir`** ви можете знайти **домашню** директорію **користувача redis** (зазвичай _/var/lib/redis_або_/home/redis/.ssh_), і знаючи це, ви знаєте, куди можна записати файл `authenticated_users` для доступу через ssh **з користувачем redis**. Якщо ви знаєте домашню директорію іншого дійсного користувача, де у вас є права на запис, ви також можете зловживати цим:
1. Дотримуючись інструкцій з [https://github.com/n0b0dyCN/RedisModules-ExecuteCommand](https://github.com/n0b0dyCN/RedisModules-ExecuteCommand), ви можете **скомпілювати модуль redis для виконання довільних команд**.
2. Потім вам потрібен спосіб **завантажити скомпільований** модуль.
3.**Завантажте завантажений модуль** під час виконання за допомогою `MODULE LOAD /path/to/mymodule.so`.
4.**Перерахуйте завантажені модулі**, щоб перевірити, чи був він правильно завантажений: `MODULE LIST`.
[**Тут**](https://www.agarri.fr/blog/archives/2014/09/11/trying\_to\_hack\_redis\_via\_http\_requests/index.html) ви можете побачити, що Redis використовує команду **EVAL** для виконання **коду Lua в пісочниці**. У пов'язаному пості ви можете побачити, **як зловживати цим**, використовуючи функцію **dofile**, але [очевидно](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval), що це більше не можливо. У будь-якому випадку, якщо ви можете **обійти пісочницю Lua**, ви могли б**виконати довільні** команди на системі. Також, з того ж посту ви можете побачити деякі **варіанти для виклику DoS**.
Головний redis автоматично синхронізує всі операції з slave redis, що означає, що ми можемо розглядати вразливий redis як slave redis, підключений до головного redis, який ми контролюємо, тоді ми можемо ввести команду до нашого власного redis.
Якщо ви можете надіслати **текстовий** запит **до Redis**, ви можете **спілкуватися з ним**, оскільки Redis буде читати запит рядок за рядком і просто відповідати помилками на рядки, які не розуміє:
Тому, якщо ви знайдете **SSRF vuln** на веб-сайті і зможете **контролювати** деякі **заголовки** (можливо, з вразливістю CRLF) або**POST параметри**, ви зможете надсилати довільні команди до Redis.
У**Gitlab11.4.7** була виявлена **SSRF** вразливість та **CRLF**. **SSRF** вразливість була в **функціоналі імпорту проекту з URL** під час створення нового проекту і дозволяла отримувати доступ до довільних IP-адрес у формі \[0:0:0:0:0:ffff:127.0.0.1] (це отримує доступ до 127.0.0.1), а вразливість **CRLF** була використана просто **додаванням символів %0D%0A** до **URL**.
Тому було можливим **зловживати цими вразливостями, щоб спілкуватися з екземпляром Redis**, який **керує чергами** з **gitlab**і зловживати цими чергами, щоб **отримати виконання коду**. Пейлоад зловживання чергою Redis:
_З якоїсь причини (як для автора_ [_https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/_](https://liveoverflow.com/gitlab-11-4-7-remote-code-execution-real-world-ctf-2018/) _звідки була взята ця інформація) експлуатація працювала з схемою `git`, а не з схемою `http`._
Приєднуйтесь до [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) сервера, щоб спілкуватися з досвідченими хакерами та шукачами вразливостей!
Вчіться та практикуйте хакінг AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Вчіться та практикуйте хакінг GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)