本实验的学习目标是让学生亲身体验缓冲区溢出攻击的一个有趣的变种,
这种攻击可以绕过目前Linux操作系统中实现的保护方案。
利用缓冲区溢出漏洞的常见方法是将恶意的shellcode注入到被攻击者的栈上,
然后让被攻击的程序跳转到 shellcode。为了防止这类攻击,
一些操作系统允许程序将其堆栈设置成不可执行,这样的话,跳转到shellcode会导致程序失败。
不幸的是,上述保护方案并非万无一失。 存在一种称为 Return-to-libc 的缓冲区溢出攻击变种, 它不需要可执行堆栈,甚至不使用 shellcode。 相反,它使易受攻击的程序跳转到一些现有代码, 例如进程内存空间中已加载的 libc 库中的 system() 函数。
在这个实验中,学生将获得一个具有缓冲区溢出漏洞的程序, 他们的任务是开发一个 Return-to-libc 攻击来利用这个漏洞, 并最终获得root权限。 除了攻击之外,学生还将了解Ubuntu中实现的一些保护方案, 以反击缓冲区溢出攻击。