Ret2esp / Ret2reg
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Omdat die ESP (Stack Pointer) altyd na die bokant van die stapel wys, behels hierdie tegniek die vervanging van die EIP (Instruction Pointer) met die adres van 'n jmp esp
of call esp
instruksie. Deur dit te doen, word die shellcode reg na die oorgeskryfde EIP geplaas. Wanneer die ret
instruksie uitgevoer word, wys ESP na die volgende adres, presies waar die shellcode gestoor is.
As Address Space Layout Randomization (ASLR) nie geaktiveer is in Windows of Linux nie, is dit moontlik om jmp esp
of call esp
instruksies in gedeelde biblioteke te gebruik. egter, met ASLR aktief, mag 'n mens binne die kwesbare program self moet soek vir hierdie instruksies (en jy mag moet oorwin PIE).
Boonop, 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 funksie se werking uitgevoer word, nie met die shellcode inmeng nie. Hierdie inmenging kan gebeur as die shellcode in die middel van die funksie se stapel geplaas word.
As jy spasie ontbreek om na die oorgeskryfde RIP te skryf (miskien net 'n paar bytes), skryf 'n aanvanklike jmp
shellcode soos:
En skryf die shellcode vroeg in die stapel.
Jy kan 'n voorbeeld van hierdie tegniek vind in https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp met 'n finale exploit soos:
Jy kan 'n ander 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 na die shellcode te spring:
Op soortgelyke wyse, as ons weet dat 'n funksie die adres teruggee waar die shellcode gestoor is, kan ons call eax
of jmp eax
instruksies benut (bekend as ret2eax tegniek), wat 'n ander metode bied om ons shellcode uit te voer. Net soos eax, kan enige ander register wat 'n interessante adres bevat, gebruik word (ret2reg).
Jy kan 'n paar voorbeelde hier vind:
strcpy
sal die adres van die buffer waar die shellcode gestoor is in eax
stoor en eax
word nie oorgeskryf nie, so dit is moontlik om 'n ret2eax
te gebruik.
In ARM64 is daar nie instruksies wat toelaat om na die SP register te spring nie. Dit mag moontlik wees om 'n gadget te vind wat sp na 'n register beweeg 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 verander waar sp gekopieer is voordat daar na dit gejump word (so dit sou nutteloos word):
As 'n register 'n interessante adres het, is dit moontlik om daarheen te spring deur net die toepaslike 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 wat deur die gebruiker beheer word met 'n shellcode om uit te voer, stoor.
Voorbeeldkode:
Kontroleer die disassemblage van die funksie, dit is moontlik om te sien dat die adres na die buffer (kwetsbaar vir bof en beheerde deur die gebruiker) is gestoor in x0
voordat dit 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 SONDER PIE gecompileer is. Deur 'n patroon te gebruik, is dit moontlik om te sien dat die offset van die buffer overflow 80 is, so die exploit sal wees:
As daar in plaas van fgets
iets soos read
gebruik was, sou dit moontlik gewees het om PIE te omseil deur slegs die laaste 2 bytes van die terugkeeradres te oorskryf om na die br x0;
instruksie terug te keer sonder om die volledige adres te ken.
Met fgets
werk dit nie omdat dit 'n null (0x00) byte aan die einde byvoeg.
NX: As die stapel nie uitvoerbaar is nie, sal dit nie help nie, aangesien ons die shellcode in die stapel moet plaas en spring om dit uit te voer.
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)