为可执行文件设置 SUID/SGID 权限

Setting SUID/SGID permissions to an executable

我想用一个具体的例子来展示利用缓冲区溢出的威力有多大。

为了实现这个目标,我准备了这个简单的 C 程序,名为 "bo":

#include <stdio.h>
#include <string.h>

void function(char* input) {
    char buffer[128];
    strcpy(buffer, input);
    printf("Your input is: %s\n", buffer);
}

void main(int argc, char **argv) {
        function(argv[1]);
}

我使用以下选项编译:-fno-stack-protector 和 execstack。

一切正常,我可以启动我的 shell代码打开一个新的 bash。

在我的系统(Ubuntu MATE 15.10 32 位)中,我有 2 个用户:"user"(组:user)和 "admin"(组:admin),都具有 sudo 权限。

我想要做的是启用"user"以"admin"的权限执行"bo",这样当缓冲区溢出发生并且shell代码是执行我有一个 shell 运行 具有 "admin" 特权(从这个 shell,如果我 运行 命令 "id" 或 "whoami" 我想表明现在我们是 "admin").

我看到我需要将 SUID/SGID 权限更改为 "bo"。我尝试了很多方法,但是当 shellcode 运行s 我总是有一个 shell 从 "user".

发射

sudo 授予调用用户 root 用户权限并以 root 身份运行任何进程。 su 过程用于 switch user

确保进程以管理员用户权限运行。 bo 二进制文件需要 chown admin:adminchmod u+s 作为管理员。 例如如果您的二进制文件当前看起来像这样:

ls -l bo
drwxrwxr-x user user <size> bo

如果您成为 root,然后成为管理员,然后更改您应获得的权限:

sudo -i # become root
chown admin: bo # change ownership
su - admin # become admin
chmod u+s bo # set sticky bit

然后 <ctrl-d> 两次回到 user 你应该看到:

ls -l bo
drwSrwxr-x admin admin bo

当然,您可以首先以 admin 用户身份编译代码,然后对其进行 chmod(也仍然是 admin 用户)成为 user 用户之前。

最后我发现我不仅遇到了权限问题,而且我的 shell 代码也没有生成根 shell。

顺便说一句,感谢 Cwissy 的建议,为了充分利用此漏洞,我必须在我的 bo 文件上设置一些权限:

sudo -i
chown 0:0 bo
chmod 4755 bo
exit

然后使用正确的 shell 代码(现在我使用 https://www.exploit-db.com/docs/21013.pdf 中的代码)我能够生成根 shell。

这与我最初的想法略有不同(生成具有 "admin" 权限的 shell)但这也是一个很好的例子。