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

时间:2016-04-26 22:37:44

标签: bash privileges chmod chown suid

我希望用一个具体的例子来说明利用缓冲区溢出的强大程度。

为实现这一目标,我准备了这个简单的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个用户:&#34;用户&#34; (组:用户)和&#34; admin&#34; (group:admin),都有sudo权限。

我想要做的是启用&#34;用户&#34;执行&#34; bo&#34;拥有&#34; admin&#34;的特权这样当缓冲区溢出发生并且shellcode被执行时,我有一个用&#34; admin&#34;运行的shell。特权(从这个shell,如果我运行命令&#34; id&#34;或&#34; whoami&#34;我想表明现在我们是&#34; admin&#34;)。

我已经看到我需要将SUID / SGID权限chmod到&#34; bo&#34;。我试过很多方面,但是当shellcode运行的时候,我总是从&#34;用户&#34;中推出一个shell。

2 个答案:

答案 0 :(得分:2)

sudo为调用用户提供root用户权限,并以root身份运行任何进程。 su进程用于switch user

确保进程与admin用户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用户来取消所有sudo和su废话,然后chmod&#39;(仍然作为{{1 }} user)在成为admin用户之前。

答案 1 :(得分: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中的那个),我能够生成根shell。

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