渗透测试提权
拿到一个普通用户 shell,渗透离拿到 root 还差十万八千里。测试很多人卡在这一步,提权对着 whoami 的渗透输出发呆,然后开始漫无目的测试地翻 /etc/passwd。说实话,提权提权这件事,渗透七分靠信息收集,测试三分靠漏洞利用。提权你漏掉一个 SUID 文件,渗透可能就漏掉了整台机器。测试
先说 SUID。提权这东西是渗透 Linux 提权里最经典的入口,没有之一。测试原理很简单:一个可执行文件如果被设置了 SUID 位,提权运行它的时候会以文件所有者的权限执行,而不是当前用户的权限。如果 root 拥有某个 SUID 程序,而这个程序又能被滥用——比如 find、vim、nmap——那你基本上就赢了。
我印象很深的一次是靶机练习里碰到 /usr/bin/find 带 SUID 位。当时直接用:
find . -exec /bin/sh -p \; -quit 一个 root shell 就弹出来了。-p 参数保留权限,不加的话某些系统会降权。这种手法在 GTFOBins 上有一整张表,没事就该去翻翻,比背命令有用得多。
SUID 之外,sudo -l 是第二个必须查的东西。用户能不能免密执行某些命令,直接决定了攻击面。有次碰到一个配置,允许当前用户以 root 身份运行 /usr/bin/awk。awk 本身不是漏洞,但它能调用系统函数:
sudo awk 'BEGIN { system("/bin/bash")}' 提权完成。这类配置错误在真实环境里比想象中常见,运维图省事给开发开了 sudo 权限,结果忘了收。
定时任务也值得盯。 /etc/crontab 和 /etc/cron.d/ 里的脚本,如果某个 root 定时执行的脚本所在目录当前用户可写,直接往里塞反弹 shell 的代码就行。更隐蔽的情况是脚本本身不可写,但它调用的某个二进制文件在可写路径下——PATH 变量被劫持的时候,你替换掉那个二进制,下次 cron 触发就是你的机会。
内核漏洞是另一条路,但我不太喜欢一上来就掏 linux-exploit-suggester。内核 exp 稳定性差,打崩了机器就得重来。先看 uname -a 确认版本,再对照 CVE 数据库。DirtyPipe(CVE-2022-0847)影响 5.8 到 5.16.11 之间的内核,利用起来相对干净,不需要编译复杂的东西。但脏牛那种老漏洞,现在基本碰不到了,别浪费时间。
环境变量这块容易被忽略。echo $PATH 看看有没有当前目录或者可写目录排在前面。如果有,而某个 root 权限的脚本又直接调用了不带绝对路径的命令,那你放一个同名恶意文件进去,等它执行就行。这种手法在 CTF 里快被玩烂了,真实环境里反而少见,因为大部分发行版的默认 PATH 配置没那么蠢。
还有一类是凭据泄露。 .bash_history、.mysql_history、配置文件里的明文密码、SSH 私钥权限配置不当——这些东西翻起来枯燥,但命中率不低。我见过 /var/www/html/config.php 里直接写着数据库 root 密码,而那个密码和系统 root 密码一模一样。运维图省事,一个密码走天下,这种习惯害死人。
提权工具像 LinPEAS、LinEnum 能帮你自动化收集,但别完全依赖它们的输出。工具标红的东西不一定能用,没标红的地方也可能藏着关键信息。我习惯先手动过一遍 SUID、sudo、cron、内核版本这四个点,再跑脚本查漏。手动过程能帮你建立对目标系统的直觉,知道哪些异常是正常的,哪些正常得可疑。
最后说一句,提权不是找到一个 exp 就完事。拿到 root 之后要做的持久化、痕迹清理、横向移动,那是另一个话题。但前提是,你得先上去。
(责任编辑:综合)














