简介
权限提升是渗透测试和道德黑客攻击中的一个关键阶段。一旦攻击者获得了系统的初始低权限访问权限,他们的下一个目标通常是将权限提升为管理员或 root 用户。成功的权限提升在很大程度上依赖于细致的系统枚举——即尽可能多地收集有关目标系统配置、运行进程、文件权限和已安装软件的信息。
本模块旨在强化一个核心原则:枚举先于利用。大多数成功的权限提升并非魔法,而是发现了原本就存在的配置错误或关联关系。
为了简化这一繁琐的过程,安全专业人员会使用自动化枚举脚本。最流行且符合行业标准的工具之一是 LinPEAS (Linux Privilege Escalation Awesome Script)。LinPEAS 会自动搜索 Linux/Unix/macOS 主机上可能的提权路径,并使用颜色编码系统突出显示发现的内容,以指示成功利用的概率。
自动化之所以有帮助,是因为现代系统过于复杂,无法在每次参与测试时都完全通过人工检查。但脚本的输出仍然需要人工解读。
在本实验中,你将模拟一个后渗透场景。你将扮演一名渗透测试人员,需要将 LinPEAS 脚本从你的「攻击者」机器传输到「目标」机器,执行它,并分析输出以识别高概率的提权向量。
启动本地 Web 服务器以进行传输
在这一步中,你将学习如何托管文件,以便将其传输到目标机器。在渗透测试期间,你通常会在本地机器上拥有一个有用的脚本(如 LinPEAS),但你需要一种方法将其放入受感染的目标服务器中。
在 Linux 中托管文件的一种快速且内置的方法是使用 Python 的 HTTP 服务器模块。这使你可以立即将任何目录变成一个轻量级的 Web 服务器。
在本实验中,我们在你的工作区内模拟了两个环境。~/project/attacker 目录代表包含 linpeas.sh 脚本的本地机器。~/project/target 目录代表你需要下载脚本的受感染服务器。
首先,导航到脚本所在的攻击者目录:
cd ~/project/attacker
列出目录内容以验证脚本是否存在:
ls -l
你应该会在输出中看到 linpeas.sh。现在,在 8080 端口启动一个 Python HTTP 服务器。我们将在命令末尾使用 & 符号,以便在后台运行服务器,从而允许你继续使用同一个终端窗口:
python3 -m http.server 8080 &
你将看到类似于以下的输出,表明服务器正在运行:
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
按一次 Enter 键以返回终端提示符。你的本地 Web 服务器现在正在积极托管 linpeas.sh 文件。
将 LinPEAS 下载到目标机器
在这一步中,你将扮演受感染的目标机器,并从攻击者的 Web 服务器下载脚本。
Linux 系统通常默认安装了命令行下载工具,例如 wget 或 curl。这些工具对于将脚本和漏洞利用程序拉取到目标系统上非常有用。
首先,导航到模拟的目标目录:
cd ~/project/target
现在,使用 wget 命令从你在上一步中启动的本地 Web 服务器下载 linpeas.sh 脚本。由于在本实验中服务器运行在同一环境中,你将使用 localhost 作为地址:
wget http://localhost:8080/linpeas.sh
你将看到显示下载进度的输出:
--2026-10-25 10:00:00-- http://localhost:8080/linpeas.sh
Resolving localhost (localhost)... 127.0.0.1
Connecting to localhost (localhost)|127.0.0.1|:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 645 [text/x-sh]
Saving to: ‘linpeas.sh’
linpeas.sh 100%[===================>] 645 --.-KB/s in 0s
2026-10-25 10:00:00 (15.4 MB/s) - ‘linpeas.sh’ saved [645/645]
通过列出目录内容来验证文件是否已成功下载:
ls -l
现在你应该能看到 linpeas.sh 位于你的 ~/project/target 目录中。
执行脚本
在这一步中,你将准备并执行 LinPEAS 脚本。
运行工具仅仅是个开始。真正的价值在于识别哪些发现是正常的干扰信息,哪些映射到实际的提权路径。
当你从互联网下载脚本或通过 Web 服务器传输它时,出于安全原因,Linux 会移除其「可执行」权限。如果你尝试立即运行它,将会收到「Permission denied」(权限被拒绝)错误。
要解决此问题,你必须使用 chmod(更改模式)命令为文件添加可执行 (+x) 权限。
运行以下命令使脚本可执行:
chmod +x linpeas.sh
如果你再次运行 ls -l,你会注意到文件权限已经改变(通常显示用户的 rwx),并且文件名在终端中可能会以不同的颜色显示,表明它现在是一个可执行程序。
现在,执行脚本。在 Linux 中,要运行当前目录下的可执行文件,必须在其前面加上 ./。这会告诉系统确切地在哪里找到该程序:
./linpeas.sh
你将看到脚本运行并输出各种系统检查结果。在现实场景中,LinPEAS 会输出数千行信息。在本实验中,我们使用了一个精简的模拟版本,它突出了核心概念。
[+] LinPEAS - Linux Privilege Escalation Awesome Script (Mock Version)
========================================================================
[?] Basic System Information
Linux labex-vm 5.15.0-1040-aws #45-Ubuntu SMP ...
[!] HIGH PROBABILITY PRIVILEGE Escalation VECTORS
[+] SUID files:
-rwsr-xr-x 1 root root 43K /usr/bin/sudo
-rwsr-xr-x 1 root root 32K /usr/bin/su
-rwsr-xr-x 1 root root 15K /usr/bin/custom_backup (Unknown SUID)
[?] Checking sudo permissions
User labex may run the following commands on this host:
(ALL : ALL) ALL
[+] Enumeration Completed.
花点时间查看输出。注意它是如何将信息分类为「基本系统信息」和「SUID 文件」等部分的。
分析高概率向量
在这一步中,你将学习如何管理和分析枚举脚本生成的输出。
由于真实的枚举脚本会产生海量的文本,渗透测试人员很少直接在终端屏幕上阅读。相反,他们会将输出重定向到一个文本文件中,以便稍后使用 grep 等工具进行搜索。
让我们再次运行脚本,但这次我们将使用 > 操作符将输出重定向到一个名为 results.txt 的文件中:
./linpeas.sh > results.txt
注意这次屏幕上没有打印任何内容。所有文本都直接发送到了 results.txt 中。
现在,让我们分析结果。LinPEAS 以其颜色编码而闻名,其中红色/黄色文本表示 99% 的权限提升向量概率。在我们的输出中,它标记了一个「未知 SUID」文件。
SUID (Set owner User ID up on execution) 是一种赋予文件的特殊文件权限。当执行带有 SUID 的文件时,它会以文件所有者(通常是 root)的权限运行,而不是以运行它的用户权限运行。如果一个自定义或易受攻击的二进制文件设置了 SUID 位,攻击者就可以利用它来获得 root shell。
使用 grep 命令专门在 results.txt 文件中搜索关键字 SUID:
grep "SUID" results.txt
你应该会看到以下输出:
[+] SUID files:
-rwsr-xr-x 1 root root 15K /usr/bin/custom_backup (Unknown SUID)
通过过滤输出,你已经成功识别出一个高度可疑的文件 (/usr/bin/custom_backup)。在真实的渗透测试中,你的下一步将是调查这个特定的二进制文件,看看它是否可以被利用来授予你 root 访问权限。
总结
在本实验中,你体验了权限提升自动化系统枚举的关键过程。你学习了如何使用 Python 内置的 HTTP 服务器模块在本地托管文件。你还学习了如何使用 wget 等命令行工具将文件传输到目标机器。此外,你练习了修改文件权限以使脚本可执行并运行它们。最后,你学习了如何将脚本输出重定向到文件,并使用 grep 分析数据以查找高概率的提权向量,例如配置错误的 SUID 二进制文件。
对于任何安全专业人员或渗透测试人员在评估 Linux 系统的内部安全态势时,这些基本技能都是必不可少的。



