PIE

{{#include ../../../../banners/hacktricks-training.md}}

Basiese Inligting

'n Binêre wat as PIE gecompileer is, of Posisie Onafhanklike Uitvoerbare, beteken die program kan by verskillende geheue plekke laai elke keer as dit uitgevoer word, wat hardgecodeerde adresse voorkom.

Die truuk om hierdie binêre te ontgin, lê in die ontginning van die relatiewe adresse—die afstande 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 vanaf die stapel deur gebruik te maak van kwesbaarhede soos formaatstring-aanvalle. Sodra jy 'n adres het, kan jy ander bereken deur hul vaste afstande.

'n Nuttige wenk in die ontginning van PIE binêre is dat hul basisadres tipies eindig op 000 as gevolg van geheuebladsye wat die eenhede van randomisering is, met 'n grootte van 0x1000 bytes. Hierdie uitlijning kan 'n kritieke kontrole wees as 'n ontginning nie werk soos verwag nie, wat aandui of die korrekte basisadres geïdentifiseer is.
Of jy kan dit gebruik vir jou ontginning, as jy lek dat 'n adres geleë is by 0x649e1024 weet jy dat die basisadres 0x649e1000 is en van daar kan jy net afstande van funksies en plekke bereken.

Omseilings

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

  • ASLR gedeaktiveer: As ASLR gedeaktiveer is, word 'n binêre wat met PIE gecompileer is altyd in dieselfde adres gelaai, daarom sal PIE nutteloos wees aangesien die adresse van die objekte altyd op dieselfde plek sal wees.
  • Wees gegee die lek (algemeen in maklike CTF-uitdagings, kyk hierdie voorbeeld)
  • Brute-force EBP en EIP waardes in die stapel totdat jy die korrekte lek:

{{#ref}} bypassing-canary-and-pie.md {{#endref}}

  • Gebruik 'n arbitrêre lees kwesbaarheid soos formaatstring om 'n adres van die binêre te lek (bv. vanaf die stapel, soos in die vorige tegniek) om die basis van die binêre te kry en afstande van daar te gebruik. Vind 'n voorbeeld hier.

Verwysings

{{#include ../../../../banners/hacktricks-training.md}}