5984,6984 - Pentesting CouchDB
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
CouchDB je svestrana i moćna baza podataka orijentisana na dokumente koja organizuje podatke koristeći strukturu mapa 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 preuzimanju podataka.
Svaki dokument koji se čuva u CouchDB dobija jedinstveni identifikator (_id
) na nivou dokumenta. Pored toga, svaka izmena koja se izvrši i sačuva u bazi podataka dobija broj revizije (_rev
). Ovaj broj revizije omogućava efikasno praćenje i upravljanje promenama, olakšavajući preuzimanje i sinhronizaciju podataka unutar baze podataka.
Podrazumevani port: 5984(http), 6984(https)
Ovo izdaje GET zahtev instaliranoj CouchDB instanci. Odgovor bi trebao izgledati kao jedan od sledećih:
Napomena da ako prilikom pristupa root-u couchdb dobijete 401 Unauthorized
sa nečim poput: {"error":"unauthorized","reason":"Authentication required."}
nećete moći da pristupite baneru ili bilo kojem drugom kraju.
Ovo su krajevi gde možete pristupiti sa GET zahtevom i izvući neke zanimljive informacije. Možete pronaći više krajeva i detaljnije opise u couchdb dokumentaciji.
/_active_tasks
Lista aktivnih zadataka, uključujući tip zadatka, ime, status i ID procesa.
/_all_dbs
Vraća listu svih baza podataka u CouchDB instanci.
/_cluster_setup
Vraća status čvora ili klastera, prema čarobnjaku za podešavanje klastera.
/_db_updates
Vraća listu svih događaja u bazi podataka u CouchDB instanci. Postojanje baze podataka _global_changes
je neophodno za korišćenje ovog kraja.
/_membership
Prikazuje čvorove koji su deo klastera kao cluster_nodes
. Polje all_nodes
prikazuje sve čvorove o kojima ovaj čvor zna, uključujući one koji su deo klastera.
/_scheduler/jobs
Lista zadataka replikacije. Svaki opis zadatka uključuje informacije o izvoru i odredištu, ID replikacije, istoriju nedavnih događaja i nekoliko drugih stvari.
/_scheduler/docs
Lista stanja replikacionih 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.
/_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
Krajnja tačka /_node/{node-name}
može se koristiti za potvrdu imena Erlang č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 statistiku za pokrenuti server. Literalni string _local
služi kao alias za lokalno ime čvora, tako da se za sve URL-ove statistike, {node-name}
može zameniti sa _local
, da bi se interagovalo sa statistikama lokalnog čvora.
/_node/{node-name}/_system
Resurs _system vraća JSON objekat koji sadrži razne sistemske statistike za pokrenuti server_._ Možete koristiti ___local
kao {node-name} da dobijete informacije o trenutnom čvoru.
/_node/{node-name}/_restart
/_up
Potvrđuje da je server aktivan, radi i spreman da odgovori na zahteve. Ako je maintenance_mode
true
ili nolb
, krajnja tačka će vratiti 404 odgovor.
/_uuids
Zahteva jedan ili više Univerzalno Jedinstvenih Identifikatora (UUID) iz CouchDB instance.
/_reshard
Vraća broj završenih, neuspešnih, aktivnih, zaustavljenih i ukupnih zadataka zajedno sa stanjem reshardinga na klasteru.
Zanimljivije informacije mogu se izvući kao što je objašnjeno ovde: https://lzone.de/cheat-sheet/CouchDB
Ako taj zahtev odgovara sa 401 neovlašćen, onda su vam potrebne validne akreditive za pristup bazi podataka:
Da biste pronašli važeće akreditive, mogli biste pokušati bruteforce the service.
Ovo je primer couchdb odgovora kada imate dovoljno privilegija da listate baze podataka (To je samo lista db-ova):
Možete dobiti neke informacije o bazi podataka (kao što su broj fajlova i veličine) pristupajući imenu baze podataka:
Nabrojte svaki unos unutar baze podataka
Pročitaj sadržaj dokumenta unutar baze podataka:
Zahvaljujući razlikama između Erlang i JavaScript JSON parsera, mogli biste napraviti admin korisnika sa kredencijalima hacktricks:hacktricks
sa sledećim zahtevom:
Više informacija o ovoj ranjivosti ovde.
Primer odavde.
U dokumentaciji CouchDB, posebno u odeljku koji se odnosi na podešavanje klastera (link), raspravlja se o korišćenju portova od strane CouchDB u režimu klastera. Pominje se da, kao u samostalnom režimu, port 5984
se koristi. Pored toga, port 5986
je za lokalne API-je, a što je važno, Erlang zahteva TCP port 4369
za Erlang Port Mapper Daemon (EPMD), koji olakšava komunikaciju između čvorova unutar Erlang klastera. Ova konfiguracija formira mrežu gde je svaki čvor međusobno povezan sa svim ostalim čvorovima.
Ključna sigurnosna preporuka se ističe u vezi sa portom 4369
. Ako je ovaj port dostupan preko Interneta ili bilo koje nepouzdane mreže, sigurnost sistema se u velikoj meri oslanja na jedinstveni identifikator poznat kao "kolačić." Ovaj kolačić deluje kao zaštita. Na primer, u datoj listi procesa, može se primetiti kolačić nazvan "monster", što ukazuje na njegovu operativnu ulogu u okviru sigurnosnog sistema.
Za one koji su zainteresovani da razumeju kako se ovaj "kolačić" može iskoristiti za Remote Code Execution (RCE) u kontekstu Erlang sistema, dostupna je posvećena sekcija za dalju lektiru. Ona detaljno opisuje metodologije za korišćenje Erlang kolačića na neovlašćen način kako bi se postigla kontrola nad sistemima. Možete istražiti detaljan vodič o zloupotrebi Erlang kolačića za RCE ovde.
Primer odavde.
Nedavno otkrivena ranjivost, CVE-2018-8007, koja utiče na Apache CouchDB, istražena je, otkrivajući da iskorišćavanje zahteva prava za pisanje na local.ini
datoteku. Iako nije direktno primenljivo na inicijalni ciljni sistem zbog bezbednosnih ograničenja, izvršene su modifikacije kako bi se omogućio pristup za pisanje na local.ini
datoteku u svrhe istraživanja. Detaljni koraci i primeri koda su navedeni u nastavku, prikazujući proces.
Prvo, okruženje se priprema osiguravajući da je local.ini
datoteka zapisiva, što se proverava listanjem dozvola:
Da bi se iskoristila ranjivost, izvršava se curl komanda, koja cilja cors/origins
konfiguraciju u local.ini
. Ovo ubacuje novu origin zajedno sa dodatnim komandama pod [os_daemons]
sekcijom, sa ciljem izvršavanja proizvoljnog koda:
Kasnija verifikacija pokazuje injektovanu konfiguraciju u local.ini
, upoređujući je sa rezervnom kopijom kako bi se istakle promene:
U početku, očekivana datoteka (/tmp/0xdf
) ne postoji, što ukazuje na to da injektovana komanda još nije izvršena. Dalja istraga otkriva da su procesi povezani sa CouchDB u radu, uključujući jedan koji bi potencijalno mogao izvršiti injektovanu komandu:
Prekidom identifikovanog CouchDB procesa i omogućavanjem sistemu da ga automatski ponovo pokrene, pokreće se izvršenje injektovane komande, što je potvrđeno postojanjem prethodno nedostajuće datoteke:
Ova eksploracija potvrđuje izvodljivost eksploatacije CVE-2018-8007 pod specifičnim uslovima, posebno zahtevom za zapisivim pristupom local.ini
datoteci. Pruženi primeri koda i proceduralni koraci nude jasan vodič za replikaciju eksploata u kontrolisanom okruženju.
Za više detalja o CVE-2018-8007, pogledajte savetovanje od mdsec: CVE-2018-8007.
Primer odavde.
Ranljivost poznata kao CVE-2017-12636 je istražena, koja omogućava izvršavanje koda putem CouchDB procesa, iako specifične konfiguracije mogu sprečiti njenu eksploataciju. I pored brojnih referenci na Proof of Concept (POC) dostupnih na mreži, potrebne su prilagodbe za eksploataciju ranjivosti na CouchDB verziji 2, koja se razlikuje od uobičajeno ciljanih verzija 1.x. Početni koraci uključuju verifikaciju verzije CouchDB i potvrđivanje odsustva očekivane putanje servera za upite:
Da bi se prilagodila CouchDB verziji 2.0, koristi se novi put:
Pokušaji dodavanja i pozivanja novog servera za upite naišli su na greške vezane za dozvole, što je naznačeno sledećim izlazom:
Dalja istraga je otkrila probleme sa dozvolama za local.ini
datoteku, koja nije mogla da se piše. Modifikovanjem dozvola datoteke sa root ili homer pristupom, postalo je moguće nastaviti:
Kasniji pokušaji dodavanja servera za upite su uspeli, što je potvrđeno odsustvom poruka o grešci u odgovoru. Uspješna modifikacija local.ini
datoteke je potvrđena kroz poređenje datoteka:
Proces se nastavio kreiranjem baze podataka i dokumenta, nakon čega je usledio pokušaj izvršavanja koda putem prilagođenog prikaza mapiranja na novonadded server za upite:
A rezime sa alternativnim payload-om pruža dodatne uvide u eksploataciju CVE-2017-12636 pod specifičnim uslovima. Korisni resursi za eksploataciju ove ranjivosti uključuju:
port:5984 couchdb
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)