Ret2esp / Ret2reg
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)
Omdat die ESP (Stapelwyser) altyd na die bopunt van die stapel wys, behels hierdie tegniek die vervanging van die EIP (Instruksie-wyser) met die adres van 'n jmp esp
of call esp
instruksie. Deur dit te doen, word die shellcode reg agter die oorskryfde EIP geplaas. Wanneer die ret
instruksie uitgevoer word, wys ESP na die volgende adres, presies waar die shellcode gestoor is.
As Adresruimte-lêrekenkundige Randomisering (ASLR) nie geaktiveer is in Windows of Linux nie, is dit moontlik om jmp esp
of call esp
instruksies wat in gedeelde biblioteke gevind word, te gebruik. Met ASLR aktief, mag jy binne die kwesbare program self moet soek vir hierdie instruksies (en jy mag PIE moet oorwin).
Verder, om die vermoë te hê om die shellcode na die EIP-korrupsie te plaas, eerder as in die middel van die stapel, verseker dat enige push
of pop
instruksies wat tydens die werking van die funksie uitgevoer word, nie met die shellcode inmeng nie. Hierdie inmenging kan plaasvind as die shellcode in die middel van die funksie se stapel geplaas word.
As jy ruimte kortkom om na die oorskryf van RIP te skryf (miskien net 'n paar byte), skryf 'n aanvanklike jmp
shellcode soos:
En skryf die shellcode vroeg in die stok.
Jy kan 'n voorbeeld van hierdie tegniek vind in https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp met 'n finale aanval soos:
Jy kan nog 'n voorbeeld van hierdie tegniek sien in https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html. Daar is 'n buffer overflow sonder NX geaktiveer, dit gebruik 'n gadget om die adres van $esp
te verlaag en dan 'n jmp esp;
om te spring na die shellcode:
Op soortgelyke wyse, as ons weet dat 'n funksie die adres teruggee waar die shell-kode gestoor word, kan ons call eax
of jmp eax
instruksies benut (bekend as die ret2eax tegniek), wat 'n ander metode bied om ons shell-kode uit te voer. Net soos eax, kan enige ander register wat 'n interessante adres bevat, gebruik word (ret2reg).
Jy kan hierdie voorbeelde vind hier:
strcpy
sal in eax
die adres van die buffer waar die shell-kode gestoor was, stoor en eax
word nie oorskryf nie, so dit is moontlik om 'n ret2eax
te gebruik.
In ARM64 is daar geen instruksies wat toelaat om te spring na die SP-register. Dit mag moontlik wees om 'n gadget te vind wat sp na 'n register skuif en dan na daardie register spring, maar in die libc van my kali kon ek nie enige gadget soos dit vind nie:
Die enigste wat ek ontdek het, sou die waarde van die register waar sp gekopieer is voor die spring daarna verander (sodat dit nutteloos sou word):
As 'n register 'n interessante adres het, is dit moontlik om daarna te spring deur net die regte instruksie te vind. Jy kan iets soos gebruik:
In ARM64, dit is x0
wat die terugkeerwaarde van 'n funksie stoor, so dit kan wees dat x0 die adres van 'n buffer stoor wat deur die gebruiker beheer word met 'n shellcode om uit te voer.
Voorbeeld kode:
Besoek die disassemblage van die funksie dit is moontlik om te sien dat die adres van die buffer (kwesbaar vir bof en beheer deur die gebruiker) is gestoor in x0
voor terugkeer van die buffer overflow:
Dit is ook moontlik om die gadget br x0
in die do_stuff
funksie te vind:
Ons sal daardie gadget gebruik om daarna te spring omdat die binêre lêer SONDER PIE saamgestel is. Deur 'n patroon te gebruik, is dit moontlik om te sien dat die offset van die buffer overflow 80 is, dus sal die aanval wees:
As dit in plaas van fgets
iets soos read
gebruik was, sou dit moontlik gewees het om PIE ook te omseil deur net die laaste 2 byte van die terugkeeradres te oorskryf om terug te keer na die br x0;
instruksie sonder om die volledige adres te ken. Met fgets
werk dit nie omdat dit 'n nul (0x00) byte aan die einde byvoeg.
NX: As die stapel nie uitvoerbaar is nie, sal dit nie help nie omdat ons die shellcode op die stapel moet plaas en spring om dit uit te voer.
Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE) Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)