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 ni database yenye nguvu na inayoweza kubadilika ambayo inaratibu data kwa kutumia muundo wa key-value map ndani ya kila document. Sehemu ndani ya document zinaweza kuwakilishwa kama key/value pairs, lists, au maps, ikitoa kubadilika katika uhifadhi na upatikanaji wa data.
Kila document iliyohifadhiwa katika CouchDB inapewa kitambulisho cha kipekee (_id
) katika kiwango cha document. Zaidi ya hayo, kila mabadiliko yaliyofanywa na kuhifadhiwa kwenye database yanapewa nambari ya marekebisho (_rev
). Nambari hii ya marekebisho inaruhusu kufuatilia na kusimamia mabadiliko kwa ufanisi, ikirahisisha upatikanaji na usawazishaji wa data ndani ya database.
Default port: 5984(http), 6984(https)
Hii inatoa ombi la GET kwa mfano wa CouchDB uliofungwa. Jibu linapaswa kuonekana kama mojawapo ya yafuatayo:
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.
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 kama cluster_nodes
. Sehemu all_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 za completed
na failed
. 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 tayari kujibu maombi. Ikiwa maintenance_mode
ni true
au nolb
, 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 ya kazi pamoja na hali ya upya wa klasta.
Taarifa zaidi za kuvutia zinaweza kutolewa kama ilivyoelezwa hapa: https://lzone.de/cheat-sheet/CouchDB
Ikiwa ombi hilo linajibu na 401 isiyoidhinishwa, basi unahitaji vithibitisho halali ili kufikia hifadhidata:
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):
Unaweza kupata baadhi ya taarifa za database (kama vile idadi ya faili na saizi) kwa kufikia jina la database:
Orodha kila kipengee ndani ya hifadhidata
Soma maudhui ya hati ndani ya hifadhidata:
Shukrani kwa tofauti kati ya parsers za Erlang na JavaScript JSON unaweza kuunda mtumiaji wa admin mwenye akauti hacktricks:hacktricks
kwa ombi lifuatalo:
Taarifa zaidi kuhusu hii vuln hapa.
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. Inasemekana 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), inayowezesha mawasiliano ya node ndani ya klasta ya Erlang. Mpangilio 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.
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.
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 la 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:
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:
Uthibitisho wa baadaye unaonyesha usanidi ulioingizwa katika local.ini
, ukilinganisha na nakala ya akiba ili kuonyesha mabadiliko:
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:
Kwa kumaliza mchakato wa CouchDB ulioainishwa na kuruhusu mfumo kuanzisha tena kiotomatiki, utekelezaji wa amri iliyowekwa unachochewa, ikithibitishwa na kuwepo kwa faili iliyokosekana hapo awali:
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.
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:
Ili kuendana na toleo la CouchDB 2.0, njia mpya inatumika:
Majaribio ya kuongeza na kuitisha seva mpya ya uchunguzi yalikutana na makosa yanayohusiana na ruhusa, kama inavyoonyeshwa na matokeo yafuatayo:
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:
Majaribio ya baadaye ya kuongeza seva ya uchunguzi yalifanikiwa, kama inavyoonyeshwa na ukosefu wa ujumbe wa kosa katika jibu. Marekebisho ya mafanikio ya faili ya local.ini
yalithibitishwa kupitia kulinganisha faili:
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:
A muhtasari wenye payload mbadala unatoa maarifa zaidi kuhusu kutumia CVE-2017-12636 chini ya hali maalum. Rasilimali muhimu za kutumia udhaifu huu ni pamoja na:
port:5984 couchdb
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)