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