简介
权限提升是一场旅行。没有什么灵丹妙药,很大程度上取决于目标系统的具体配置。内核版本、安装的应用程序、支持的编程语言和其他用户的密码是影响您通往 root shell 之路的几个关键要素。
“权限提升”是什么意思?权限提升通常涉及从权限较低的帐户升级到权限较高的帐户。
它为什么如此重要?在执行渗透测试时,很少能够获得为您提供直接管理访问权限的立足点(初始访问权限)。权限提升至关重要,因为它可以让您获得系统管理员级别的访问权限。
在这里,我将首先教您一些有关权限提升技术的理论,然后教您如何在机器上的实践。(实际上,我将重点关注权限提升的手动方法,但会提到可以完成一些工作并节省您时间的自动化工具)。这些技术对红队和蓝队都有帮助。
01 内核漏洞
理论
Linux 内核管理内存(RAM、ROM)、I/O、CPU 和应用程序等组件之间的通信。这个关键功能需要内核有特定的权限;因此,成功利用该漏洞可能会获取 root 权限。
利用内核漏洞方法进行提权很简单;
1.识别当前内核版本。
2.搜索或编写目标系统内核版本的漏洞利用程序。
3.运行漏洞利用程序。
虽然听起来很简单,但请记住,失败的内核漏洞 EXP 可能会导致系统崩溃。在尝试利用内核漏洞之前,请确保这种潜在风险在渗透测试范围内是可以接受的。
实践
首先,我们需要找到目标系统当前的内核版本,以便检查它是否存在漏洞。
uname -a:将打印系统信息和系统使用的内核。格式 -> 内核名称、主机名、内核版本 | 内核版本(3.16.0、5.16.0 等)机器(体系结构)、NIS。
现在我们已经有了内核版本(3.13.0),现在让我们去Exploit-DB查EXP。
检查第二个(CVE-2015–1328)。
Ubuntu受影响版本的linux(又名Linux内核)包中的overlayfs实现无法正确检查上层文件系统目录中的文件创建权限,这使得本地用户可以在任意挂载命名空间中使用overlayfs的配置来获得root访问权限。
下载漏洞利用程序,它是 C 代码。使用GCC等编译代码。
我们获得了系统的 ROOT 访问权限。
利用如下工具,因为它会自动检查内核版本并根据优先级(如果有)列出所有漏洞和利用链接,因此您无需手动搜索。
https://github.com/The-Z-Labs/linux-exploit-suggester
02 sudo
理论
默认情况下,Sudo 命令允许您以 root 权限运行程序。在某些情况下,系统管理员可能需要为普通用户提供一些权限上的灵活性。例如,初级安全工程师能需要定期使用 Nmap,但不会获得完全 root 访问权限。在这种情况下,系统管理员可以允许该用户仅以 root 权限运行 Nmap,同时在系统的其余部分保持其常规权限级别。
利用sudo方法进行提权很简单;
1. 确定哪个用户可以通过 root 或任何其他用户权限运行的程序。
2. 搜索并找到该程序的漏洞。
3. 运行漏洞利用程序来获取用户权限。
实践
检查目标系统中当前用户的权限级别。
sudo -l:目标系统可以被配置为允许用户以 root 或其他用户的权限运行某些(或全部)命令。此命令可用于列出用户可以使用 sudo 运行的所有命令。
在这种情况下,我们当前的用户可以运行 3 个二进制文件/程序。
我运行exec来生成一个shell,它可以作为一个可选参数在find程序中使用。在这里,因为find是以ROOT权限运行的,所以我们在它上面运行的任何东西都将以ROOT权限执行。
GTFOBins是 Unix 二进制文件的精选列表,可用于绕过错误配置系统中的本地安全限制。帮助突破受限制的 shell、升级或维护提升的权限、传输文件、生成绑定和反向 shell,以及其他任务。
https://gtfobins.github.io/
03 SUID
理论
SUID 或 Set Owner User ID 是适用于可执行文件的权限位标志。SUID 允许用户以与文件所有者相同的权限(而不是执行者的权限)运行可执行文件。例如,有一个安全团队,其中一名团队成员 JOHN 想与他的成员共享此程序,但问题是他不想共享他的帐户密码或将他的所有团队成员添加到 Sudo 条目,他要做的是在他的程序上设置一个SUID位,这样每当他的团队成员运行他的程序时,该程序都只会使用JOHN特权来执行。
利用SUID方法提权很简单;
1. 识别设置了 SUID 位的程序。
2. 搜索并找到该程序的漏洞。
3. 运行漏洞利用程序来获取用户权限。
实践
我们首先找到设置了SUID位的程序。
find -perm -4000:将列出设置了 SUID 位的文件。
您通常会得到很多 SUID 位设置程序,例如 at、su、passwd 和 mount 等,但它们不太容易出现漏洞。这里我找到了base64程序,它用于将数据转换为base64或将其解码为ASCII/UTF-8。
因此,我在这里可以做的是使用 root 权限从系统中读取任何文件,因为该程序设置了 root suid 位。
只需创建一个本地环境变量并分配您想要的任何文件,运行 base64 程序并传递参数的名称作为我们的本地环境变量名称。
它将使用 Base64 对其进行编码,并使用 PIPE 将输出传递给 Base64 解码器,因此,我们可以使用 ROOT 权限读取任何文件的内容。
参考及来源:
https://medium.com/bugbountywriteup/privileges-escalation-techniques-basic-to-advanced-in-linux-3cff8b623b
免责&版权声明
原文始发于微信公众号(安全小白团):Linux权限提升(基础到高级)0x1
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论