BF Addresses in the Stack
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)
As jy 'n binêre teëkom wat deur 'n canary en PIE (Position Independent Executable) beskerm word, moet jy waarskynlik 'n manier vind om dit te omseil.
Let daarop dat checksec
dalk nie sal vind dat 'n binêre deur 'n canary beskerm word nie as dit staties gecompileer is en nie in staat is om die funksie te identifiseer nie.
Jy kan egter dit handmatig opgemerk as jy vind dat 'n waarde in die stapel gestoor word aan die begin van 'n funksie-aanroep en hierdie waarde voor die uitgang nagegaan word.
Om die PIE te omseil moet jy 'n adres lek. En as die binêre nie enige adresse lek nie, is die beste manier om dit te doen om die RBP en RIP wat in die stapel gestoor is in die kwesbare funksie te brute-forseer. Byvoorbeeld, as 'n binêre beskerm word met beide 'n canary en PIE, kan jy begin om die canary te brute-forseer, dan sal die volgende 8 Bytes (x64) die gestoor RBP wees en die volgende 8 Bytes sal die gestoor RIP wees.
Dit word veronderstel dat die terugadres binne die stapel aan die hoof binêre kode behoort, wat, as die kwesbaarheid in die binêre kode geleë is, gewoonlik die geval sal wees.
Om die RBP en die RIP van die binêre te brute-forseer, kan jy agterkom dat 'n geldige geraamde byte korrek is as die program iets uitset of dit net nie crash nie. Die dieselfde funksie soos die wat voorsien is vir die brute-forseering van die canary kan gebruik word om die RBP en die RIP te brute-forseer:
Die laaste ding wat jy nodig het om die PIE te oorwin, is om nuttige adresse uit die gelekte adresse te bereken: die RBP en die RIP.
Van die RBP kan jy bereken waar jy jou shell in die stapel skryf. Dit kan baie nuttig wees om te weet waar jy die string "/bin/sh\x00" binne die stapel gaan skryf. Om die afstand tussen die gelekte RBP en jou shellcode te bereken, kan jy net 'n breakpoint plaas na die lekkasie van die RBP en kyk waar jou shellcode geleë is, dan kan jy die afstand tussen die shellcode en die RBP bereken:
Van die RIP kan jy die basisadres van die PIE-binary bereken wat jy gaan benodig om 'n geldige ROP-ketting te skep.
Om die basisadres te bereken, doen net objdump -d vunbinary
en kyk na die ontsyferde jongste adresse:
In daardie voorbeeld kan jy sien dat slegs 1 Byte en 'n half benodig word om al die kode te lokaliseer, dan sal die basisadres in hierdie situasie die gelekte RIP wees maar eindig op "000". Byvoorbeeld, as jy 0x562002970ecf
gelek het, is die basisadres 0x562002970000
Volgens sommige waarnemings van hierdie pos, is dit moontlik dat wanneer RBP en RIP waardes gelek word, die bediener nie sal crash met sommige waardes wat nie die korrekte is nie en die BF skrip sal dink hy het die goeie gekry. Dit is omdat dit moontlik is dat sommige adresse eenvoudig nie dit sal breek nie, selfs al is daar nie presies die korrekte nie.
Volgens daardie blogpos word dit aanbeveel om 'n kort vertraging tussen versoeke aan die bediener in te voer.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)