PIE
Reading time: 3 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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Basiese Inligting
'n Binêre wat as PIE gecompileer is, of Position Independent Executable, beteken dat die program by verskillende geheue-lokasies kan laai elke keer wanneer dit uitgevoer word, wat hardgecodeerde adresse voorkom.
Die truuk om hierdie binêre te benut, lê in die benutting van die relatiewe adresse—die afstande tussen dele van die program bly dieselfde, selfs al verander die absolute lokasies. Om PIE te omseil, hoef jy net een adres te lek, tipies vanaf die stack 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 benutting 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 ontploffing nie werk soos verwag nie, wat aandui of die korrekte basisadres geïdentifiseer is.
Of jy kan dit gebruik vir jou ontploffing, as jy lek dat 'n adres geleë is by 0x649e1024
weet jy dat die basisadres 0x649e1000
is en van daar af kan jy net afstande van funksies en lokasies 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:
- Gedeaktiveerde ASLR: 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 stack totdat jy die korrekte lek:
- Gebruik 'n arbitraire lees kwesbaarheid soos formaatstring om 'n adres van die binêre te lek (bv. vanaf die stack, soos in die vorige tegniek) om die basis van die binêre te kry en afstande van daar af te gebruik. Vind 'n voorbeeld hier.
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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.