关键在于识别高危sudo规则:先运行sudo -l查看当前用户权限,重点关注(root) nopasswd、shell类命令、可加载动态库工具、异常用户切换语法及非绝对路径/通配符;再核查/etc/sudoers及/etc/sudoers.d/下配置,结合id验证组权限与defaults环境设置;最后通过gtfobins验证危险命令组合并执行三步收敛法检验最小化、参数锁定与上下文隔离。

排查 sudo 配置错误导致的提权漏洞,关键不是看“有没有 sudo”,而是看“谁、能以什么身份、执行哪些命令、是否需要密码、在什么环境下”。重点在于发现那些本不该开放、或开放方式松散的授权规则。
快速定位高危 sudo 规则:从 sudo -l 开始
普通用户登录后,第一时间运行:
sudo -l该命令会直接列出当前用户被授予的所有 sudo 权限。重点关注以下几类输出:
- 含 (root) NOPASSWD 的条目:表示无需密码即可以 root 身份执行某命令,是最高风险信号
- 允许执行 shell 类命令(如 /bin/bash、/bin/sh、/usr/bin/python*、/usr/bin/perl)
- 允许执行 可加载动态库或执行外部命令的工具(如 find、vim、less、nano、git、docker)
- 出现 (ALL, !root) 或 (root, !root) 等异常用户切换语法(关联 CVE-2019-14287)
- 命令路径为 非绝对路径 或包含通配符(如 /usr/bin/*、/home/*/script.sh),易被 PATH 劫持或路径遍历利用
检查 /etc/sudoers 及其包含项的真实配置
sudo -l 只显示生效规则,但实际配置可能分散在多个位置。需人工核查:
- 主配置文件:/etc/sudoers(必须用 visudo 编辑,避免语法错误锁死 sudo)
- 额外配置目录:/etc/sudoers.d/ 下所有非备份文件(如 01-admin、web-deploy),它们按字母序加载,可能覆盖或扩展主策略
- 检查是否存在 组权限配置(如 %wheel ALL=(ALL) NOPASSWD: ALL),再确认当前用户是否属于该组(用 id 命令验证)
- 留意 Defaults 行,特别是 env_reset、env_keep、always_set_home、setenv 等设置——它们直接影响环境变量是否可控,是劫持提权的关键跳板
识别危险命令组合与隐式提权路径
有些命令本身不启动 shell,但在特定参数下可突破限制。例如:
- find /tmp -exec /bin/sh \; —— 若 sudo 允许无参调用 find,攻击者可自行构造 -exec
- vim -c ':!/bin/sh' —— vim 在 sudo 下启动时若未禁用 shell 调用,可直接逃逸
- python -c 'import os; os.system("/bin/sh")' —— 所有带交互式解释器的命令都需警惕
- tar -cf /dev/null /dev/null --use-compress-program=/bin/sh —— 某些老版本 tar 支持自定义压缩程序
建议对照 GTFOBins 搜索已知可利用命令,验证当前 sudo 授权是否落入其利用链。
验证配置是否过度宽松:三步收敛法
对每一条可疑规则,执行以下判断:
- 最小化原则检验:该命令是否必须由当前用户执行?能否改用专用服务账户或 API 方式替代?
-
参数锁定检验:规则中是否限定具体参数?例如
sudoers 中写成 /usr/bin/systemctl restart nginx比/usr/bin/systemctl *安全得多 -
上下文隔离检验:是否启用
Defaults env_reset?是否显式清空危险变量(如env_delete += "LD_PRELOAD LD_LIBRARY_PATH")?是否限制可写临时目录(Defaults secure_path)?











