find命令
基本格式
find where what
例如在当前目录中查找任意文件和目录find ./ *
搜索当前目录 yml后缀的文件find ./ -name "*.yml"
非常有用的几个参数
-type
指定类型-name
指定名字-user
指定文件归属于指定用户-size
指定文件大小-perm
指定权限位-exec
用于执行命令- 时间戳(具体看下面)
-type
-type d
只查找目录find / -type d
查找根目录下的所有目录
-type f
只查找文件find / -type f
查找根目录下的所有文件
-name
-name
指定搜索文件的姓名--iname
-iname
参数与-name
相同,但是区别在于-iname
不区分大小写
-name "*.yml"
-name "*.sh"
使用通配符查找文件时要使用双引号括起来。
-size
文件大小单元:
- b 块
- c 字节
- w 字
- k 千
- M 兆
- G 吉
搜索当前目录下大于10KB的文件
1 | find ./ -type f -size +10k |
搜索当前目录下小于10MB的文件
1 | find ./ -type f -size -10M |
搜索当前目录下大小为10KB的文件
1 | find ./ -type f -size 10k |
-user
指定用户名去查找,这在进入目标系统后进行提权后经常的操作。
查找根目录下属于root用户的文件
1 | find / -type f -user root |
-perm
查找指定权限位的文件,指定权限位可以使用八进制表示
r=4,w=2,x=1
就和修改权限位一样的操作
查找根目录下其他人可读的文件,不考虑所有者
1 | find / -type -perm -o=r |
查找根目录下usid位权限 -u=s
1 | find / -type f -perm -u=s |
查找根目录下所有人可读可写可执行的文件
1 | find / -type f -perm 777 |
查找根目录下文件为所属者可读可写,所属组可读,其他人可读的文件
1 | find / -type f -perm 644 |
-time
文件有三种时间戳格式
- 访问时间,用户最后一次访问时间
- -atime 天
- -amin 分钟
- 修改时间,用户最后一次修改时间
- -mtime 天
- -mmin 分钟
- 变化时间,文件数据元(例如权限等)最后一次修改时间
- -ctime 天
- -cmin 分钟
- 1天内部 -1
- 1天之前 +1
- 刚好在一天前 1
搜索七天内被访问过的所有文件
1 | find / -type f -atime -7 |
搜索七天前被访问过的所有文件
1 | find / -type f -atime +7 |
搜索刚好七天前被访问过的所有文件
1 | find / -type f -atime 7 |
分钟同理
-exec
这个参数可以执行一个命令
1 | find / -type f -exec whoami \; |
需要注意的是,每查找到一个文件,命令就会执行一次。
就像这样
我当前的目录下有两个文件,所有whoami这条命令被执行了两次。
所以这条命令也能被用于提权(看情况
-prune -path
-path是指定目录,-prune排除前面所匹配的目录。
意思是当我们不想要find 搜索某个目录的时候用。直接来看区别,没有用上-path和-prune参数的时候,搜索出了875个php文件。用上了只搜索了2个php文件,完全跳过了disk这个文件夹下的php文件。


重要的用法
搜索suid位的文件
1 | find / -type f -perm -u=s 2>/dev/null |
给所有php文件添加个头
1 | ls *.php|xargs sed -i "1i<?php require_once "/tmp/waf.php";?>" |