64位Linux上的缓冲区溢出

亚历山大·斯卡(Alexander Cska)

我一直在玩缓冲器溢出的游戏。我已经能够进行一些简单的攻击。我一直在使用“ C”代码来完成此操作,该代码将包含外壳程序代码的字符串转换为函数指针。这样做对我来说很有趣,例如,我从未假设过函数指针可以允许用户执行代码,甚至在源代码中也没有进行硬编码。对于一个简单的例子,请参见以下内容:

#include <unistd.h>



char code[] = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb"
              "\x16\x5b\x31\xc0\x88\x43\x07\x89\x5b\x08\x89"
              "\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d\x53\x0c\xcd"
              "\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f"
              "\x73\x68\x4e\x41\x41\x41\x41\x42\x42\x42\x42";

int main(int argc, char **argv)
{

        /*creating a function pointer*/

        char (*func)();

        func = (char (*)()) code;
        func();



}

这小段代码将在64位Linux上生成shell。问题是:是否可以使用Shell脚本获取root权限。尝试这将很有趣。我在互联网上发现了一些声称可以执行此操作的Shell脚本,但是它们仅生成段。我尝试运行它们时出现故障。如果有人可以给我任何提示,无论是否有可能,我将不胜感激。我还要感谢任何有趣的shell脚本。

干杯。

溶胶

仅有常规的缓冲区溢出,shell代码无法执行原始程序无法执行的任何操作,因此您需要实际的内核利用。

当您拥有以root身份运行的程序时,通常会得到root shell,这是因为它们具有+ s标志(设置uid),或者是因为它们是从系统外部某处获取用户输入的守护程序。

Setuid程序是与您以不同的用户身份运行的程序。就拿su例如,它的所有者是root,具有+ S设定,因此以root身份运行无论是谁启动它。然后,程序尝试确认是否允许您升级特权,并为您请求的用户生成一个shell。如果存在缓冲区溢出漏洞,su并且要在其中放入常规/bin/sh有效负载,那么最终将得到一个root shell。

守护程序可以是例如以root用户身份运行以进行某些操作的Web界面(也许可以关闭PC)。如果它具有可以从计算机外部访问的漏洞,例如HTTP标头中的缓冲区溢出,则可以再次生成根shell。

您看到的shell可能使用了setuid()C函数(或类似的函数),如果该进程具有足够的特权,则它们可以与+ s相同

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章