内容提要
本文记录了在学校计算机系统课上进行缓冲区溢出实验的过程,实验分为五个阶段,涉及利用溢出技术触发不同函数。每个阶段需确定缓冲区大小和函数地址,并通过汇编代码实现攻击,最后展示在保护机制下利用已有代码完成任务。
关键要点
-
实验环境为学校服务器的 Ubuntu 16.04.5 LTS,使用 64 位程序进行缓冲区溢出实验。
-
实验分为五个阶段,每个阶段需要确定缓冲区大小和函数地址,并通过汇编代码实现攻击。
-
第一阶段触发 touch1 函数,通过缓冲区溢出替换返回地址为 touch1 的地址。
-
第二阶段触发 touch2 函数,需要将 cookie 值放入寄存器 %rdi,并通过汇编代码实现。
-
第三阶段触发 touch3 函数,需要传入 cookie 的字符串表示,使用 lea 命令将 cookie 地址放入 %rdi。
-
第四阶段使用 rtarget 作为攻击目标,利用程序中的二义性指令触发 touch2 函数。
-
第五阶段需要利用更多的内鬼指令,将 cookie 的 ASCII 值赋给 %rdi,完成触发 touch3 函数的操作。
延伸解读
实验环境与工具
本实验在学校的 Ubuntu 16.04.5 LTS 服务器上进行,使用 64 位程序进行缓冲区溢出测试。了解实验环境和工具的配置对于复现实验至关重要,确保使用相同的操作系统和程序版本可以避免因环境差异导致的错误。
缓冲区溢出攻击的关键步骤
实验分为五个阶段,每个阶段都需要精确计算缓冲区大小和目标函数地址。掌握这些关键步骤不仅有助于理解攻击过程,还能帮助识别和防范类似的安全漏洞。特别是在第二阶段,正确处理 cookie 值的传递至关重要。
保护机制的挑战
在第四阶段,rtarget 引入了栈保护机制,包括随机化栈地址和栈不可执行。这些保护措施增加了攻击的复杂性,要求攻击者必须灵活运用已有代码中的指令。理解这些保护机制的工作原理有助于更好地设计安全防护措施。
延伸问答
缓冲区溢出攻击实验的环境是什么?
实验环境为学校服务器的 Ubuntu 16.04.5 LTS,使用 64 位程序进行缓冲区溢出实验。
缓冲区溢出攻击实验分为几个阶段?
实验分为五个阶段,每个阶段需要确定缓冲区大小和函数地址,并通过汇编代码实现攻击。
第一阶段的攻击目标是什么?
第一阶段的攻击目标是触发 touch1 函数,通过缓冲区溢出替换返回地址为 touch1 的地址。
第二阶段需要将什么值放入寄存器?
第二阶段需要将 cookie 值放入寄存器 %rdi,并通过汇编代码实现。
第三阶段的输入要求是什么?
第三阶段需要传入 cookie 的字符串表示,使用 lea 命令将 cookie 地址放入 %rdi。
第四阶段的攻击目标与前几阶段有什么不同?
第四阶段使用 rtarget 作为攻击目标,开启了栈保护机制,使得攻击更难入手。