当前位置: 首页 > news >正文

提权方式及原理汇总

一、Linux提权

1、SUID提权

SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。

为可执行文件添加suid权限的目的是简化操作流程,让普通用户也能做一些高权限才能做的的工作。但是如果某些现有的二进制文件和实用程序具有SUID权限的话,就可以在执行时将权限提升为root

 

命令:find / -perm -4000 -type f 2>/dev/null find / -perm -u=s-perm -4000:查找权限为“4000”的文件,其中“4000”是表示suid权限的数字。-type f:查找类型为文件的结果,而不是目录或其他类型的文件。2>/dev/null:这个部分是重定向操作。2> 表示重定向标准错误(stderr),/dev/null 是一个特殊的设备文件,它丢弃所有写入其中的数据。因此,2>/dev/null 的作用是将 find 命令产生的任何错误消息丢弃,不在终端显示。

详细的核心原理:

SUID提权的原理与Linux进程的UID有关,进程在运行的时候有以下三个UID:

(A)Real UID:执行该进程的用户的UID。Real UID只用于标识用户,不用于权限检查。

(B)Effective UID(EUID):进程执行时生效的UID。在对访问目标进行操作时,系统会检查EUID是否有权限。一般情况下,Real UID与EUID相同,但在运行设置了SUID权限的程序时,进程的EUID会被设置为程序文件属主的UID。

(C)Saved UID:在高权限用户降权后,保留的UID。

如果某个设置了SUID权限的程序运行后创建了shell,那么shell进程的EUID也会是这个程序文件属主的UID,如果属主为root,便是一个root shell。root shell中运行的程序的EUID也都是0,具备超级权限,于是便实现了提权。

2、sudo

/etc/sudoers文件是sudo权限的配置文件,其中储存了一些用户或组可以以root权限使用的命令,如果可以写这个文件,就可以赋予普通用户sudo权限,然后就可以借助其他命令提权

可以利用sudo提权的命令如下:

wget、find、cat、apt、zip、xxd、time、taskset、git、sed、pip、ed、tmux、scp、perl、bash、less、vi

sudo find提权

find 命令用来在指定目录下查找文件,这里使用“exec”来执行/bin/bash,以访问root shell

sudo find /home -exec /bin/bash \;

其他的详细的命令:Linux提权——SUDO_sudo提权-CSDN博客

3、/etc/passwd 提权

这个需要对passwd有写入权限,正常root用户的uid为0,如果自己写进去一个用户把它的uid改为0的话,用这个用户登录,系统就会切到root用户了

4、内核提权漏洞

利用内核漏洞提取一般三个环节:

第一步:对目标系统进行信息收集,获取系统内核信息及版本信息【uname -a】

第二步,根据内核版本获取对应的漏洞以及exp

第三步,使用exp对目标进行攻击,完成提权

例子:

脏牛内核漏洞提权的原理:

在Linux内核的内存子系统处理私有只读内存映射的写时复制损坏的方式中出现了一种竞争状况,一个低权限的本地用户可以利用此漏洞获取对只读存储器映射的写访问权,所以有可能进一步导致提权漏洞。

5、Crontab定时任务提权

crontab 文件是计划任务的配置,此文件只有 root 可写,但是我们不需要去修改 crontab,只查看里面的有哪些任务,比如定时执行了哪些脚本,再查看对应脚本的权限,若可写,则将提权的代码写入这些脚本。

非 root 权限的用户是不可以列出 root 用户的计划任务的。但是 /etc/ 内系统的计划任务可以被列出,并且默认这些程序以 root 权限执行

cat /etc/crontab

6、docker 组提权

docker组用户提权,目的是利用docker组的用户来提权,因为docker组用户在容器下为root权限,通过挂载方式在容器下给本机添加sudo权限的用户,从而可以利用sudo命令。如果没有拥有sudo权限的用户,是无法执行sudo命令,在kali下会提示用户不在sudoers等提示。

7、环境变量劫持

PATH指定了存储可执行程序的所有bin和sbin目录。当用户在终端上执行任何命令时,它会通过PATH变量指定的路径去搜寻可执行文件

使用echo命令显示当前PATH环境变量:
echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果普通用户登陆上去之后,他的path目录下有可以执行的二进制文件,并且这个文件里面里面还有高权限的命令的时候,这时候我们执行这个命令就能获得高权限。

例子:如果可执行目录下面有下面这种代码,里面有危险函数

那么你执行他的话就能获得高权限。

二、Window提权

相关文章:

  • [力扣题解] 474. 一和零
  • vue 拷贝
  • RNN-循环神经网络
  • Linux——进程信号(一)
  • Spring Security整合Gitee第三方登录
  • 智能车竞赛指南:从零到一,驶向自动驾驶的未来
  • v-md-editor和SSE实现ChatGPT的打字机式输出
  • 一篇讲透排序算法之插入排序and选择排序
  • Langchain:生态能力学习和智能代理体系对比
  • 用于图像和用于自然语言的神经网络区别
  • 区块链的运行原理与演示
  • Vue 离线地图实现
  • 蓝桥杯2023(十四届)省赛——统计日期(八重神子)
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(2)
  • Android视频开发入门指南
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • leetcode46 Permutation 排列组合
  • LintCode 31. partitionArray 数组划分
  • Python中eval与exec的使用及区别
  • Vue 2.3、2.4 知识点小结
  • 番外篇1:在Windows环境下安装JDK
  • 使用 Docker 部署 Spring Boot项目
  • 思维导图—你不知道的JavaScript中卷
  • 微信小程序设置上一页数据
  • 携程小程序初体验
  • UI设计初学者应该如何入门?
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • # include “ “ 和 # include < >两者的区别
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #Linux(权限管理)
  • #pragma 指令
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (3)STL算法之搜索
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (九十四)函数和二维数组
  • (四)图像的%2线性拉伸
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (一一四)第九章编程练习
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转) Android中ViewStub组件使用
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET文档生成工具ADB使用图文教程
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • @JoinTable会自动删除关联表的数据
  • @RunWith注解作用
  • @SpringBootApplication 包含的三个注解及其含义
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [BZOJ] 2006: [NOI2010]超级钢琴