House of Force
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)
Mbinu hii ilirekebishwa (hapa) na inazalisha kosa hili: malloc(): corrupted top size
Unaweza kujaribu kod kutoka hapa ili kuijaribu ikiwa unataka.
Lengo la shambulio hili ni kuwa na uwezo wa kugawa kipande katika anwani maalum.
Overflow inayoruhusu kuandika upya saizi ya kichwa cha kipande cha juu (mfano -1).
Kuwa na uwezo wa kudhibiti saizi ya ugawaji wa heap
Ikiwa mshambuliaji anataka kugawa kipande katika anwani P ili kuandika upya thamani hapa. Anaanza kwa kuandika upya saizi ya kipande cha juu kwa -1
(labda kwa kutumia overflow). Hii inahakikisha kwamba malloc haitatumia mmap kwa ugawaji wowote kwani kipande cha Juu kitakuwa na nafasi ya kutosha kila wakati.
Kisha, hesabu umbali kati ya anwani ya kipande cha juu na nafasi ya lengo kugawa. Hii ni kwa sababu malloc yenye saizi hiyo itafanywa ili kuhamasisha kipande cha juu katika nafasi hiyo. Hii ndiyo njia ambayo tofauti/saizi inaweza kuhesabiwa kwa urahisi:
Kwa hivyo, kugawa ukubwa wa target - old_top - 4*sizeof(long)
(long 4 ni kwa sababu ya metadata ya kipande cha juu na kipande kipya wakati kinapogawiwa) kutahamasishe kipande cha juu kwenye anwani tunayotaka kufuta.
Kisha, fanya malloc nyingine ili kupata kipande kwenye anwani ya lengo.
Lengo la hali hii ni ret2win ambapo tunahitaji kubadilisha anwani ya kazi ambayo itaitwa na anwani ya kazi ya ret2win
Binary ina overflow ambayo inaweza kutumika kubadilisha ukubwa wa kipande cha juu, ambacho kinabadilishwa kuwa -1 au p64(0xffffffffffffffff)
Kisha, inakokotwa anwani ya mahali ambapo kiashiria cha kufuta kinapatikana, na tofauti kutoka kwa nafasi ya sasa ya kipande cha juu hadi pale inagawiwa na malloc
Hatimaye, kipande kipya kinagawiwa ambacho kitakuwa na lengo hili lililotakikana ndani ambayo inafutwa na kazi ya ret2win
Katika Input your name:
kuna udhaifu wa awali unaoruhusu kufuta anwani kutoka kwenye heap
Kisha katika kazi za Org:
na Host:
inawezekana kujaza 64B ya kiashiria s
wakati inapoombwa jina la org, ambalo katika stack linafuatiwa na anwani ya v2, ambayo kisha inafuatiwa na jina la host lililoonyeshwa. Kwa hivyo, strcpy itakuwa ikikopi maudhui ya s kwenye kipande cha ukubwa 64B, inawezekana kufuta ukubwa wa kipande cha juu na data iliyowekwa ndani ya jina la host.
Sasa kwamba kuandika bila mpangilio kunawezekana, GOT ya atoi
ilifutwa hadi anwani ya printf. kisha ilikuwa inawezekana kufuta anwani ya IO_2_1_stderr
na %24$p
. Na kwa kufuta hii ya libc ilikuwa inawezekana kufuta tena GOT ya atoi
na anwani ya system
na kuitwa ikipita kama param /bin/sh
Njia mbadala iliyopendekezwa katika andiko hili lingine, ni kufuta free
na puts
, na kisha kuongeza anwani ya atoi@got
, katika kiashiria ambacho kitakuwa kimeachiliwa baadaye ili kifutwe na kwa kufuta hii kufuta tena atoi@got
na system
na kuitwa na /bin/sh
.
Kuna UAF inayoruhusu kutumia kipande ambacho kimeachiliwa bila kufuta kiashiria. Kwa sababu kuna baadhi ya mbinu za kusoma, inawezekana kufuta anwani ya libc kwa kuandika kiashiria kwenye kazi ya bure katika GOT hapa na kisha kuita kazi ya kusoma.
Kisha, House of force ilitumika (ik abusing UAF) kufuta ukubwa wa nafasi iliyobaki na -1, kugawa kipande kikubwa cha kutosha kufikia hook ya bure, na kisha kugawa kipande kingine ambacho kitakuwa na hook ya bure. Kisha, andika kwenye hook anwani ya system
, andika kwenye kipande "/bin/sh"
na hatimaye fungua kipande hicho chenye maudhui hayo.