<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
CouchDB es una base de datos orientada a documentos y dentro de cada documento los campos se almacenan como mapas de clave-valor. Los campos pueden ser un par clave/valor simple, una lista o un mapa.
Cada documento almacenado en la base de datos recibe un identificador único a nivel de documento (`_id`) así como un número de revisión (`_rev`) para cada cambio que se realiza y se guarda en la base de datos.
Tenga en cuenta que si al acceder a la raíz de couchdb recibe un `401 Unauthorized` con algo como esto: `{"error":"unauthorized","reason":"Authentication required."}`, **no podrá acceder** al banner ni a ningún otro punto final.
Estos son los puntos finales a los que puede acceder con una solicitud **GET** y extraer información interesante. Puede encontrar [**más puntos finales y descripciones más detalladas en la documentación de couchdb**](https://docs.couchdb.org/en/latest/api/index.html).
* **`/_db_updates`** Devuelve una lista de todos los eventos de base de datos en la instancia de CouchDB. La existencia de la base de datos `_global_changes` es necesaria para utilizar este punto final.
* **`/_membership`** Muestra los nodos que forman parte del clúster como `cluster_nodes`. El campo `all_nodes` muestra todos los nodos que este nodo conoce, incluyendo los que son parte del clúster.
* **`/_scheduler/jobs`** Lista de trabajos de replicación. Cada descripción del trabajo incluirá información de origen y destino, ID de replicación, un historial de eventos recientes y algunas otras cosas.
* **`/_scheduler/docs`** Lista de estados de documentos de replicación. Incluye información sobre todos los documentos, incluso en estados `completed` y `failed`. Para cada documento, devuelve el ID del documento, la base de datos, el ID de replicación, origen y destino, y otra información.
* **`/_node/{node-name}`** El punto final `/_node/{node-name}` se puede utilizar para confirmar el nombre del nodo Erlang del servidor que procesa la solicitud. Esto es más útil al acceder a `/_node/_local` para obtener esta información.
* **`/_node/{node-name}/_stats`** El recurso `_stats` devuelve un objeto JSON que contiene las estadísticas del servidor en funcionamiento. La cadena literal `_local` sirve como alias para el nombre del nodo local, por lo que para todas las URL de estadísticas, `{node-name}` puede ser reemplazado por `_local`, para interactuar con las estadísticas del nodo local.
* **`/_node/{node-name}/_system`** El recurso \_system devuelve un objeto JSON que contiene varias estadísticas a nivel de sistema para el servidor en funcionamiento\_.\_ Puede usar \_\_`_local` como {node-name} para obtener información del nodo actual.
* **`/_up`** Confirma que el servidor está activo, en funcionamiento y listo para responder a las solicitudes. Si [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode) es `true` o `nolb`, el punto final devolverá una respuesta 404.
* \*\*`/_uuids`\*\*Solicita uno o más Identificadores Únicos Universales (UUIDs) de la instancia de CouchDB.
* \*\*`/_reshard`\*\*Devuelve un recuento de trabajos completados, fallidos, en ejecución, detenidos y el total junto con el estado del reajuste en el clúster.
Para encontrar Credenciales válidas podrías **intentar** [**fuerza bruta en el servicio**](../generic-methodologies-and-resources/brute-force.md#couchdb).
Este es un **ejemplo** de una **respuesta** de couchdb cuando tienes **suficientes privilegios** para listar bases de datos (Es solo una lista de dbs):
Gracias a las diferencias entre los analizadores de JSON de Erlang y JavaScript, podrías **crear un usuario administrador** con las credenciales `hacktricks:hacktricks` con la siguiente solicitud:
En la documentación de CouchDB, en la [sección de configuración de clúster](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup), se habla sobre los diferentes puertos utilizados por CouchDB:
> Erlang utiliza el puerto TCP `4369` (EPMD) para encontrar otros nodos, por lo que todos los servidores deben poder comunicarse entre sí en este puerto. En un Clúster de Erlang, todos los nodos están conectados con todos los demás nodos. Una malla.
**Puedes**[ **leer esta sección para aprender cómo abusar de las cookies de Erlang para obtener RCE**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.**\
También puedes leer algunos **writeups de la máquina HTB Canape** [**como este**](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution) para ver y **practicar** cómo **explotar esta vulnerabilidad**.
Al escribir este post, descubrí que se había publicado un nuevo CVE para CouchDB de mdsec, [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/). También requiere permisos de escritura en el archivo `local.ini`, por lo que no es una opción útil para Canape. Pero ya que lo he hecho escribible como root, veamos si podemos hacer que funcione.
Podemos usar curl para modificar los orígenes en el archivo `local.ini`. La vulnerabilidad aquí es que si usamos curl para poner un nuevo origen y luego nuevas líneas, podemos escribir cosas adicionales, incluyendo un nuevo encabezado y detalles. Así que aprovecharemos el campo `[os_daemons]`, y añadiremos un proceso para que CouchDB intente seguir ejecutándose:
Si observamos los procesos en ejecución con "couchdb" en la línea de comandos, vemos no solo la línea de comandos que nos proporciona el valor de la cookie que usamos anteriormente, sino también `runsrv couchdb`:
Necesitaríamos escribir un nuevo query\_server y luego invocarlo. Cuando se lanzó Canape, la mayoría de los POCs eran para couchdb 1.x, pero esta caja está ejecutando la versión 2, por lo que la ruta de query\_servers de la mayoría de los POCs no existe. Eso ha cambiado ahora, pero seguiremos los mismos pasos. Primero, obtener la versión y mostrar que la ruta 1.X no existe:
Algunas búsquedas en Google muestran que este es un problema con los permisos. De hecho, si verificamos con nuestra shell de root, podemos ver que el archivo `local.ini` no es editable por nadie, y mucho menos por www-data:
Eso es un callejón sin salida para Canape. Pero si queremos intentar hacerlo funcionar, podemos hacerlo legible con nuestro acceso root o homer, y continuar por este camino. Haremos una copia de seguridad del original para poder ver los cambios:
Ahora, deberíamos poder crear una base de datos (db), y luego un documento en esa db, y luego solicitarlo con una vista que mapea nuestro query_server para obtener ejecución.
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).