- ```html
Linux用户提权 Linux用户提权
拿到一个低权限的shell,第一件事就是户提看内核版本和发行版。我见过太多人上来就翻SUID,户提结果花半小时找了个寂寞。户提正确的户提顺序应该是:
uname -a,然后cat /etc/os-release。户提这两个命令的户提输出直接决定了你接下来走哪条路。比如内核3.10以下的户提CentOS 7,脏牛(CVE-2016-5195)基本一打一个准;如果是户提Ubuntu 18.04,别急着编译exp,户提先看看有没有配错sudo。户提sudo的户提配置错误比内核漏洞更常见,也更隐蔽。户提很多人只知道
sudo -l看自己能跑什么,户提但忽略了/etc/sudoers里那些通配符和相对路径。户提我遇到过一台机器,运维给开发组配了/usr/bin/find的sudo权限,理由是“查日志方便”。结果呢?sudo find / -exec /bin/sh \;直接root。这种提权不需要任何exploit,纯配置问题,但危害一样大。真实案例:某次内网渗透,目标是一台CentOS 6.5。内核2.6.32,脏牛可用,但编译环境缺失。转去看SUID,发现
/usr/bin/passwd权限正常,但/bin/mount被设了SUID。当时就笑了——mount提权是老掉牙的手法,但很多加固指南只删nmap、vim的SUID,忘了mount。直接mount -o bind /bin/sh /bin/mount,然后跑mount,root shell到手。SUID这块,别只盯着
find、nmap、vim这些明星文件。真正容易被忽略的是那些“看起来人畜无害”的工具。比如/usr/bin/at,如果它带SUID,可以用at执行命令;/usr/bin/screen在某些版本下也能提权。我习惯用find / -perm -4000 -type f 2>/dev/null列全,然后逐个查GTFOBins。但GTFOBins也不是万能的——有些二进制在特定发行版上行为不一样,得自己试。环境变量提权是另一个坑。很多人知道
PATH劫持,但不知道LD_PRELOAD在sudo里也能玩。如果sudo -l显示env_keep+=LD_PRELOAD,那恭喜你,写个共享库,构造函数里setuid(0),然后sudo LD_PRELOAD=/tmp/evil.so任意命令,直接root。这个手法在Ubuntu 16.04到20.04上屡试不爽,因为默认sudoers里就带着env_keep+=LD_PRELOAD。检查方法很简单:sudo -l输出里找LD_PRELOAD,有就稳了。再说说cron。
/etc/crontab和/etc/cron.d/里的任务,如果脚本路径可写,或者脚本调用的命令没写绝对路径,那就是提权点。我见过一个备份脚本,里面写的是tar -czf /backup/$(date +%F).tar.gz /home,但tar没写绝对路径。而/etc/crontab的PATH里,/tmp排在/bin前面。往/tmp/tar扔个反弹shell,等一分钟,root就送上门了。这种漏洞在老旧系统里特别多,因为运维写脚本时图省事。内核提权虽然威力大,但风险也高。脏牛、Dirty Pipe(CVE-2022-0847)、PwnKit(CVE-2021-4034)这些,编译前一定先看目标架构和glibc版本。有次在ARM设备上跑x86的exp,直接段错误,还把系统搞崩了。建议先用
uname -m确认架构,再找对应的exp。另外,内核提权成功后,记得恢复现场——有些exp会改/etc/passwd或者留下临时文件,清理不干净容易被管理员发现。最后说个非技术层面的:提权前先看
/home下有没有其他用户的目录,里面可能有.bash_history、.ssh私钥、甚至数据库密码。我见过最离谱的,一个开发把id_rsa放在/var/www/html/backup/里,权限644。这比任何内核漏洞都直接。所以别一上来就怼内核,花五分钟翻翻文件系统,往往有惊喜。提权不是单一技术,是信息收集、配置审计、漏洞利用的组合拳。每个系统都有自己的脾气,多试多看,别死磕一条路。
``` 顶: 68踩: 44855






评论专区