利用后未使用 SUID

信息安全 linux 攻击
2021-09-06 17:37:42

我知道以下

当您执行启用了 SUID 位的程序时,您将继承该程序所有者的权限。

我目前是user1,但想阅读通行证user2

  1. 我验证了 SUID 位ls -l file

    user1@ssh/path$ ls -l file
    -r-sr-x--- 1 user2 user1 5164 Nov  9 15:08 file
    
  2. 我做我的利用 => ./file arg=exploit并得到一个外壳

  3. 为了验证它是否有效,我做了一个 whoami。

    $ whoami
    user1
    

我还是原来的用户?!,我不知道这是怎么回事。

如果需要更多信息,请告诉我。

1个回答

您对 setuid 的理解是正确的。当您执行具有 suid 位的程序时,该进程将继承该程序所有者的权限。您缺少的知识是外壳在调用后所做的事情。许多流行的 sh 启动时删除权限的实现:它们将有效 UID 重置为真实 UID。这包括 bash、dash、mksh 和 BusyBox sh,因此在 Linux 上您不会看到任何其他内容。

当程序运行 shell 时(例如,通过调用system标准 C 库中的函数,或其他语言的等效函数),shell 以提升的权限开始,但在执行任何用户代码之前下降到普通权限。这减轻了 setuid 程序中的攻击,其中攻击者只能运行一个不打算以提升的权限运行的 shell 命令(例如,因为 shell 命令被隐藏在应用程序程序员不知道的库代码中)。

这并不能缓解攻击者运行任意代码的漏洞。只是为了得到一个shell,你必须比调用更努力一些system安排调用一些不同的解释器,例如运行execve("/usr/bin/perl", "/usr/bin/perl")(如果您不想终止父程序,请先分叉)。