Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 进行缓冲区溢出攻击时未获取根shell_Linux_Bash_Buffer Overflow - Fatal编程技术网

Linux 进行缓冲区溢出攻击时未获取根shell

Linux 进行缓冲区溢出攻击时未获取根shell,linux,bash,buffer-overflow,Linux,Bash,Buffer Overflow,我正在学习Linux x86二进制文件中的缓冲区溢出攻击。我正在做一个经典的堆栈粉碎,通过禁用ASLR在Ubuntu12.04虚拟机中生成一个根shell,并通过禁用NX位和堆栈金丝雀编译二进制文件 在我的执行过程中,返回地址被覆盖,外壳代码被执行,但我没有得到根shell,而是得到一个bash shell 为了减轻bash保护,我正在使用zshshell,我已经删除了sh->bash符号链接,并在/bin目录中用zshshell创建了sh的符号链接 我已经尝试使用root拥有的启用setuid

我正在学习Linux x86二进制文件中的缓冲区溢出攻击。我正在做一个经典的堆栈粉碎,通过禁用ASLR在Ubuntu12.04虚拟机中生成一个根shell,并通过禁用NX位和堆栈金丝雀编译二进制文件

在我的执行过程中,返回地址被覆盖,外壳代码被执行,但我没有得到根shell,而是得到一个bash shell

为了减轻bash保护,我正在使用zshshell,我已经删除了sh->bash符号链接,并在/bin目录中用zshshell创建了sh的符号链接

我已经尝试使用root拥有的启用setuid的二进制文件(其他用户的执行权限),但仍然没有得到root shell

我已经用C程序验证了我的shell代码,同时编译了测试程序(我的shell代码),并在启用setuid后执行它。所以测试程序给出了根shell。但是,当相同的外壳代码用于缓冲区溢出时,我无法获得根外壳

当我在gdb中调试这个场景时,在溢出期间,将执行/bin/zsh4,但会导致bash shell

即使我也无法通过返回libc攻击获得根shell。这也会产生一个bash shell。我在Ubuntu12.04、Ubuntu11.04和Ubuntu9中尝试了这些步骤,但结果仍然是一样的


我是这方面的初学者。因此,在上述步骤中,我可能会犯一些错误。所以,请各位提出可能出现的问题以及解决方法。最后,我找到了这个错误的原因

在执行过程中,我的root权限被删除,因为我已禁用流程系统级别的ptrace以使用另一个工具。 我已将/proc/sys/kernel/yama/ptrace_范围值改写为0。这就是我没有得到根壳的原因

我从execve的手册页(用于创建外壳代码)中找到了以下信息:

如果在指向的程序文件上设置了set user ID位 文件名,并且基础文件系统未装入nosuid (mount(2)的MS_NOSUID标志),并且调用进程不是 如果是ptraced,则调用进程的有效用户ID为 已更改为程序文件所有者的文件。同样,当 程序文件的set group ID位设置为有效组ID 调用进程的组被设置为程序文件的组

所以现在当我不禁用ptrace_范围时,我得到了一个根shell


感谢merlin2011和naab参与本次讨论。

您确定要攻击的二进制文件本身是以
根运行的吗?您是否运行二进制文件(带有粘性位)而不是在gdb中?另外,“为了减轻bash保护,我正在使用zsh”:你是什么意思(不熟悉zsh)?有什么好处(如果您担心的话,当root生成一个root shell时生成一个新shell)?您是否尝试将标准的/bin/sh指向/bin/bash(而不是在gdb中)?@merlin2011我已将二进制文件的所有权更改为root,并在其上启用了setuid。@naab,我在启用s位的情况下运行二进制文件。我也试过用sh指向bash和dash shell。但我没有得到根壳。我也可以在gdb之外进行这种攻击,但是我得到的shell是bash shell。我尝试使用zsh也是因为,我听说如果我从setuid程序执行/bin/sh,bash和dash shell将放弃特权。如果我是,请纠正我wrong@user2103885,我知道二进制文件是
setuid
。我的问题是,当您启动二进制文件时,从中启动二进制文件的shell是根shell吗?