Administrator
发布于 2026-03-05 / 4 阅读
0
0

sudo逃逸

什么是sudo逃逸?

sudo 逃逸(也常称 sudo 提权)是 Linux / 类 Unix 系统中,低权限用户利用sudo 配置错误sudo 自身漏洞,突破权限限制,获取root(超级管理员)权限的攻击手段。

一、sudo 基础

sudo(Substitute User Do)是系统权限管理工具,允许普通用户以 指定用户(通常是 root) 身份执行特定命令,依赖 /etc/sudoers 配置文件控制权限。

  • 查看当前用户 sudo 权限:sudo -l

  • 正常逻辑:仅执行配置中允许的命令,且需用户自身密码(可配置免密)

二、逃逸核心原理

利用 sudo 的权限边界漏洞,让被授权的 “安全命令” 在执行过程中,间接调用 shell 或执行任意代码,从而拿到 root 权限

sudo核心特性

  1. 最小权限原则:不用切换到root用户,临时使用root用户权限执行单条命令

  2. 灵活配置:可以通过配置文件/etc/sudoers或/etc/sudoers.d/精确控制用户拥有权限

  3. 操作审计性:所有sudo操作会被记录到日志/var/log/auth.log

sudo工作原理

sudo配置文件详解

/etc/sudoers: 主配置文件是sudo“权限规则手册”,定义可以执行什么命令

/etc/sudoers.d/:附加配置目录

  • 典型的配置语法结构

用户/用户组  主机名=(可切换到的用户:用户组)  [NOPASSWD:]命令列表
  • 配置示例

# 允许 alice 在任意主机以 root 身份执行所有命令
alice  ALL=(ALL:ALL) ALL
 
# 允许 wheel 组成员无需密码执行 systemctl 命令
%wheel  ALL=(ALL) NOPASSWD: /bin/systemctl
 
# 允许 bob 以用户 www-data 身份管理 nginx
bob  ALL=(www-data) /usr/sbin/nginx
 
# 管理员组可执行所有命令
%admin  ALL=(ALL:ALL) ALL
 
# web管理员组可管理nginx
%webadmins  ALL=(root) /usr/sbin/nginx, /bin/systemctl reload nginx

三、权限逃逸:利用NOPASSWD 绕过常规提权

如果管理员给某个用户配置了 NOPASSWALL=(ALL:ALL) NOPASSWD: ALL权限,这实际上赋予了该用户极高的权限,比如可以使用vim 内部调用系统 Shell 或直接编辑敏感文件

先解决 jack 用户密码 / 存在性问题

1. 确认 jack 用户存在(不存在则创建)

# 检查用户是否存在
id jack

# 如果提示不存在,创建 jack 用户(按回车跳过密码设置,后续用sudo免密)
sudo useradd jack

2.为 jack 设置系统登录密码(若需要切换用户)

如果后续要通过 su - jack 切换用户,必须设置密码:

sudo passwd jack
# 输入两次新密码(比如设置为:jack123,仅测试用)

3. 编辑 sudoers 文件(唯一安全方式)

首先用 visudo 打开配置文件,它会自动检查语法,防止配置错误:

sudo visudo

4. 添加 NOPASSWD 配置(按场景选择)

在文件末尾添加配置,优先遵循最小权限原则,不要全局授权!

场景 1:给单个用户(比如 jack)免密执行指定命令

(最安全,推荐)

# 格式:用户名  主机=(执行身份) NOPASSWD: 命令绝对路径
jack    ALL=(ALL) NOPASSWD: /usr/bin/vim, /usr/bin/cat
  • 解释:jack 用户可以在所有主机(ALL)上,以所有用户身份(ALL),免密执行 vimcat 命令(必须写绝对路径

  • 多个命令用逗号分隔,注意逗号后要有空格

场景 2:给单个用户免密执行所有命令

(极不安全,仅测试 / 应急用,禁止生产环境用)

jack    ALL=(ALL) NOPASSWD: ALL
  • 结果图

5. 保存并验证配置

  • vi 编辑器:按 Esc → 输入 :wq 保存退出;

  • nano 编辑器:按 Ctrl+O 保存,Ctrl+X 退出。

保存后执行以下命令检查语法(无输出 = 无错误):

sudo visudo -c
  • 结果图

验证 NOPASSWD 权限

切换到目标用户(比如 jack),执行配置的命令,验证是否免密:

# 切换到 jack
su - jack
# 执行配置的免密命令(比如 ls)
sudo ls
# 如果不需要输入密码,说明配置生效

安全注意事项(避坑关键)

  1. 绝对路径:配置命令时必须写绝对路径(比如 /usr/bin/ls,而非 ls),防止用户通过 PATH 劫持伪造命令;

  2. 最小权限:只授权必要的命令,绝不配置 NOPASSWD: ALL(除非是测试机);

  3. 禁止给低权限用户授权危险命令:比如 vimfindpythonbash 等(这些命令容易被 sudo 逃逸提权);

定期审计:用 sudo -l -U jack 查看 jack 的 sudo 权限,确认配置符合预期:

sudo -l -U jack
  • 结果图

总结

  1. 配置 NOPASSWD 必须用 visudo 编辑 /etc/sudoers,避免语法错误;

  2. 核心格式:用户名 ALL=(ALL) NOPASSWD: 命令绝对路径

  3. 生产环境严格遵循最小权限,仅授权必要命令,禁用 NOPASSWD: ALL

使用vim创建隐藏用户

在 Linux 中,创建一个用户本质上是在 /etc/passwd/etc/shadow 和 /etc/group 中添加记录。有了免密 vim 权限,我们可以直接通过编辑这些文件来“手动”创建用户。

先验证下有没有sudo权限,能不能免密登录

#输入指令
sudo vim

#在vim界面里面输入
:!bash

返回结果,成功进入root账户并不需要密码

由于 vim 是以 root 身份启动的,派生出的子进程 bash 也会继承 root 权限

#在vim界面输入指令 
:e /etc/passwd
  • 结果图

在里面创建一个用户moon,必须严格按照jack用户格式所写

输入 cat/etc/passwd 成功创建用户

给新创用户改密

核心操作

  • 修改已掌控的普通用户 jack 的密码(设为拟给新用户 lucy 使用的密码)

  • 目的是获取系统原生生成的合法哈希值(适配当前系统加密算法)

  • 后续将该哈希克隆给新建用户 lucy,最后还原 jack 的原始密码,既规避算法不兼容问题,又避免直接改密码触发告警

1.修改jack密码,把新密码给lucy用(此前需要进入/etc/shadow把jack的旧哈希值保存,后续需要用)

#输入指令
passwd jack
  • 结果图:

2.使用vim免密权限进入shadow查看jack哈希,并把哈希复制给lucy

#输入指令
sudo vim

#在vim里面输入
:e /etc/shadow
  • 结果图:

可以注意一下,jack和lucy的哈希值此时是一致

3.把jack的源来的哈希值粘贴回去,这样避免被发现,此时jack和lucy哈希值不一样了

4.切换成lucy用户

su lucy
  • 结果图


成功绕过sudo权限通过vim创建一个用户,完成权限逃逸

sudo 逃逸防范

一、核心原则

  1. 最小权限:仅授权必要命令,绝不放开全量权限

  2. 环境可控:禁止篡改执行环境(PATH/LD_PRELOAD 等)

  3. 全程审计:sudo 操作留痕,异常行为可追溯

二、核心防范措施(必做)

  1. 规范 sudoers 配置

    • 仅用 visudo 编辑,命令写绝对路径,禁用通配符 / 相对路径

    • 禁止授权高危命令:vim、find、python、bash、sed、awk

    • 禁用 NOPASSWD: ALL,仅对非敏感命令按需免密

  2. 锁定执行环境

    • 配置 env_reset 重置环境,secure_path 固定 PATH

    • 禁用 LD_PRELOAD/LD_LIBRARY_PATH 等危险变量

  3. 版本与权限管控

    • 升级 sudo 到 1.9.10+,修复已知漏洞

    • 定期审计:sudo -l 检查权限,清理冗余授权

  4. 日志监控

    • 监控 auth.log/secure 日志,关注逃逸特征命令(sudo find/vim -c ':!/bin/sh' 等)

三、快速自查

  1. visudo -c 检查配置语法

  2. 排查 NOPASSWD: ALL/ALL=(ALL) 高危配置

  3. 检查 sudo 版本,查看日志是否有逃逸尝试

四、应急处置

  1. 暂停涉事用户 sudo 权限

  2. 检查 /etc/passwd/etc/shadow/etc/sudoers 是否被篡改

  3. 升级 sudo,复盘配置移除高危授权


法律声明

警告:本实验手册中的技术仅供安全研究和授权测试使用。未经授权在他人系统上使用这些技术属于违法行为,可能导致严重的法律后果。

请确保:

  1. 仅在自有系统或获得明确书面授权的系统上进行测试

  2. 了解并遵守所在地区的法律法规

  3. 负责任地使用所学知识,遵守职业道德规范


评论