House of Force
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Hierdie tegniek is reggestel (hier) en produseer 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 stuk in 'n spesifieke adres toe te ken.
'n Oorloop wat toelaat om die grootte van die top stuk kop te oorskry (bv. -1).
In staat wees om die grootte van die heap-toekenning te beheer.
As 'n aanvaller 'n stuk in die adres P wil toeken om 'n waarde hier te oorskry. Hy begin deur die top stuk grootte met -1
te oorskry (miskien met 'n oorloop). Dit verseker dat malloc nie mmap vir enige toekenning sal gebruik nie, aangesien die Top stuk altyd genoeg ruimte sal hê.
Bereken dan die afstand tussen die adres van die top stuk en die teikenruimte om toe te ken. Dit is omdat 'n malloc met daardie grootte uitgevoer sal word om die top stuk na daardie posisie te beweeg. Dit is hoe die verskil/grootte maklik bereken kan word:
Daarom sal die toewysing van 'n grootte van target - old_top - 4*sizeof(long)
(die 4 longs is weens die metadata van die top chunk en van die nuwe chunk wanneer toegeken) die top chunk na die adres beweeg wat ons wil oorskryf.
Doen dan nog 'n malloc om 'n chunk by die teikenadres te kry.
Die doel van hierdie scenario is 'n ret2win waar ons die adres van 'n funksie moet wysig wat deur die adres van die ret2win funksie aangeroep gaan word.
Die binêre het 'n oorgang wat misbruik kan word om die top chunk grootte te wysig, wat gewysig word na -1 of p64(0xffffffffffffffff).
Dan word die adres na die plek waar die pointer om oorskryf bestaan, bereken, en die verskil van die huidige posisie van die top chunk na daar word met malloc
toegeken.
Laastens word 'n nuwe chunk toegeken wat hierdie gewenste teiken binne sal bevat wat deur die ret2win funksie oorgeskryf word.
In die Input your name:
is daar 'n aanvanklike kwesbaarheid wat toelaat om 'n adres van die heap te lek.
Dan in die Org:
en Host:
funksionaliteit is dit moontlik om die 64B van die s
pointer te vul wanneer gevra word vir die org naam, wat in die stap gevolg word deur die adres van v2, wat dan gevolg word deur die aangeduide host naam. Aangesien strcpy die inhoud van s na 'n chunk van grootte 64B gaan kopieer, is dit moontlik om die grootte van die top chunk met die data wat in die host naam geplaas is, te oorskryf.
Nou dat arbitrêre skrywe moontlik is, is die atoi
's GOT oorgeskryf na die adres van printf. Dit was moontlik om die adres van IO_2_1_stderr
met %24$p
te lek. En met hierdie libc lek was dit moontlik om atoi
's GOT weer met die adres na system
te oorskryf en dit aan te roep met die parameter /bin/sh
.
'n Alternatiewe metode voorstel in hierdie ander skrywe, is om free
met puts
te oorskryf, en dan die adres van atoi@got
in die pointer wat later vrygestel sal word, by te voeg sodat dit gelek word en met hierdie lek weer atoi@got
met system
oorskryf en dit aanroep met /bin/sh
.
Daar is 'n UAF wat toelaat om 'n chunk wat vrygestel is, te hergebruik sonder om die pointer te skoon te maak. Omdat daar 'n paar leesmetodes is, is dit moontlik om 'n libc adres te lek deur 'n pointer na die vry funksie in die GOT hier te skryf en dan die lees funksie aan te roep.
Dan is House of force gebruik (misbruik van die UAF) om die grootte van die oorblywende ruimte met 'n -1 te oorskryf, 'n chunk groot genoeg toe te ken om by die vry haak te kom, en dan 'n ander chunk toe te ken wat die vry haak sal bevat. Skryf dan in die haak die adres van system
, skryf in 'n chunk "/bin/sh"
en vry die chunk met daardie stringinhoud.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)