hacktricks/binary-exploitation/heap/house-of-orange.md

9.4 KiB

Nyumba ya Rangi

Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa Msingi

Kanuni

Lengo

  • Tumia malloc_printerr kazi

Mahitaji

  • Badilisha ukubwa wa kipande cha juu
  • Leaks za Libc na heap

Msingi

Baadhi ya msingi muhimu kutoka kwa maoni kutoka mfano huu:

Jambo ni kwamba, katika toleo za zamani za libc, wakati kazi ya malloc_printerr ilipoitwa inge pitia orodha ya miundo ya _IO_FILE iliyohifadhiwa katika _IO_list_all, na kimsingi kutekeleza kipande cha maagizo katika miundo hiyo.
Uvamizi huu utatengeneza miundo bandia ya _IO_FILE ambayo tutaiandika kwa _IO_list_all, na kusababisha malloc_printerr kufanya kazi.
Kisha itatekeleza anwani yoyote ile iliyohifadhiwa katika miundo ya _IO_FILE, na tutapata utekelezaji wa nambari

Uvamizi

Uvamizi huanza kwa kufanikiwa kupata kipande cha juu ndani ya bin isiyoainishwa. Hii inafanikiwa kwa kuita malloc na ukubwa mkubwa kuliko ukubwa wa kipande cha juu cha sasa lakini mdogo kuliko mmp_.mmap_threshold (chaguo-msingi ni 128K), ambayo vinginevyo itasababisha kutengwa kwa mmap. Mara tu ukubwa wa kipande cha juu unapobadilishwa, ni muhimu kuhakikisha kwamba kipande cha juu + ukubwa wake kinafaa kwenye ukurasa na kwamba biti ya prev_inuse ya kipande cha juu daima imewekwa.

Ili kupata kipande cha juu ndani ya bin isiyoainishwa, tenga kipande ili uunda kipande cha juu, badilisha ukubwa wa kipande cha juu (kwa kujaa katika kipande kilichotengwa) ili kipande cha juu + ukubwa uwe kwenye ukurasa na biti ya prev_inuse iwe imewekwa. Kisha tenga kipande kikubwa kuliko ukubwa mpya wa kipande cha juu. Kumbuka kwamba free kamwe haiitwi ili kupata kipande cha juu ndani ya bin isiyoainishwa.

Kipande cha juu cha zamani sasa iko ndani ya bin isiyoainishwa. Kukisia tunaweza kusoma data ndani yake (labda kutokana na udhaifu uliosababisha kujaa), inawezekana kuvuja anwani za Libc kutoka humo na kupata anwani ya _IO_list_all.

Uvamizi wa bin isiyoainishwa unafanywa kwa kudhuru kujaa ili kuandika topChunk->bk->fwd = _IO_list_all - 0x10. Wakati kipande kipya kinatengwa, kipande cha juu cha zamani kitagawanywa, na kidokezo kwenye bin isiyoainishwa kitandikwa kwenye _IO_list_all.

Hatua inayofuata ni kupunguza ukubwa wa kipande cha juu cha zamani ili kufanana na bin ndogo, hasa kwa kuweka ukubwa wake kuwa 0x61. Hii inahudumia madhumuni mawili:

  1. Kuingizwa kwenye Bin Ndogo 4: Wakati malloc inapitia bin isiyoainishwa na kuona kipande hiki, itajaribu kuweka kwenye bin ndogo 4 kutokana na ukubwa wake mdogo. Hii inafanya kipande kumalizia kichwa cha orodha ya bin ndogo 4 ambayo ni eneo la kidokezo la FD ya kipande cha _IO_list_all kama tulivyoandika anwani karibu katika _IO_list_all kupitia uvamizi wa bin isiyoainishwa.
  2. Kuzindua Ukaguzi wa Malloc: Ujanja wa ukubwa wa kipande hiki utasababisha malloc kufanya ukaguzi wa ndani. Wakati inakagua ukubwa wa kipande kinachofuata, ambacho kitakuwa sifuri, itasababisha kosa na kuita malloc_printerr.

Udhibiti wa bin ndogo utakuruhusu kudhibiti kidokezo cha mbele cha kipande. Kujitokeza na _IO_list_all hutumiwa kutengeneza miundo bandia ya _IO_FILE. Miundo hiyo imeundwa kwa uangalifu kujumuisha uga muhimu kama vile _IO_write_base na _IO_write_ptr vilivyowekwa kwenye thamani ambazo zinapita ukaguzi wa ndani katika libc. Kwa kuongezea, jedwali la kuruka linajengwa ndani ya miundo bandia, ambapo kidokezo cha maagizo kimewekwa kwenye anwani ambapo nambari za aina yoyote (k.m., kazi ya system) zinaweza kutekelezwa.

Kufupisha sehemu iliyobaki ya mbinu:

  • Punguza Kipande cha Juu cha Zamani: Badilisha ukubwa wa kipande cha juu cha zamani kuwa 0x61 ili kukifanya kifanane na bin ndogo.
  • Sanidi Miundo Bandia ya _IO_FILE: Jitokeze na kipande cha juu cha zamani cha bin isiyoainishwa na miundo bandia ya _IO_FILE na weka uga kwa njia inayofaa kudhibiti mtiririko wa utekelezaji.

Hatua inayofuata ni kutengeneza miundo bandia ya _IO_FILE inayojitokeza na kipande cha juu cha zamani cha bin sasa kwenye bin isiyoainishwa. Bytes za kwanza za miundo hii zimeundwa kwa uangalifu kujumuisha kidokezo kwa amri (k.m., "/bin/sh") ambayo itatekelezwa.

Uga muhimu katika miundo bandia ya _IO_FILE, kama vile _IO_write_base na _IO_write_ptr, vimewekwa kwenye thamani ambazo zinapita ukaguzi wa ndani katika libc. Kwa kuongezea, jedwali la kuruka linajengwa ndani ya miundo bandia, ambapo kidokezo cha maagizo kimewekwa kwenye anwani ambapo nambari za aina yoyote zinaweza kutekelezwa. Kawaida, hii itakuwa anwani ya kazi ya system au kazi nyingine inayoweza kutekeleza amri za shell.

Uvamizi unakamilika wakati wito wa malloc unazindua utekelezaji wa nambari kupitia miundo ya _IO_FILE iliyodhibitiwa. Hii inaruhusu utekelezaji wa nambari za aina yoyote, kawaida ikisababisha kupatikana kwa shell au mzigo mwingine wenye nia mbaya kutekelezwa.

Muhtasari wa Uvamizi:

  1. Sanidi kipande cha juu: Tenga kipande na ubadilishe ukubwa wa kipande cha juu.
  2. Lazimisha kipande cha juu kuingia kwenye bin isiyoainishwa: Tenga kipande kikubwa zaidi.
  3. Vuja anwani za Libc: Tumia udhaifu kusoma kutoka kwenye bin isiyoainishwa.
  4. Fanya uvamizi wa bin isiyoainishwa: Andika kwenye _IO_list_all kwa kutumia kujaa.
  5. Punguza kipande cha juu cha zamani: Badilisha ukubwa wake ili kifanane na bin ndogo.
  6. Sanidi miundo bandia ya _IO_FILE: Jitokeze miundo bandia ya faili kudhibiti mtiririko wa udhibiti.
  7. Zindua utekelezaji wa nambari: Tenga kipande kutekeleza uvamizi na kukimbia nambari za aina yoyote.

Mbinu hii inatumia mifumo ya usimamizi wa kipande, uvujaji wa habari za libc, na kujaa kwa kipande ili kufikia utekelezaji wa nambari bila kuita moja kwa moja free. Kwa kujenga kwa uangalifu miundo bandia ya _IO_FILE na kuweka mahali sahihi, uvamizi unaweza kudhibiti mtiririko wa udhibiti wakati wa operesheni za kawaida za kutengeneza kumbukumbu. Hii inawezesha utekelezaji wa nambari za aina yoyote, kawaida ikisababisha kupatikana kwa shell au shughuli nyingine zenye nia mbaya.

Marejeo

Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks: