<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
**CouchDB** je svestrana i moćna **dokument-orientisana baza podataka** koja organizuje podatke koristeći strukturu **ključ-vrednost** unutar svakog **dokumenta**. Polja unutar dokumenta mogu biti predstavljena kao **ključ/vrednost parovi, liste ili mape**, pružajući fleksibilnost u skladištenju i dohvatanju podataka.
Svaki **dokument** koji se čuva u CouchDB-u dobija jedinstveni identifikator (`_id`) na nivou dokumenta. Pored toga, svaka izmena koja se napravi i sačuva u bazi podataka dobija broj revizije (`_rev`). Ovaj broj revizije omogućava efikasno **praćenje i upravljanje promenama**, olakšavajući jednostavno dohvatanje i sinhronizaciju podataka unutar baze podataka.
Kada se bavite pentestiranjem CouchDB baze podataka, prvi korak je da identifikujete baner. Baner je informacija koja se prikazuje prilikom uspostavljanja veze sa CouchDB serverom. Ova informacija može biti korisna za identifikaciju verzije CouchDB-a koji se koristi, kao i za pronalaženje potencijalnih ranjivosti.
Da biste pronašli baner, možete koristiti alate kao što su `telnet` ili `nc` (netcat) kako biste se povezali sa CouchDB serverom na odgovarajućem portu (obično 5984). Nakon uspostavljanja veze, server će vam prikazati baner informaciju.
Imajte na umu da ako pristupate korenu CouchDB-a i dobijete `401 Unauthorized` sa nečim poput ovoga: `{"error":"unauthorized","reason":"Authentication required."}`**nećete moći pristupiti** baneru ili bilo kojem drugom endpointu.
Ovo su endpointi do kojih možete pristupiti sa **GET** zahtevom i izvući neke zanimljive informacije. Možete pronaći [**više endpointa i detaljnije opise u dokumentaciji za couchdb**](https://docs.couchdb.org/en/latest/api/index.html).
* **`/_active_tasks`** Lista pokrenutih zadataka, uključujući vrstu zadatka, ime, status i ID procesa.
* **`/_all_dbs`** Vraća listu svih baza podataka u instanci CouchDB-a.
* **`/_cluster_setup`** Vraća status čvora ili klastera, prema čarobnjaku za podešavanje klastera.
* **`/_db_updates`** Vraća listu svih događaja baze podataka u instanci CouchDB-a. Postojanje baze podataka `_global_changes` je potrebno za korišćenje ovog endpointa.
* **`/_membership`** Prikazuje čvorove koji su deo klastera kao `cluster_nodes`. Polje `all_nodes` prikazuje sve čvorove koje ovaj čvor poznaje, uključujući one koji su deo klastera.
* **`/_scheduler/jobs`** Lista poslova replikacije. Svaki opis posla će uključivati informacije o izvoru i odredištu, ID replikacije, istoriju nedavnih događaja i još neke stvari.
* **`/_scheduler/docs`** Lista stanja replikacijskih dokumenata. Uključuje informacije o svim dokumentima, čak i u `completed` i `failed` stanjima. Za svaki dokument vraća ID dokumenta, bazu podataka, ID replikacije, izvor i odredište, i druge informacije.
* **`/_node/{node-name}`** Endpoint `/_node/{node-name}` se može koristiti za potvrdu Erlang imena čvora servera koji obrađuje zahtev. Ovo je najkorisnije kada pristupate `/_node/_local` da biste dobili ove informacije.
* **`/_node/{node-name}/_stats`** Resurs `_stats` vraća JSON objekat koji sadrži statistike za pokrenuti server. Doslovni string `_local` služi kao alias za lokalno ime čvora, pa se za sve URL-ove statistika, `{node-name}` može zameniti sa `_local`, da bi se interagiralo sa statistikama lokalnog čvora.
* **`/_node/{node-name}/_system`** Resurs \_system vraća JSON objekat koji sadrži razne statistike na nivou sistema za pokrenuti server\_.\_ Možete koristiti \_\_`_local` kao {node-name} da biste dobili trenutne informacije o čvoru.
* **`/_up`** Potvrđuje da je server pokrenut, radi i spreman da odgovori na zahteve. Ako je [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance\_mode) `true` ili `nolb`, endpoint će vratiti odgovor 404.
* **`/_uuids`** Zahteva jedan ili više univerzalno jedinstvenih identifikatora (UUID) iz instance CouchDB-a.
* **`/_reshard`** Vraća broj završenih, neuspešnih, pokrenutih, zaustavljenih i ukupnih poslova, zajedno sa stanjem reshardinga na klasteru.
Zahvaljujući razlikama između Erlang i JavaScript JSON parsera, moguće je **kreirati admin korisnika** sa pristupnim podacima `hacktricks:hacktricks` pomoću sledećeg zahteva:
U dokumentaciji za CouchDB, posebno u delu koji se odnosi na podešavanje klastera ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), razmatra se upotreba portova od strane CouchDB u režimu klastera. Pomenuto je da se, kao i u samostalnom režimu, koristi port `5984`. Dodatno, port `5986` je namenjen lokalnim API-ima čvora, a važno je da Erlang zahteva TCP port `4369` za Erlang Port Mapper Daemon (EPMD), koji omogućava komunikaciju čvorova unutar Erlang klastera. Ova konfiguracija formira mrežu u kojoj su svi čvorovi međusobno povezani.
Naglašena je ključna sigurnosna preporuka u vezi sa portom `4369`. Ako je ovaj port dostupan preko interneta ili bilo koje nepouzdane mreže, sigurnost sistema u velikoj meri zavisi od jedinstvenog identifikatora poznatog kao "kolačić". Ovaj kolačić deluje kao zaštita. Na primer, u datom listi procesa može se primetiti kolačić nazvan "monster", što ukazuje na njegovu operativnu ulogu u okviru sigurnosnog okvira sistema.
Za one koji su zainteresovani da razumeju kako se ovaj "kolačić" može iskoristiti za daljinsko izvršavanje koda (RCE) u kontekstu Erlang sistema, dostupan je poseban odeljak za dalje čitanje. Detaljno se opisuju metodologije za zloupotrebu Erlang kolačića na neovlašćene načine radi preuzimanja kontrole nad sistemima. Možete **[istražiti detaljan vodič o zloupotrebi Erlang kolačića za RCE ovde](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce)**.
Istražena je nedavno otkrivena ranjivost, CVE-2018-8007, koja utiče na Apache CouchDB, otkrivajući da za eksploataciju treba imati dozvole za pisanje u datoteku `local.ini`. Iako se to direktno ne može primeniti na ciljni sistem zbog sigurnosnih ograničenja, izvršene su izmene kako bi se omogućio pristup pisanju u datoteku `local.ini` u svrhu istraživanja. Detaljni koraci i primeri koda su navedeni u nastavku, prikazujući proces.
Da bi se iskoristila ranjivost, izvršava se curl komanda koja cilja konfiguraciju `cors/origins` u `local.ini` fajlu. Ovo ubacuje novi izvor zajedno sa dodatnim komandama pod sekcijom `[os_daemons]`, sa ciljem izvršavanja proizvoljnog koda:
Prvo, očekivani fajl (`/tmp/0xdf`) ne postoji, što ukazuje da ubačena komanda još uvek nije izvršena. Dalje istraživanje otkriva da su pokrenuti procesi povezani sa CouchDB-om, uključujući i jedan koji potencijalno može izvršiti ubačenu komandu:
Prekidanjem identifikovanog CouchDB procesa i omogućavanjem automatskog ponovnog pokretanja sistema, pokreće se izvršavanje ubačene komande, što potvrđuje postojanje prethodno nedostajuće datoteke:
Ova istraživanja potvrđuju mogućnost iskorišćavanja CVE-2018-8007 pod određenim uslovima, posebno zahtevom za upisivanjem u `local.ini` datoteku. Priloženi primeri koda i proceduralni koraci pružaju jasno uputstvo za replikaciju napada u kontrolisanom okruženju.
Za više detalja o CVE-2018-8007, pogledajte obaveštenje od strane mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/).
Istražena je ranjivost poznata kao CVE-2017-12636, koja omogućava izvršavanje koda putem CouchDB procesa, iako određene konfiguracije mogu sprečiti njeno iskorišćavanje. Uprkos brojnim dostupnim referencama Proof of Concept (POC) na internetu, potrebne su izmene kako bi se iskoristila ranjivost na CouchDB verziji 2, koja se razlikuje od često ciljane verzije 1.x. Početni koraci uključuju proveru verzije CouchDB i potvrdu odsustva očekivane putanje za upitne servere:
Dalje istraživanje je otkrilo problem sa dozvolama `local.ini` fajla, koji nije bio moguć za pisanje. Modifikacijom dozvola fajla uz pomoć root ili homer pristupa, postalo je moguće nastaviti:
Naredni pokušaji dodavanja upitnog servera su uspeli, što je potvrđeno nedostatkom poruka o greškama u odgovoru. Uspešna modifikacija `local.ini` datoteke je potvrđena poređenjem datoteka:
Proces se nastavio sa kreiranjem baze podataka i dokumenta, a zatim je pokušan izvršetak koda putem prilagođenog prikaza koji se mapira na novo dodati serverski upit:
**[Sažetak](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0)** sa alternativnim payloadom pruža dalje uvide u iskorišćavanje CVE-2017-12636 pod određenim uslovima. **Korisni resursi** za iskorišćavanje ove ranjivosti uključuju:
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
* Ako želite da vidite **vašu kompaniju reklamiranu u HackTricks-u** ili **preuzmete HackTricks u PDF formatu**, proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.