5984,6984 - Pentesting CouchDB
Основна інформація
CouchDB - це універсальна та потужна документ-орієнтована база даних, яка організовує дані за допомогою структури ключ-значення всередині кожного документа. Поля всередині документа можуть бути представлені у вигляді пар ключ/значення, списків або карт, що забезпечує гнучкість у зберіганні та отриманні даних.
Кожному документу, збереженому в CouchDB, надається унікальний ідентифікатор (_id
) на рівні документа. Крім того, кожна модифікація, зроблена та збережена в базі даних, отримує номер ревізії (_rev
). Цей номер ревізії дозволяє ефективно відстежувати та керувати змінами, сприяючи легкому отриманню та синхронізації даних у межах бази даних.
Порт за замовчуванням: 5984 (http), 6984 (https)
Автоматичне перелічення
Ручне перелікування
Банер
Це відправляє запит GET до встановленого екземпляра CouchDB. Відповідь повинна виглядати приблизно так, як один з наступних:
Зверніть увагу, що при доступі до кореня couchdb ви отримаєте 401 Unauthorized
з чимось на зразок цього: {"error":"unauthorized","reason":"Authentication required."}
ви не зможете отримати доступ до банера або будь-якого іншого кінцевого пункту.
Інформація про перелік
Це кінцеві точки, до яких ви можете отримати доступ за допомогою запиту GET та витягти деяку цікаву інформацію. Ви можете знайти більше кінцевих точок та більш детальні описи в документації couchdb.
/_active_tasks
Список запущених завдань, включаючи тип завдання, назву, статус та ідентифікатор процесу./_all_dbs
Повертає список всіх баз даних в екземплярі CouchDB./_cluster_setup
Повертає статус вузла або кластера, згідно з майстром налаштування кластера./_db_updates
Повертає список всіх подій баз даних в екземплярі CouchDB. Для використання цієї кінцевої точки потрібно наявність бази даних_global_changes
./_membership
Показує вузли, які є частиною кластера якcluster_nodes
. Полеall_nodes
показує всі вузли, які відомі цьому вузлу, включаючи ті, які є частиною кластера./_scheduler/jobs
Список робочих завдань реплікації. Кожен опис завдання буде містити інформацію про джерело та ціль, ідентифікатор реплікації, історію останніх подій та кілька інших речей./_scheduler/docs
Список станів документів реплікації. Містить інформацію про всі документи, навіть у станахcompleted
таfailed
. Для кожного документа повертається ідентифікатор документа, база даних, ідентифікатор реплікації, джерело та ціль та інша інформація./_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_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} для отримання поточної інформації про вузол./_node/{node-name}/_restart
/_up
Підтверджує, що сервер працює, готовий відповідати на запити. Якщоmaintenance_mode
єtrue
абоnolb
, кінцева точка поверне відповідь 404./_uuids
Запитує один або декілька унікальних ідентифікаторів (UUID) з екземпляра CouchDB./_reshard
Повертає кількість завершених, не вдалося, запущених, зупинених та загальних завдань разом із станом перерозподілу в кластері.
Більше цікавої інформації можна витягнути, як пояснено тут: https://lzone.de/cheat-sheet/CouchDB
Список баз даних
Якщо запит відповідає з 401 не авторизовано, тоді вам потрібні дійсні облікові дані, щоб отримати доступ до бази даних:
Для пошуку дійсних облікових даних ви можете спробувати зламати службу.
Це приклад відповіді couchdb, коли у вас є достатньо привілеїв для переліку баз даних (це просто список баз даних):
Інформація про базу даних
Ви можете отримати деяку інформацію про базу даних (наприклад, кількість файлів та їх розміри), звернувшись до назви бази даних:
Список документів
Перерахуйте кожен запис у базі даних
Читання документа
Прочитайте вміст документа у базі даних:
Підвищення привілеїв в CouchDB CVE-2017-12635
Благодаря різниці між парсерами JSON Erlang та JavaScript ви можете створити адміністратора з обліковими даними hacktricks:hacktricks
за допомогою наступного запиту:
Додаткова інформація про цю уразливість тут.
CouchDB RCE
Огляд безпеки Erlang Cookie
Приклад звідси.
У документації CouchDB, зокрема в розділі, що стосується налаштування кластера (посилання), обговорюється використання портів CouchDB у режимі кластера. Зазначається, що, як і в режимі автономної роботи, використовується порт 5984
. Додатково, порт 5986
призначений для локальних API вузла, і, що важливо, Erlang вимагає TCP-порт 4369
для демона відображення портів Erlang (EPMD), який сприяє взаємодії вузлів у межах кластера Erlang. Ця настройка формує мережу, де кожен вузол пов'язаний з кожним іншим вузлом.
Виділяється важливе попередження щодо порту 4369
. Якщо цей порт стане доступним через Інтернет або будь-яку ненадійну мережу, безпека системи в значній мірі залежатиме від унікального ідентифікатора, відомого як "cookie". Цей cookie виступає як захист. Наприклад, у даному списку процесів може бути помічено cookie з назвою "monster", що вказує на його робочу роль у системі безпеки.
Для тих, хто зацікавлений у розумінні того, як цей "cookie" може бути використаний для виконання коду на віддаленому сервері (RCE) в контексті систем Erlang, є окремий розділ для подальшого читання. Він детально описує методи використання cookie Erlang у несанкціонованих способах для отримання контролю над системами. Ви можете дізнатися більше про зловживання cookie Erlang для RCE тут.
Експлуатація CVE-2018-8007 шляхом зміни local.ini
Приклад тут.
Недавно опублікована уразливість, CVE-2018-8007, що впливає на Apache CouchDB, була досліджена, виявивши, що для експлуатації потрібні права на запис у файл local.ini
. Хоча це не застосовується безпосередньо до початкової цільової системи через обмеження безпеки, були внесені зміни для надання прав на запис у файл local.ini
для дослідницьких цілей. Нижче наведено детальні кроки та приклади коду, що демонструють процес.
Спочатку середовище готується шляхом переконання, що файл local.ini
доступний для запису, перевірено шляхом переліку дозволів:
Для використання вразливості виконується команда curl, спрямована на конфігурацію cors/origins
в local.ini
. Це додає новий початок разом з додатковими командами у розділі [os_daemons]
, спрямованих на виконання довільного коду:
Подальша перевірка показує внесену конфігурацію в local.ini
, порівнюючи її з резервною копією, щоб виділити зміни:
Початково очікуваний файл (/tmp/0xdf
) не існує, що свідчить про те, що викликана команда ще не виконана. Подальше розслідування показує, що працюють процеси, пов'язані з CouchDB, включаючи той, який може потенційно виконати викликану команду:
При завершенні ідентифікованого процесу CouchDB та дозволі системі автоматично перезапустити його, виконання впровадженої команди спрацьовує, що підтверджується наявністю раніше відсутнього файлу:
Це дослідження підтверджує можливість використання CVE-2018-8007 за певних умов, зокрема вимогу до доступу на запис до файлу local.ini
. Надані приклади коду та процедурні кроки надають чітке керівництво для реплікації експлойту в контрольованому середовищі.
Для отримання додаткових відомостей про CVE-2018-8007, дивіться рекомендації від mdsec: CVE-2018-8007.
Дослідження CVE-2017-12636 з правами на запис у local.ini
Приклад звідси.
Була досліджена вразливість під назвою CVE-2017-12636, яка дозволяє виконання коду через процес CouchDB, хоча певні конфігурації можуть запобігти її використанню. Незважаючи на наявність численних посилань на Proof of Concept (POC) в Інтернеті, необхідні налаштування для використання вразливості в CouchDB версії 2, відмінної від загально цілей версії 1.x. Початкові кроки включають перевірку версії CouchDB та підтвердження відсутності очікуваного шляху запитів серверів:
Для пристосування до версії CouchDB 2.0 використовується новий шлях:
Спроби додати та викликати новий сервер запитів зустрілися з помилками, пов'язаними з дозволами, як це вказано у наступному виводі:
Подальше розслідування виявило проблеми з дозволами у файлі local.ini
, який не можна було змінювати. Змінивши дозволи файлу за допомогою доступу root або homer, стало можливим продовжити:
Після цього спроби додати запит сервера були успішними, як це підтверджується відсутністю повідомлень про помилки у відповіді. Успішне змінення файлу local.ini
було підтверджено порівнянням файлів:
Процес продовжувався створенням бази даних та документа, за яким слідувала спроба виконати код через власне відображення виду, яке відповідає новій доданій серверній запиту:
Опис з альтернативним пейлоудом надає додаткові відомості про експлуатацію CVE-2017-12636 в певних умовах. Корисні ресурси для експлуатації цієї вразливості включають:
Shodan
port:5984 couchdb
Посилання
Last updated