当我使用诸如此处提供的 shellcode 作为某些易受攻击程序的有效负载时,shell 如何以 root 身份执行?我在问特权如何提升到root?shellcode 似乎没有调用setuid
或更改用户的任何内容。
* http://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html
当我使用诸如此处提供的 shellcode 作为某些易受攻击程序的有效负载时,shell 如何以 root 身份执行?我在问特权如何提升到root?shellcode 似乎没有调用setuid
或更改用户的任何内容。
* http://www.tenouk.com/Bufferoverflowc/Bufferoverflow5.html
这些例子包括:
mov $70, %al #setreuid is syscall 70
所以他们正在使用setreuid(2)
系统调用,它设置进程的真实和有效用户 ID:
int setreuid(uid_t ruid, uid_t euid);
为了执行 shellcode,你需要一个像缓冲区溢出这样的漏洞。shellcode 拥有作为运行进程的所有权利。因此,如果您利用 setuid root 的二进制文件(如passwd
命令)或以 root 身份运行的二进制文件(如cupsd
守护进程),则攻击者将拥有 root 访问权限。内核也可能遭受缓冲区溢出的影响,并且也可以通过这种方式获得 root 访问权限。
首先,您需要以 root 权限授予程序(使用 chown 和 chmod 作为 root)。你需要 setreuid() 作为你的有效载荷。如果您可以通过其他用户利用该程序,那将给您root。
当然,如果你的 vuln 程序有一个所有者root
并且你的 shellcode 有一个setuid(0)
系统调用,你可以执行/bin/sh
为root