House of Force
Taarifa Msingi
Kanuni
Mbinu hii ilisahihishwa (hapa) na kutoa kosa hili:
malloc(): corrupted top size
Unaweza jaribu kanuni kutoka hapa kuitumia kwa majaribio.
Lengo
Lengo la shambulizi hili ni kuweza kutenga kipande katika anwani maalum.
Mahitaji
Kujaa ambayo inaruhusu kubadilisha ukubwa wa kichwa cha kipande cha juu (k.m. -1).
Kuweza kudhibiti ukubwa wa kutengwa kwa rundo
Shambulizi
Ikiwa muhusika anataka kutenga kipande katika anwani P ili kubadilisha thamani hapa. Anza kwa kubadilisha ukubwa wa kichwa cha kipande cha juu na -1
(labda kwa kujaa). Hii inahakikisha kwamba malloc haitatumia mmap kwa kutenga yoyote kwani Kipande cha Juu kitakuwa na nafasi ya kutosha.
Kisha, kuhesabu umbali kati ya anwani ya kipande cha juu na nafasi ya lengo ya kutenga. Hii ni kwa sababu malloc na ukubwa huo utafanywa ili kuhamisha kipande cha juu hadi nafasi hiyo. Hivi ndivyo tofauti/ukubwa unaweza kuhesabiwa kwa urahisi:
Kwa hivyo, kutenga ukubwa wa lengo - old_top - 4*sizeof(long)
(long 4 ni kwa sababu ya metadata ya kipande cha juu na ya kipande kipya kilipopangiwa) kutahamisha kipande cha juu kwa anwani tunayotaka kubadilisha. Kisha, fanya malloc nyingine kupata kipande kwenye anwani ya lengo.
Marejeo & Mifano Mingine
Lengo la hali hii ni ret2win ambapo tunahitaji kubadilisha anwani ya kazi ambayo itaitwa na anwani ya kazi ya ret2win
Binary ina kipeperushi ambacho kinaweza kutumiwa kubadilisha ukubwa wa kipande cha juu, ambacho kimebadilishwa kuwa -1 au p64(0xffffffffffffffff)
Kisha, inahesabiwa anwani ya mahali ambapo kidole cha kubadilisha kipo, na tofauti kutoka kwa nafasi ya sasa ya kipande cha juu hadi hapo inaendana na
malloc
Hatimaye kipande kipya kinapewa ambacho kitahusisha lengo lililohitajika ndani yake ambalo limebadilishwa na kazi ya ret2win
Katika
Ingiza jina lako:
kuna udhaifu wa awali ambao unaruhusu kuvuja kwa anwani kutoka kwa kipande cha heapKisha katika kazi za
Org:
naHost:
, ni rahisi kujaza 64B ya kidole chas
wakati unaulizwa kwa jina la shirika, ambalo kwenye steki linafuatwa na anwani ya v2, ambayo kisha inafuatwa na jina la mwenyeji lililotajwa. Kisha, strcpy itakuwa inakopi yaliyomo ya s kwa kipande cha ukubwa wa 64B, ni rahisi kubadilisha ukubwa wa kipande cha juu na data iliyowekwa ndani ya jina la mwenyeji.Sasa kwamba kuandika kiholela kunawezekana, GOT ya
atoi
ilibadilishwa kuwa anwani ya printf. basi inawezekana kuvuja anwani yaIO_2_1_stderr
na%24$p
. Na kuvuja huku kwa libc ilikuwa inawezekana kubadilisha tena GOT yaatoi
na anwani yasystem
na kuipiga kama paramu/bin/sh
Njia mbadala iliyopendekezwa katika andiko hili lingine, ni kubadilisha
free
naputs
, na kisha kuongeza anwani yaatoi@got
, kwenye kidole ambacho baadaye kitafutwa ili kuvuja na kwa kuvuja hii kubadilisha tenaatoi@got
nasystem
na kuipiga na/bin/sh
.Kuna UAF inayoruhusu kutumia tena kipande kilichofutwa bila kufuta kidole. Kwa sababu kuna njia za kusoma, ni rahisi kuvuja anwani ya libc kwa kuandika kidole kwa kazi ya bure katika GOT hapa na kisha kuita kazi ya kusoma.
Kisha, House of force ilitumiwa (kwa kudhuru UAF) kubadilisha ukubwa wa nafasi iliyobaki na -1, kutenga kipande kikubwa cha kutosha kufikia kitanzi cha bure, na kisha kutenga kipande kingine ambacho kitahusisha kitanzi cha bure. Kisha, andika kwenye kitanzi anwani ya
system
, andika kwenye kipande"/bin/sh"
na hatimaye fungua kipande na yaliyomo ya herufi hiyo.
Last updated