House of Force

Ondersteun HackTricks

Basiese Inligting

Kode

  • 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.

Doel

  • Die doel van hierdie aanval is om 'n blok in 'n spesifieke adres toe te ken.

Vereistes

  • 'n Oorvloei wat toelaat om die grootte van die boonste blokkop te oorskryf (bv. -1).

  • Moet die grootte van die heap-toewysing kan beheer

Aanval

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:

// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/*
* The evil_size is calulcated as (nb is the number of bytes requested + space for metadata):
* new_top = old_top + nb
* nb = new_top - old_top
* req + 2sizeof(long) = new_top - old_top
* req = new_top - old_top - 2sizeof(long)
* req = target - 2sizeof(long) - old_top - 2sizeof(long)
* req = target - old_top - 4*sizeof(long)
*/

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.

Verwysings & Ander Voorbeelde

Last updated