安全绕过机制
地址:https://tryhackme.com/room/sudovulnsbypass
这是一个关于 Unix Sudo 程序中 CVE-2019-14287 漏洞的教程。属于 SudoVulns 系列中的第一部分内容。
安全绕过机制
CVE-2019-14287 是苹果公司的一名研究人员 Joe Vennix 在 Unix 系统的 Sudo 程序中发现的漏洞。巧合的是,他还发现了本系列文章下一节将要介绍的另一个漏洞。虽然该漏洞已经得到修复,但在较旧版本的 Sudo 中可能仍然存在(即 1.8.28 之前的版本)。因此,大家务必注意防范这一漏洞!
对于那些可能不太熟悉的人来说:sudo 是 Unix 系统中的一项命令,它允许用户以其他用户的身份来执行程序。通常情况下,该命令以超级用户(root)的身份来执行程序,但也可以通过指定其他用户的用户名或 UID 来以该用户的身份执行程序。例如,通常情况下,sudo 的用法是 sudo <command> ,但也可以手动选择以其他用户的身份来执行命令,比如 sudo -u#<id> <command> 。这意味着,在执行命令时,你实际上是在以另一用户的身份来操作系统,从而获得比正常情况下更高的权限。举个例子:

在这个例子中,我的用户账户没有权限读取文件 /root/root.txt 。因此,我使用了 sudo 命令暂时获得 root 权限,从而能够读取该文件。
与 Unix 系统中的许多命令一样,sudo 也可以通过编辑系统中的配置文件来进行配置。在 Unix 系统中,该配置文件的名称为 /etc/sudoers 。由于该文件对操作系统的安装非常重要,因此不建议直接编辑该文件。不过,你可以使用 sudo visudo 命令来安全地编辑该文件。该命令会在保存文件时进行检查,确保不会造成配置错误。
在这项任务中,我们感兴趣的漏洞出现在一种特定的情况下。假设你希望授予某个用户额外的权限。你希望让该用户能够像普通用户一样执行某个程序,但又不想让他以 root 身份来执行该程序。你可以将以下内容添加到 sudoers 文件中:
<user> ALL=(ALL:!root) NOPASSWD: ALL
这样一来,用户就可以以其他用户的身份来执行各种命令。不过,从理论上来说,用户无法以超级用户/管理员/root 的身份来执行命令。换句话说,用户可以假扮成任何用户,唯独不能假扮成管理员。
理论上来说。
实际上,利用 Sudo 的易受攻击版本,可以绕过这一限制,以 root 权限来执行程序。显然,这对提升权限来说非常有用!
按照上述配置,使用 sudo -u#0 <command> 来执行命令是无效的(root 用户的 UID 始终为 0),因为我们不允许以 root 身份执行命令。如果我们试图以用户 0 的身份来执行命令,将会出现错误。请参考 CVE-2019-14287 相关说明。
Joe Vennix 发现,如果将 UID 设置为-1(或其无符号形式:4294967295),Sudo 会错误地将其解读为 0,也就是 root 权限。这意味着,只要将 UID 设置为-1 或 4294967295,就可以以 root 身份执行命令,尽管系统本来应该禁止这种操作。需要注意的是,只有当您被授予了该命令的非 root 权限时,这种方法才能奏效,就像上面的配置所示。
实际上,其应用方式如下: sudo -u#-1 <command>

现在轮到你了。
使用端口 2222,通过 SSH 连接到你之前部署的那台机器上。

我们可以看到当前用户的/bin/bash拥有sudo权限

