PIE

Ondersteun HackTricks

Basiese Inligting

'n Binêre saamgestel as PIE, of Position Independent Executable, beteken die program kan by verskillende geheue-plekke elke keer as dit uitgevoer word gelaai word, wat vasgeklopte adresse voorkom.

Die truuk om hierdie binêre lêers te benut lê in die benutting van die relatiewe adresse—die verskille tussen dele van die program bly dieselfde selfs al verander die absolute plekke. Om PIE te omseil, hoef jy net een adres te lek, tipies van die stapel deur kwesbaarhede soos formaatstringaanvalle te gebruik. Sodra jy 'n adres het, kan jy ander bereken deur hul vaste verskuiwings.

'n Nuttige wenk in die benutting van PIE-binêre lêers is dat hul basisadres tipies eindig op 000 as gevolg van geheuebladsye wat die eenhede van randomisasie is, met 'n grootte van 0x1000 byte. Hierdie belyn kan 'n kritiese kontroleer wees as 'n uitbuit nie werk soos verwag nie, wat aandui of die korrekte basisadres geïdentifiseer is. Of jy kan dit vir jou uitbuit, as jy lek dat 'n adres geleë is op 0x649e1024 weet jy dat die basisadres 0x649e1000 is en van daar af kan jy net verskuiwings bereken van funksies en plekke.

Omseilings

Om PIE te omseil is dit nodig om 'n adres van die gelaai binêre lêer te lek, daar is 'n paar opsies hiervoor:

  • ASLR gedeaktiveer: As ASLR gedeaktiveer is, word 'n binêre saamgestel met PIE altyd gelaai by dieselfde adres, daarom is PIE nutteloos aangesien die adresse van die voorwerpe altyd op dieselfde plek gaan wees.

  • Kry gegee die lek (gewoonlik in maklike CTF-uitdagings, kontroleer hierdie voorbeeld)

  • Brute-force EBP en EIP-waardes in die stapel totdat jy die regte een lek:

BF Addresses in the Stack
  • Gebruik 'n arbitrêre lees kwesbaarheid soos formaatstring om 'n adres van die binêre lêer te lek (bv. van die stapel, soos in die vorige tegniek) om die basis van die binêre te kry en verskuiwings van daar te gebruik. Vind 'n voorbeeld hier.

Verwysings

Ondersteun HackTricks

Last updated