【问题标题】:Setting SUID/SGID permissions to an executable将 SUID/SGID 权限设置为可执行文件
【发布时间】:2016-08-20 23:55:42
【问题描述】:

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

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

【问题讨论】:

    标签: bash privileges chmod chown suid


    【解决方案1】:

    最后我发现我不仅有权限问题,而且我的 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),但这也是一个很好的例子。

    【讨论】:

      【解决方案2】:

      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
      

      然后&lt;ctrl-d&gt; 两次恢复为user,您应该会看到:

      ls -l bo
      drwSrwxr-x admin admin bo
      

      当然,您可以首先将代码编译为admin 用户,然后在成为admin 用户之前对其进行chmod'ing(也仍然是admin 用户),从而消除所有的sudo 和su 废话。 user 用户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 2011-04-30
        • 1970-01-01
        相关资源
        最近更新 更多