1

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

为了实现这个目标,我准备了这个简单的 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。

一切正常,我可以启动我的 shellcode 来打开一个新的 bash。

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

我想要做的是使“用户”能够以“管理员”的权限执行“bo”,这样当发生缓冲区溢出并执行 shellcode 时,我有一个以“管理员”权限运行的 shell(并且从此shell,如果我运行命令“id”或“whoami”,我想表明现在我们是“admin”)。

我已经看到我需要将 SUID/SGID 权限更改为“bo”。我尝试了很多方法,但是当 shellcode 运行时,我总是有一个从“用户”启动的 shell。

4

2 回答 2

2

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

确保进程以管理员用户 privs 运行。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首先以用户身份编译代码,然后admin在成为user用户之前对其进行 chmod'ing(仍以用户身份)来消除所有 sudo 和 su 废话。

于 2016-04-27T06:27:08.457 回答
0

最后我发现我不仅有权限问题,而且我的 shellcode 没有生成 root shell。

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

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

然后使用正确的 shellcode(现在我使用来自https://www.exploit-db.com/docs/21013.pdf的那个)我能够生成一个 root shell。

它与我最初的想法略有不同(产生一个具有“管理员”权限的 shell),但这也是一个很好的例子。

于 2016-04-27T10:42:35.087 回答