level2
转载自原创superj.site
0x00
首先通过file和checksec分析该题的附件。
判断该文件是32位的ELF文件,只开启了不可执行的保护。
0x01
开始进行反汇编,用IDA 32位。
通过左侧的函数窗口发现,只有main、vulnerable_function可用,因此进行分析,两个函数如下图:
通过分析发现,在main函数中首先调用vulnerable_function,在vulnerable_function中的缓冲区大小为88h,而read函数能够写进缓冲区100h,因此存在栈溢出。
知道是栈溢出之后就需要找到溢出点:缓冲区大小加上ebp的4个字节后,就是返回地址的位置。
发现在ELF文件中存在字符串“/bin/sh”,而且在主函数中最后会再次调用一次system函数,因此判断可以返回最后一次调用的位置。因此构造payload。
payload = 'a' * 0x88 + 'a' * 4 + p32(0x0804849e) + p32(0x0804a024)
最后的0x0804a024
为/bin/sh
的地址。
0x02
最后的exp为:
0x03
最后获取到shell,cat flag
得到flag。