拿到一个普通用户 shell,渗透离 root 还差十万八千里。测试操作渗透测试里最容易被卡住的提权环节就是提权——你明明已经进了内网,能看到数据库配置文件,渗透但改不了
/etc/passwd,测试操作读不了/etc/shadow,提权连重启服务都得求运维。渗透这种憋屈感,测试操作每个打过靶场或者真实环境的提权人都懂。先说一个真实案例。渗透去年帮朋友看一台测试机,测试操作Ubuntu 18.04,提权Web 服务跑在 www-data 下。渗透翻了一遍
/home和/tmp,测试操作没找到 SUID 异常文件。提权后来用ps aux看到 root 跑了一个自定义备份脚本,路径在/opt/backup.sh。权限是-rwxr-xr-x,但脚本内容里有一行tar -czf /backup/$(date +%s).tar.gz /var/www/html。问题不在 tar,在于脚本调用了date,而date的查找路径里/tmp排在了/usr/bin前面。往/tmp/date扔一个反弹 shell 的可执行文件,等 root 的 cron 一跑,直接拿到 root。这种路径劫持在老旧系统里一抓一个准。提权不是背命令清单。有人上来就
sudo -l、找 SUID、翻.bash_history,这没错,但光靠工具跑linpeas.sh然后对着输出发呆,效率太低。我的习惯是先问自己三个问题:这台机器上什么进程以更高权限在跑?哪些文件我能写但属于别人?内核或者某个服务版本有没有已知的本地提权漏洞?进程这块,
ps -ef配合grep root能筛出不少东西。比如 MySQL 以 root 启动,而/var/lib/mysql目录权限不严,那就可以通过写 UDF 提权。再比如 Docker 组权限没控好,普通用户能跑docker run -v /:/mnt,进去 chroot 一下就是 root。这些场景比内核漏洞更常见,因为运维图省事。文件权限方面,别只盯着 SUID。Linux 的 capabilities 是个宝藏。
getcap -r / 2>/dev/null能列出所有带 cap 的文件。如果python3带了cap_setuid+ep,一行python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'就结束了。还有/etc/passwd可写但/etc/shadow不可读的情况,直接改 root 的密码哈希为已知值,su 上去就行。这种错配在容器环境里尤其多。内核漏洞要看版本,但别乱用 exp。我见过有人对着 CentOS 7 的 3.10 内核硬打 DirtyCow,结果机器直接 panic,生产环境就崩了。稳妥的做法是先
uname -a,再对照searchsploit的结果,确认编译环境和依赖再动手。实在不行,试试sudo的版本漏洞,比如 CVE-2021-3156(Baron Samedit),影响面广,利用条件也不算苛刻。说个容易忽略的点:环境变量。
echo $PATH如果包含当前目录或者/tmp,而某个 root 定时任务又调用了不带绝对路径的命令,那就是提权入口。还有LD_PRELOAD,如果sudo -l显示能设置env_keep+=LD_PRELOAD,编译一个恶意共享库,sudo 执行任何命令时都会加载它。最后,提权成功不代表结束。拿到 root 后第一件事是留后门——加 SSH key、写 cron 反弹、或者改
顶: 691踩: 15896sudoers加一个隐蔽用户。但别太张扬,/var/log/auth.log会记录 su 和 sudo 的每一次调用。清理痕迹和提权本身一样重要。真实攻防里,从 www-data 到 root 可能只需要五分钟,但擦干净屁股得花半小时。






评论专区