House of Force
Last updated
Last updated
Leer & oefen AWS-hacking: HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
Hierdie tegniek is gepatch (hier) en veroorsaak hierdie fout: malloc(): corrupted top size
Jy kan die kode van hier probeer om dit te toets as jy wil.
Die doel van hierdie aanval is om 'n blok in 'n spesifieke adres toe te ken.
'n Oorvloei wat toelaat om die grootte van die boonste blokkop te oorskryf (bv. -1).
Moet die grootte van die heap-toewysing kan beheer
As 'n aanvaller 'n blok wil toeken in die adres P om 'n waarde hier te oorskryf. Begin deur die boonste blok grootte met -1
te oorskryf (miskien met 'n oorvloei). Dit verseker dat malloc nie mmap sal gebruik vir enige toewysing nie, aangesien die Boonste blok altyd genoeg spasie sal hê.
Bereken dan die afstand tussen die adres van die boonste blok en die teiken spasie om toe te ken. Dit is omdat 'n malloc met daardie grootte uitgevoer sal word om die boonste blok na daardie posisie te skuif. Dit is hoe die verskil/grootte maklik bereken kan word:
Daarom sal die toewysing van 'n grootte van teiken - ou_top - 4*sizeof(long)
(die 4 longs is as gevolg van die metadata van die boonste brokkie en van die nuwe brokkie wanneer dit toegewys word) die boonste brokkie na die adres skuif wat ons wil oorskryf.
Doen dan nog 'n malloc om 'n brokkie by die teikenadres te kry.
Die doel van hierdie scenario is 'n ret2win waar ons die adres van 'n funksie wat deur die ret2win-funksie geroep gaan word, moet wysig
Die binêre het 'n oorvloei wat misbruik kan word om die grootte van die boonste brokkie te wysig, wat gewysig word na -1 of p64(0xffffffffffffffff)
Daarna word die adres na die plek waar die wysiger-punt bestaan, bereken, en die verskil vanaf die huidige posisie van die boonste brokkie tot daar word toegewys met malloc
Laastens word 'n nuwe brokkie toegewys wat hierdie gewenste teiken binne sal bevat wat oorskryf word deur die ret2win-funksie
In die Voer jou naam in:
is daar 'n aanvanklike kwesbaarheid wat dit moontlik maak om 'n adres van die heap te lek
Daarna in die Org:
en Host:
funksionaliteit is dit moontlik om die 64B van die s
-wyser te vul wanneer gevra word vir die org-naam, wat in die stapel gevolg word deur die adres van v2, wat dan gevolg word deur die aangeduide gasheernaam. Aangesien daarna, gaan strcpy die inhoud van s kopieer na 'n brokkie van grootte 64B, is dit moontlik om die grootte van die boonste brokkie te oorskryf met die data wat binne die gasheernaam geplaas is.
Nou dat arbitraire skryf moontlik is, is die atoi
se GOT oorskryf na die adres van printf. dit is moontlik om die adres van IO_2_1_stderr
te lek met %24$p
. En met hierdie libc-lek was dit moontlik om atoi
se GOT weer te oorskryf met die adres na system
en dit te roep deur /bin/sh
as parameter oor te dra
'n Alternatiewe metode voorgestel in hierdie ander skrywe, is om free
met puts
te oorskryf, en dan die adres van atoi@got
by te voeg, in die wyser wat later vrygelaat sal word sodat dit gelek word en met hierdie lek weer atoi@got
oorskryf met system
en dit met /bin/sh
te roep.
Daar is 'n UAF wat dit moontlik maak om 'n brokkie wat vrygelaat is sonder om die wyser skoon te maak, hergebruik. Omdat daar 'n paar leesmetodes is, is dit moontlik om 'n libc-adres te lek deur 'n wyser na die vryfunksie in die GOT hier te skryf en dan die leesfunksie te roep.
Daarna is House of force gebruik (deur die UAF te misbruik) om die grootte van die oorblywende spasie met 'n -1 te oorskryf, 'n brokkie groot genoeg toe te ken om by die vryhaak te kom, en dan 'n ander brokkie toe te ken wat die vryhaak sal bevat. Skryf dan in die haak die adres van system
, skryf in 'n brokkie "/bin/sh"
en vry uiteindelik die brokkie met daardie stringinhoud.