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.
**CouchDB** - це універсальна та потужна **документно-орієнтована база даних**, яка організовує дані, використовуючи структуру **ключ-значення** в кожному **документі**. Поля в документі можуть бути представлені як **пари ключ/значення, списки або мапи**, що забезпечує гнучкість у зберіганні та отриманні даних.
Кожному **документу**, збереженому в CouchDB, присвоюється **унікальний ідентифікатор** (`_id`) на рівні документа. Крім того, кожна зміна, внесена та збережена в базі даних, отримує **номер версії** (`_rev`). Цей номер версії дозволяє ефективно **відстежувати та керувати змінами**, полегшуючи легке отримання та синхронізацію даних у базі даних.
Зверніть увагу, що якщо при доступі до кореня couchdb ви отримуєте `401 Unauthorized` з чимось на зразок цього: `{"error":"unauthorized","reason":"Authentication required."}`**ви не зможете отримати доступ** до банера або будь-якої іншої кінцевої точки.
Це кінцеві точки, до яких ви можете отримати доступ за допомогою **GET** запиту та витягти деяку цікаву інформацію. Ви можете знайти [**більше кінцевих точок та більш детальні описи в документації couchdb**](https://docs.couchdb.org/en/latest/api/index.html).
* **`/_all_dbs`** Повертає список усіх баз даних у екземплярі CouchDB.
* **`/_cluster_setup`** Повертає статус вузла або кластера, відповідно до майстра налаштування кластера.
* **`/_db_updates`** Повертає список усіх подій бази даних у екземплярі CouchDB. Існування бази даних `_global_changes` є обов'язковим для використання цієї кінцевої точки.
* **`/_membership`** Відображає вузли, які є частиною кластера, як `cluster_nodes`. Поле `all_nodes` відображає всі вузли, про які знає цей вузол, включаючи ті, що є частиною кластера.
* **`/_scheduler/jobs`** Список завдань реплікації. Опис кожного завдання включатиме інформацію про джерело та ціль, ідентифікатор реплікації, історію останніх подій та кілька інших речей.
* **`/_scheduler/docs`** Список станів документів реплікації. Включає інформацію про всі документи, навіть у станах `completed` та `failed`. Для кожного документа повертає ідентифікатор документа, базу даних, ідентифікатор реплікації, джерело та ціль, а також іншу інформацію.
* **`/_node/{node-name}`** Кінцева точка `/_node/{node-name}` може бути використана для підтвердження імені вузла Erlang сервера, який обробляє запит. Це найбільш корисно при доступі до `/_node/_local`, щоб отримати цю інформацію.
* **`/_node/{node-name}/_stats`** Ресурс`_stats` повертає об'єкт JSON, що містить статистику для запущеного сервера. Літеральний рядок `_local` служить псевдонімом для імені локального вузла, тому для всіх URL статистики `{node-name}` може бути замінено на `_local`, щоб взаємодіяти зі статистикою локального вузла.
* **`/_node/{node-name}/_system`** Ресурс \_system повертає об'єкт JSON, що містить різну статистику на рівні системи для запущеного сервера\_.\_ Ви можете використовувати \_\_`_local` як {node-name}, щоб отримати інформацію про поточний вузол.
* **`/_up`** Підтверджує, що сервер працює, запущений і готовий відповідати на запити. Якщо [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode) є `true`або`nolb`, кінцева точка поверне відповідь 404.
* **`/_uuids`** Запитує один або кілька універсально унікальних ідентифікаторів (UUID) з екземпляра CouchDB.
* **`/_reshard`** Повертає кількість завершених, невдалих, запущених, зупинених та загальних завдань разом зі станом перерозподілу на кластері.
Завдяки відмінностям між парсерами JSON Erlang та JavaScript ви можете **створити адміністратора** з обліковими даними `hacktricks:hacktricks` за допомогою наступного запиту:
У документації CouchDB, зокрема в розділі, що стосується налаштування кластеру ([посилання](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), обговорюється використання портів CouchDB в режимі кластеру. Зазначається, що, як і в автономному режимі, використовується порт `5984`. Крім того, порт `5986` призначений для локальних API вузлів, а важливо, що Erlang вимагає TCP порт `4369` для демона відображення портів Erlang (EPMD), що полегшує зв'язок між вузлами в кластері Erlang. Це налаштування формує мережу, де кожен вузол пов'язаний з усіма іншими вузлами.
Особливу увагу слід звернути на безпеку порту `4369`. Якщо цей порт стає доступним через Інтернет або будь-яку ненадійну мережу, безпека системи сильно залежить від унікального ідентифікатора, відомого як "cookie". Цей cookie діє як засіб захисту. Наприклад, у даному списку процесів може бути спостережено cookie з назвою "monster", що вказує на його операційну роль у системі безпеки.
Для тих, хто зацікавлений у розумінні того, як цей "cookie" може бути використаний для віддаленого виконання коду (RCE) в контексті систем Erlang, доступний спеціальний розділ для подальшого читання. Він детально описує методології використання cookie Erlang несанкціонованими способами для досягнення контролю над системами. Ви можете **[дослідити детальний посібник з зловживання cookie Erlang для RCE тут](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.
Недавно розкрита вразливість, CVE-2018-8007, що впливає на Apache CouchDB, була досліджена, виявивши, що для експлуатації потрібні права на запис до файлу `local.ini`. Хоча це не було безпосередньо застосовно до початкової цільової системи через обмеження безпеки, були внесені зміни, щоб надати доступ на запис до файлу `local.ini` для цілей дослідження. Нижче наведені детальні кроки та приклади коду, що демонструють процес.
Щоб експлуатувати вразливість, виконується команда curl, націлена на конфігурацію `cors/origins`у`local.ini`. Це інжектує новий походження разом з додатковими командами в секцію `[os_daemons]`, з метою виконання довільного коду:
Спочатку очікуваний файл (`/tmp/0xdf`) не існує, що вказує на те, що ін'єкована команда ще не була виконана. Подальше розслідування виявляє, що запущені процеси, пов'язані з CouchDB, включаючи один, який потенційно може виконати ін'єковану команду:
Завершивши виявлений процес CouchDB і дозволивши системі автоматично перезапустити його, виконується ін'єкована команда, що підтверджується наявністю раніше відсутнього файлу:
Це дослідження підтверджує життєздатність експлуатації CVE-2018-8007 за певних умов, зокрема вимогу наявності прав на запис до файлу `local.ini`. Наведені приклади коду та процедурні кроки пропонують чіткий посібник для відтворення експлуатації в контрольованому середовищі.
Для отримання додаткової інформації про CVE-2018-8007, зверніться до рекомендацій mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
Вразливість, відома як CVE-2017-12636, була досліджена, що дозволяє виконання коду через процес CouchDB, хоча певні конфігурації можуть перешкоджати її експлуатації. Незважаючи на численні посилання на Proof of Concept (POC), доступні в Інтернеті, необхідні коригування для експлуатації вразливості на версії CouchDB 2, яка відрізняється від зазвичай націленої версії 1.x. Початкові кроки включають перевірку версії CouchDB та підтвердження відсутності очікуваного шляху серверів запитів:
Подальше розслідування виявило проблеми з дозволами на файл `local.ini`, який не можна було змінити. Змінивши дозволи файлу з доступом root або homer, стало можливим продовжити:
Наступні спроби додати сервер запитів були успішними, про що свідчить відсутність повідомлень про помилки у відповіді. Успішна модифікація файлу `local.ini` була підтверджена через порівняння файлів:
Процес продовжився створенням бази даних та документа, після чого була спроба виконати код через користувацьке відображення, що відображає новостворений сервер запитів:
A **[резюме](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0)** з альтернативним payload надає додаткові відомості про експлуатацію CVE-2017-12636 за певних умов. **Корисні ресурси** для експлуатації цієї вразливості включають:
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.