Huis van Oranje

Reading time: 7 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

Kode

Doel

  • Misbruik malloc_printerr funksie

Vereistes

  • Oorskry die boonste stuk grootte
  • Libc en heap lek

Agtergrond

Sommige nodige agtergrond uit die kommentaar van hierdie voorbeeld:

Die ding is, in ouer weergawes van libc, wanneer die malloc_printerr funksie aangeroep is, sou dit deur 'n lys van _IO_FILE strukture wat in _IO_list_all gestoor is, herhaal, en werklik 'n instruksie-aanwyser in daardie struktuur uitvoer.
Hierdie aanval sal 'n valse _IO_FILE struktuur forgeer wat ons sal skryf na _IO_list_all, en veroorsaak dat malloc_printerr loop.
Dan sal dit uitvoer wat adres ons in die _IO_FILE strukture se sprongtafel gestoor het, en ons sal kode-uitvoering kry.

Aanval

Die aanval begin deur daarin te slaag om die boonste stuk binne die ongesorteerde bin te kry. Dit word bereik deur malloc aan te roep met 'n grootte groter as die huidige boonste stuk grootte maar kleiner as mmp_.mmap_threshold (standaard is 128K), wat andersins mmap toewysing sou aktiveer. Wanneer die boonste stuk grootte gewysig word, is dit belangrik om te verseker dat die boonste stuk + sy grootte bladsy-gebalanseerd is en dat die prev_inuse bit van die boonste stuk altyd ingestel is.

Om die boonste stuk binne die ongesorteerde bin te kry, allokeer 'n stuk om die boonste stuk te skep, verander die boonste stuk grootte (met 'n oorgang in die toegewezen stuk) sodat boonste stuk + grootte bladsy-gebalanseerd is met die prev_inuse bit ingestel. Allokeer dan 'n stuk groter as die nuwe boonste stuk grootte. Let daarop dat free nooit aangeroep word om die boonste stuk in die ongesorteerde bin te kry.

Die ou boonste stuk is nou in die ongesorteerde bin. Aannemende dat ons data binne dit kan lees (miskien as gevolg van 'n kwesbaarheid wat ook die oorgang veroorsaak het), is dit moontlik om libc adresse daaruit te lek en die adres van _IO_list_all te kry.

'n Ongesorteerde bin aanval word uitgevoer deur die oorgang te misbruik om topChunk->bk->fwd = _IO_list_all - 0x10 te skryf. Wanneer 'n nuwe stuk toegeken word, sal die ou boonste stuk gesplit word, en 'n aanwyser na die ongesorteerde bin sal in _IO_list_all geskryf word.

Die volgende stap behels die verkleining van die grootte van die ou boonste stuk om in 'n klein bin te pas, spesifiek om sy grootte op 0x61 in te stel. Dit dien twee doele:

  1. Invoeging in Klein Bin 4: Wanneer malloc deur die ongesorteerde bin skandeer en hierdie stuk sien, sal dit probeer om dit in klein bin 4 in te voeg weens sy klein grootte. Dit maak dat die stuk aan die kop van die klein bin 4 lys eindig, wat die ligging van die FD aanwyser van die stuk van _IO_list_all is, aangesien ons 'n naby adres in _IO_list_all geskryf het via die ongesorteerde bin aanval.
  2. Aktivering van 'n Malloc Kontrole: Hierdie stuk grootte manipulasie sal veroorsaak dat malloc interne kontroles uitvoer. Wanneer dit die grootte van die valse vorentoe stuk kontroleer, wat nul sal wees, aktiveer dit 'n fout en roep malloc_printerr aan.

Die manipulasie van die klein bin sal jou in staat stel om die vorentoe aanwyser van die stuk te beheer. Die oorvleueling met _IO_list_all word gebruik om 'n valse _IO_FILE struktuur te forgeer. Die struktuur is sorgvuldig saamgestel om sleutelvelde soos _IO_write_base en _IO_write_ptr in te sluit wat op waardes ingestel is wat interne kontroles in libc slaag. Boonop word 'n sprongtafel binne die valse struktuur geskep, waar 'n instruksie-aanwyser op die adres ingestel word waar arbitrêre kode (bv. die system funksie) uitgevoer kan word.

Om die oorblywende deel van die tegniek saam te vat:

  • Verklein die Ou Boonste Stuk: Pas die grootte van die ou boonste stuk aan na 0x61 om dit in 'n klein bin te laat pas.
  • Stel die Valse _IO_FILE Struktuur Op: Oorvleuel die ou boonste stuk met die valse _IO_FILE struktuur en stel velde toepaslik in om die uitvoeringsvloei te kap.

Die volgende stap behels die forge van 'n valse _IO_FILE struktuur wat oorvleuel met die ou boonste stuk wat tans in die ongesorteerde bin is. Die eerste bytes van hierdie struktuur word sorgvuldig saamgestel om 'n aanwyser na 'n opdrag (bv. "/bin/sh") in te sluit wat uitgevoer sal word.

Sleutelvelde in die valse _IO_FILE struktuur, soos _IO_write_base en _IO_write_ptr, word op waardes ingestel wat interne kontroles in libc slaag. Boonop word 'n sprongtafel binne die valse struktuur geskep, waar 'n instruksie-aanwyser op die adres ingestel word waar arbitrêre kode uitgevoer kan word. Gewoonlik sou dit die adres van die system funksie of 'n ander funksie wees wat shell-opdragte kan uitvoer.

Die aanval kulmineer wanneer 'n oproep aan malloc die uitvoering van die kode deur die gemanipuleerde _IO_FILE struktuur aktiveer. Dit stel effektief arbitrêre kode-uitvoering in staat, wat gewoonlik lei tot 'n shell wat geopen word of 'n ander kwaadwillige payload wat uitgevoer word.

Samevatting van die Aanval:

  1. Stel die boonste stuk op: Allokeer 'n stuk en wysig die boonste stuk grootte.
  2. Dwing die boonste stuk in die ongesorteerde bin: Allokeer 'n groter stuk.
  3. Lek libc adresse: Gebruik die kwesbaarheid om uit die ongesorteerde bin te lees.
  4. Voer die ongesorteerde bin aanval uit: Skryf na _IO_list_all met behulp van 'n oorgang.
  5. Verklein die ou boonste stuk: Pas sy grootte aan om in 'n klein bin te pas.
  6. Stel 'n valse _IO_FILE struktuur op: Forgeer 'n valse lêer struktuur om die uitvoeringsvloei te kap.
  7. Aktiveer kode-uitvoering: Allokeer 'n stuk om die aanval uit te voer en arbitrêre kode te laat loop.

Hierdie benadering misbruik heap bestuur meganismes, libc inligting lek, en heap oorgange om kode-uitvoering te bereik sonder om direk free aan te roep. Deur die valse _IO_FILE struktuur sorgvuldig te vervaardig en dit op die regte plek te plaas, kan die aanval die uitvoeringsvloei kap tydens standaard geheue toewysingsoperasies. Dit stel die uitvoering van arbitrêre kode in staat, wat moontlik lei tot 'n shell of ander kwaadwillige aktiwiteite.

Verwysings

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks