我理解缓冲区溢出是什么。正如文献中所说,“当固定长度的缓冲区达到其容量并且进程试图存储超出该最大限制的数据时,就会发生缓冲区溢出。”因此,我正在访问超出数据区域的内存区域,可能是我正在访问系统区域。如果我错了,请纠正我,请参阅最后的第 1 个问题。
另外,我发现这个定义是:“根缓冲区溢出是旨在获取系统根权限的缓冲区溢出。”
现在我的问题是,
- 用户进程怎么会在内存的系统区域写入数据?操作系统难道没有能力保护自己或其内存区域吗?或者我可能搞错了。
- 根缓冲区溢出如何导致进程获得系统的 root 权限? 因为据我所知,您需要执行诸如
su
或sudo
之类的命令,然后提供一个神圣的密码才能实现这一点。
答案1
- 它不会写入内存的“系统区域”。它仍然在用户进程的内存空间中。攻击者通常试图写入用户内存的是“shellcode”,这实际上会让他获得系统上的命令提示符。对于非 root 进程,这将是一个非 root shell。但是,这样的 shell 仍然可以作为进一步攻击的基础。例如,有时内核错误允许本地用户获得 root 权限。在这种情况下,普通 shell 是 root shell 的直接垫脚石。
- 您的术语“root 缓冲区溢出”很可能只是指对以 root 身份运行的程序的缓冲区溢出攻击。在这种情况下,成功的攻击不仅会让您获得 shell,还会让您获得 root shell。