任务 4:在不知道缓冲区大小的情况下发起攻击
章节大纲
-
在任务 3 的攻击中,我们通过使用 gdb 知道了缓冲区的大小。但是在现实世界中,这可能很难得到。例如,如果目标是一个运行在远程机器上的服务器程序,我们无法获取二进制或源代码副本。在这个任务中我们将增加一个约束:你仍可以使用 gdb,但不允许通过你的观察直接得到缓冲区大小。事实上,缓冲区大小已经在 Makefile 中提供,但是你不允许在攻击中使用这些信息。
你的任务是通过这种限制条件将易受攻击的程序运行你的 shellcode。我们假设你知道缓冲区大小的范围为 100 到 200 字节。另一个可能对你有用的事实是,由于内存对齐的关系,框架指针的值总是 4 的倍数(32位程序)。请注意,你只能构建一个适用于此范围内所有缓冲区大小的有效 Payload。如果你使用暴力破解的方法(即尝试每个缓冲区大小)那么将不会获得全部分数。尝试的次数越多,被受害者发现的概率更高,这也是为什么减少尝试次数对于一个攻击非常重要。在你的实验报告中,你需要描述你的方法,并提供证据。