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。
本文详细解析了一个栈溢出漏洞的分析与利用过程。通过对32位ELF文件的检查,发现仅开启不可执行堆栈保护。利用IDA进行反汇编,分析main和vulnerable_function函数,揭示了栈溢出的成因。构造payload覆盖返回地址,最终成功获取shell并读取flag。

1715

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



