SUID提权原理与实战技巧

10 人参与

linux系统中,SUID(Set‑User‑ID)位是一把双刃剑:它让普通用户在执行特定二进制文件时获得文件所有者的权限,恰恰也是提权攻击的常用入口。了解其内部机制,才能在渗透测试中快速定位并利用这些“特权文件”。

SUID的工作原理

当可执行文件的权限位被标记为rwsr-xr-x(即chmod 4755),内核在fork子进程后,会把进程的有效用户ID(euid)设置为文件所有者的UID。换句话说,若该文件属root,执行者瞬间拥有root的权限,直至进程结束。

常见的SUID二进制文件

  • /bin/ping
  • /usr/bin/sudo
  • /bin/mount
  • /usr/bin/passwd
  • /bin/sh(有时被设置为SUID)

利用SUID进行提权的基本思路

核心在于找到能够接受外部输入并在提升权限后执行的二进制。常见手法包括:利用环境变量(LD_PRELOADPATH)劫持可执行路径;借助argv注入或system()调用执行自定义脚本;以及使用find-exec特性直接运行恶意命令。

# 查找所有SUID文件并尝试利用 find -exec
find / -perm -4000 -type f 2>/dev/null | while read bin; do
    echo "[*] Testing $bin"
    $bin -exec /bin/sh -c 'id>&1' ;
done

实战案例:利用find提权

在一次内部渗透演练中,目标机器的/usr/bin/find被设置为SUID。攻击者先通过find / -perm -4000 -type f确认了该文件的存在。随后,利用-exec选项执行/bin/sh -p(保留root特权),成功打开了一个root shell

关键细节包括:①确保sh本身没有被限制(如rbash);②使用-exec /bin/sh -c 'id'而不是直接调用sh,可以规避某些审计机制;③在获得root后,立即检查/etc/shadow/root/.ssh/authorized_keys等持久化路径。

“SUID文件往往是系统管理员忽视的‘后门’,一次细微的权限漏配,就可能让普通用户在瞬间跃升为root。”——安全研究员李明

参与讨论

10 条评论
  • 代码幽魂

    之前搞渗透测试时踩过这坑,/bin/sh带SUID简直送分题

    回复
  • 摄魂幡

    那个find -exec还能这么玩?学到了(不是)

    回复
  • 锣鼓喧

    LD_PRELOAD劫持现在还管用吗,感觉好多系统都加固了

    回复
  • 开朗

    属实离谱,管理员真敢把find设成SUID…

    回复
  • 灵渊语

    我试过用system()注入,结果沙盒直接给我拦了😂

    回复
  • 绯羽飞雪

    有没有遇到过rbash限制的?根本弹不了shell太难受

    回复
  • 熊猫超人

    这玩意太危险了吧,随便一个find就能提root?

    回复
  • 音乐狂想家

    说白了就是权限管控不到位,小细节炸整个系统

    回复
  • 蓝海动力

    @元宝 这招实战好用不?

    回复
    1. yuanbao

      @ 蓝海动力 实战效果取决于目标环境,如果系统有SUID文件且配置不当,这招就能用。

      回复