<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) Github-Repositories senden.
**CouchDB** ist eine vielseitige und leistungsstarke **dokumentenorientierte Datenbank**, die Daten mithilfe einer **Schlüssel-Wert-Zuordnung** innerhalb jedes **Dokuments** organisiert. Felder innerhalb des Dokuments können als **Schlüssel/Wert-Paare, Listen oder Maps** dargestellt werden, was Flexibilität bei der Speicherung und Abfrage von Daten ermöglicht.
Jedes in CouchDB gespeicherte **Dokument** erhält auf Dokumentenebene eine **eindeutige Kennung** (`_id`). Darüber hinaus wird jeder vorgenommene und in der Datenbank gespeicherte Änderung eine **Revisionsnummer** (`_rev`) zugewiesen. Diese Revisionsnummer ermöglicht eine effiziente **Verfolgung und Verwaltung von Änderungen**, erleichtert das einfache Abrufen und Synchronisieren von Daten in der Datenbank.
Automatic enumeration is a crucial step in the process of pentesting CouchDB. It involves gathering information about the target system without any manual intervention. This can be done using various tools and techniques.
### **1. Nmap**
Nmap is a powerful network scanning tool that can be used to discover open ports and services running on a target system. To scan for CouchDB, you can use the following command:
```
nmap -p 5984 <target_ip>
```
### **2. Curl**
Curl is a command-line tool that allows you to make HTTP requests. You can use it to interact with the CouchDB API and gather information about the databases and documents present on the target system. Here are a few examples of curl commands that can be used for enumeration:
- To list all databases:
```
curl -X GET http://<target_ip>:5984/_all_dbs
```
- To retrieve information about a specific database:
- To retrieve a specific document from a database:
```
curl -X GET http://<target_ip>:5984/<database_name>/<document_id>
```
### **3. Fauxton**
Fauxton is the web-based administration interface for CouchDB. It provides a graphical user interface that allows you to manage and interact with CouchDB instances. By accessing Fauxton on the target system, you can gather information about the databases, documents, and users present on the CouchDB instance.
To access Fauxton, open a web browser and navigate to `http://<target_ip>:5984/_utils`.
### **4. Metasploit**
Metasploit is a popular penetration testing framework that includes a wide range of tools and modules for various tasks. It also provides modules for CouchDB enumeration. You can use the `couchdb_enum` module in Metasploit to automatically enumerate databases and documents on a CouchDB instance.
To use the `couchdb_enum` module, open Metasploit and run the following commands:
```
use auxiliary/scanner/couchdb/couchdb_enum
set RHOSTS <target_ip>
run
```
These are some of the tools and techniques that can be used for automatic enumeration of CouchDB during a pentesting engagement. By gathering information about the target system, you can gain valuable insights that can be used for further exploitation and vulnerability assessment.
Der Banner ist eine Information, die vom CouchDB-Server zurückgegeben wird, wenn eine Verbindung hergestellt wird. Es enthält Informationen wie die Version der CouchDB-Software und andere Details, die für einen Angreifer nützlich sein können. Um den Banner zu erhalten, kann das Tool `curl` verwendet werden:
curl -X GET http://<IP>:<Port>/<Database_Name> -u <Username>:<Password>
```
Wenn der Benutzer keine Berechtigung hat, wird eine Fehlermeldung zurückgegeben.
### Schwache Passwörter überprüfen
Um schwache Passwörter auf dem CouchDB-Server zu überprüfen, kann das Tool `couchdb-cracker` verwendet werden. Es kann mit dem folgenden Befehl installiert werden:
```plaintext
pip install couchdb-cracker
```
Nach der Installation kann das Tool wie folgt verwendet werden:
Beachten Sie, dass beim Zugriff auf die Wurzel von CouchDB eine `401 Unauthorized`-Fehlermeldung mit einer Meldung wie dieser angezeigt wird: `{"error":"unauthorized","reason":"Authentication required."}`**Sie können nicht auf** das Banner oder einen anderen Endpunkt zugreifen.
Dies sind die Endpunkte, auf die Sie mit einer **GET**-Anfrage zugreifen und einige interessante Informationen extrahieren können. Sie können [**weitere Endpunkte und detailliertere Beschreibungen in der CouchDB-Dokumentation**](https://docs.couchdb.org/en/latest/api/index.html) finden.
* **`/_active_tasks`** Liste der laufenden Aufgaben, einschließlich des Aufgabentyps, des Namens, des Status und der Prozess-ID.
* **`/_all_dbs`** Gibt eine Liste aller Datenbanken in der CouchDB-Instanz zurück.
* **`/_cluster_setup`** Gibt den Status des Knotens oder Clusters gemäß dem Cluster-Setup-Assistenten zurück.
* **`/_db_updates`** Gibt eine Liste aller Datenbankereignisse in der CouchDB-Instanz zurück. Das Vorhandensein der Datenbank `_global_changes` ist erforderlich, um diesen Endpunkt zu verwenden.
* **`/_membership`** Zeigt die Knoten an, die Teil des Clusters sind, als `cluster_nodes`. Das Feld `all_nodes` zeigt alle Knoten an, die dieser Knoten kennt, einschließlich derjenigen, die Teil des Clusters sind.
* **`/_scheduler/jobs`** Liste der Replikationsaufträge. Jede Auftragsbeschreibung enthält Informationen über Quelle und Ziel, Replikations-ID, eine Historie der letzten Ereignisse und einige andere Dinge.
* **`/_scheduler/docs`** Liste der Replikationsdokumentzustände. Enthält Informationen zu allen Dokumenten, auch in den Zuständen `completed` und `failed`. Für jedes Dokument werden die Dokument-ID, die Datenbank, die Replikations-ID, Quelle und Ziel sowie andere Informationen zurückgegeben.
* **`/_node/{node-name}`** Der Endpunkt `/_node/{node-name}` kann verwendet werden, um den Erlang-Knotennamen des Servers zu bestätigen, der die Anfrage verarbeitet. Dies ist besonders nützlich, wenn Sie auf `/_node/_local` zugreifen, um diese Informationen abzurufen.
* **`/_node/{node-name}/_stats`** Die Ressource `_stats` gibt ein JSON-Objekt zurück, das die Statistiken für den laufenden Server enthält. Der Literalstring `_local` dient als Alias für den lokalen Knotennamen. Daher kann für alle Statistik-URLs `{node-name}` durch `_local` ersetzt werden, um mit den Statistiken des lokalen Knotens zu interagieren.
* **`/_node/{node-name}/_system`** Die Ressource `_system` gibt ein JSON-Objekt zurück, das verschiedene systemweite Statistiken für den laufenden Server enthält. Sie können `_local` als `{node-name}` verwenden, um Informationen zum aktuellen Knoten zu erhalten.
* **`/_up`** Bestätigt, dass der Server aktiv, ausgeführt und bereit ist, auf Anfragen zu antworten. Wenn [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode) auf `true` oder `nolb` gesetzt ist, gibt der Endpunkt eine 404-Fehlermeldung zurück.
* **`/_uuids`** Fordert eine oder mehrere universell eindeutige Bezeichner (UUIDs) von der CouchDB-Instanz an.
* **`/_reshard`** Gibt eine Anzahl abgeschlossener, fehlgeschlagener, laufender, gestoppter und insgesamt ausgeführter Jobs sowie den Zustand des Resharding im Cluster zurück.
Weitere interessante Informationen können wie hier erklärt extrahiert werden: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB)
Dies ist ein Beispiel für eine CouchDB-Antwort, wenn Sie ausreichende Berechtigungen haben, um Datenbanken aufzulisten (Es handelt sich nur um eine Liste von Datenbanken):
Dank der Unterschiede zwischen den Erlang- und JavaScript-JSON-Parsern können Sie mit folgendem Befehl einen Administrator-Benutzer mit den Anmeldeinformationen `hacktricks:hacktricks` erstellen:
In der CouchDB-Dokumentation, speziell im Abschnitt zur Cluster-Einrichtung ([Link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), wird die Verwendung von Ports durch CouchDB im Cluster-Modus diskutiert. Es wird erwähnt, dass, wie im Standalone-Modus, Port `5984` verwendet wird. Zusätzlich wird Port `5986` für node-lokale APIs verwendet und wichtig ist, dass Erlang TCP-Port `4369` für den Erlang Port Mapper Daemon (EPMD) benötigt, der die Kommunikation zwischen den Knoten in einem Erlang-Cluster ermöglicht. Diese Einrichtung bildet ein Netzwerk, in dem jeder Knoten mit jedem anderen Knoten verbunden ist.
Ein wichtiger Sicherheitshinweis betrifft Port `4369`. Wenn dieser Port über das Internet oder ein ungesichertes Netzwerk zugänglich gemacht wird, hängt die Sicherheit des Systems stark von einem eindeutigen Identifikator ab, der als "Cookie" bezeichnet wird. Dieser Cookie dient als Schutzmaßnahme. Zum Beispiel könnte in einer gegebenen Prozessliste der Cookie mit dem Namen "monster" beobachtet werden, was auf seine operative Rolle im Sicherheitsframework des Systems hinweist.
Für diejenigen, die verstehen möchten, wie dieses "Cookie" für Remote Code Execution (RCE) im Kontext von Erlang-Systemen ausgenutzt werden kann, steht ein eigener Abschnitt für weitere Informationen zur Verfügung. Dort werden die Methoden zur unbefugten Nutzung von Erlang-Cookies zur Übernahme der Kontrolle über Systeme detailliert beschrieben. Sie können **[hier den detaillierten Leitfaden zur Ausnutzung von Erlang-Cookies für RCE erkunden](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.
Eine kürzlich bekannt gegebene Schwachstelle, CVE-2018-8007, die Apache CouchDB betrifft, wurde untersucht und dabei festgestellt, dass für die Ausnutzung Schreibberechtigungen für die `local.ini`-Datei erforderlich sind. Obwohl dies aufgrund von Sicherheitsbeschränkungen nicht direkt auf das anfängliche Zielsystem anwendbar ist, wurden Änderungen vorgenommen, um Schreibzugriff auf die `local.ini`-Datei zu gewähren, um den Prozess zu erkunden. Detaillierte Schritte und Codebeispiele werden unten bereitgestellt, um den Vorgang zu veranschaulichen.
Zunächst wird die Umgebung vorbereitet, indem sichergestellt wird, dass die `local.ini`-Datei beschreibbar ist. Dies wird überprüft, indem die Berechtigungen aufgelistet werden:
Um die Schwachstelle auszunutzen, wird ein Curl-Befehl ausgeführt, der auf die `cors/origins`-Konfiguration in `local.ini` abzielt. Dadurch wird ein neuer Ursprung zusammen mit zusätzlichen Befehlen unter dem Abschnitt `[os_daemons]` eingefügt, um beliebigen Code auszuführen:
Nachfolgende Überprüfung zeigt die injizierte Konfiguration in `local.ini`, indem sie sie mit einem Backup vergleicht, um die Änderungen hervorzuheben:
Zunächst existiert die erwartete Datei (`/tmp/0xdf`) nicht, was darauf hinweist, dass der injizierte Befehl noch nicht ausgeführt wurde. Weitere Untersuchungen zeigen, dass Prozesse im Zusammenhang mit CouchDB ausgeführt werden, darunter einer, der potenziell den injizierten Befehl ausführen könnte:
Durch Beenden des identifizierten CouchDB-Prozesses und Zulassen des automatischen Neustarts wird die Ausführung des injizierten Befehls ausgelöst, wie durch das Vorhandensein der zuvor fehlenden Datei bestätigt wird:
Diese Untersuchung bestätigt die Durchführbarkeit der Ausnutzung von CVE-2018-8007 unter bestimmten Bedingungen, insbesondere der Notwendigkeit eines beschreibbaren Zugriffs auf die Datei `local.ini`. Die bereitgestellten Codebeispiele und Verfahrensschritte bieten eine klare Anleitung zur Reproduktion des Exploits in einer kontrollierten Umgebung.
Für weitere Details zu CVE-2018-8007 siehe den Bericht von mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
Es wurde eine Schwachstelle namens CVE-2017-12636 untersucht, die die Ausführung von Code über den CouchDB-Prozess ermöglicht, obwohl bestimmte Konfigurationen ihre Ausnutzung verhindern können. Trotz zahlreicher verfügbarer Proof-of-Concept (POC)-Referenzen sind Anpassungen erforderlich, um die Schwachstelle in CouchDB Version 2 auszunutzen, die sich von der üblicherweise angegriffenen Version 1.x unterscheidet. Die ersten Schritte bestehen darin, die CouchDB-Version zu überprüfen und das Fehlen des erwarteten Query-Server-Pfads zu bestätigen:
Weitere Untersuchungen ergaben Berechtigungsprobleme mit der `local.ini`-Datei, die nicht beschreibbar war. Durch Ändern der Dateiberechtigungen mit Root- oder Homer-Zugriff wurde es möglich, fortzufahren:
Nachfolgende Versuche, den Abfrageserver hinzuzufügen, waren erfolgreich, wie durch das Fehlen von Fehlermeldungen in der Antwort gezeigt wurde. Die erfolgreiche Änderung der `local.ini`-Datei wurde durch den Dateivergleich bestätigt:
Der Prozess wurde fortgesetzt mit der Erstellung einer Datenbank und eines Dokuments, gefolgt von dem Versuch, Code über eine benutzerdefinierte Ansicht auszuführen, die auf den neu hinzugefügten Abfrageserver abgebildet ist:
Eine **[Zusammenfassung](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0)** mit einer alternativen Nutzlast bietet weitere Einblicke in die Ausnutzung von CVE-2017-12636 unter bestimmten Bedingungen. **Nützliche Ressourcen** zur Ausnutzung dieser Schwachstelle sind:
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.