Perface
这是个一眼就看出来的洞。
- scanf读入超长字符串,直接就有栈溢出,而且没有开canary保护
- mmap加载提供的libc到0x5555E000,可以执行
- 检测输入的字符串中各个字符是否在[0x20, 0x7f]范围内
Thinking
当时有几种思路
- 在main函数里找rop,不过这个直接pass,因为输入的字符有限制,而main里的对应地址都是0x80开头,首先就不行
- 通过mmap申请R/W/X的空间,可是地址和函数的限制。pass
- 在0x555E000中招符合的地址,写了脚本之后筛选合适的rop后,拼凑出来了system的地址,但是对于ebx等寄存器并没有拼凑出来。。sigh
Summary
总的来说还是拼凑rop,和我当时思路一样orz,,然而需要一些好的工具来过滤和构造orz。