Linux提权系列9:[训练营]利用 cron 的错误配置1
2023-4-3 08:2:42 Author: 奶牛安全(查看原文) 阅读量:23 收藏


疯狂的cron任务1

开始寻找 suid 二进制文件,但找不到任何二进制文件,但当前用户有权管理 cron 服务。这意味着可以启动/停止/重新启动或检查服务的状态。在这种情况下,cron 服务已经在运行

当前用户没有在他们的 crontab 中配置任何cron任务,并且全局crontab文件不包含任何有用的信息。

查看/tmp/目录内容,发现有monitor.tar.gz,每分钟更新一次。由于没有其他用户,所以它必须通过某些定时任务执行的动作。

在解压缩存档时,发现有 5 个文件,名称为 1 - 5。检查文件 1 的其他路径是什么,以了解这些文件的确切存档位置。

目录 /var/log/monitor 包含所有文件,并且目录是全局可写的。这意味着可以修改文件。

这说明在该目录中创建的任何文件都将存档到 /tmp/monitor.tar.gz

因此,根据上图,可以推测 cron 可能执行以下操作

cd /var/log/monitor && tar -cf /tmp/monitor.tar.gz *

使用 * 不是一个坏主意,但是shell所做的是将 * 扩展到当前目录中的文件和文件夹中。看看下面的例子,有 5 个文件,在执行 ls * 时,shell 将所有文件名发送到 execve 系统调用。

$ ls -l
total 0
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file1
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file2
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file3
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file4
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file5
$ strace -e execve ls *
execve("/usr/bin/ls", ["ls""file1""file2""file3""file4""file5"], 0x7fffbe829118 /* 91 vars */) = 0
file1  file2  file3  file4  file5
+++ exited with 0 +++

现在想想有一个文件,其名称与传递给 ls 命令的参数完全相同。在 -li 标志的情况下,它将打印一个长描述和文件 inode 号。

$ touch -- "-li"
$ ls -l
total 0
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file1
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file2
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file3
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file4
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file5
-rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:49 -li

当执行 ls * 时,由于扩展了 shell 中的 glob 模式功能,它正在传入 ls -li 标志。

$ ls *
6966 0 -rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file1
6967 0 -rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file2
6968 0 -rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file3
6969 0 -rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file4
6970 0 -rw-r--r-- 1 terabyte terabyte 0 Aug 12 02:47 file5

使用上述信息使用 tar 执行命令。如果不熟悉 tar,可以使用 --checkpoint--checkpoint-action 参数通过 tar 执行命令。

可以使用 netcat 获取带有 root 的反弹 shell,或者在 /bin/bash 上设置 suid 并使用 -p 标志提升权限。在这种情况下,使用了第二种方法来简化事情。

疯狂的cron任务2

在检查 sudo 权限时,发现用户可以管理 cron 服务,并且有一个名为 message 的文件由root 拥有。

发现 /tmp/ 目录中有另一个同名文件和一条消息“Hey!! you are not root :(”

使用 grep 命令在可能的目录中递归搜索其中包含/tmp/message的文件。幸运的是,找到了一个文件,而且它是全局可写的。所以在这种情况下,可以将恶意代码写入这个文件并接管系统。

如在 bash 程序中添加一个 suid

chmod +s /bin/bash

当定时任务再次执行,可以看到 /bin/bash 启用了 SUID 位。在运行命令 /bin/bash -ip 时,将获得一个特权交互式 shell

黄金日志

在检查 sudo 权限时,发现有两个服务在运行。postfix 服务基本上是一个 SMTP 服务器,与 cron 一起使用以发送执行状态。cron也可以配置成e用邮件发送错误消息。

在这种情况下,两个服务都在运行。

所有电子邮件的基本目录都存储在 /var/mail/[username] 中。这里的 root 用户的电子邮件内容是全局可读的,这可能是一个宝藏。

正如预期的那样,有命令失败的信息(/bin/sh /opt/exec.sh),执行频率为 1 分钟,请参阅黄色标记中的日期

在这个案例下,错误配置是 /opt/ 目录是全局可写的。在此,可以创建一个 exec.sh 文件并添加恶意内容以获取 root shell

在这里,在 /bin/bash 上设置 SUID 位以使用 bash -p 命令获得特权 shell

chmod u+s /bin/bash

在下一次执行时,cron 将运行 /opt/exec.sh 脚本并在目标文件上设置 SUID 位。

请点一下右下角的“在看”,谢谢!!

暗号:e3c0b


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247488898&idx=1&sn=e3694af7cbd71ae4e838531b6614efd5&chksm=fdf97e97ca8ef7811a4f1c4eaa6a77ff296a0b6d0058e4e3fc15787469e2a8c458efbf54e977#rd
如有侵权请联系:admin#unsafe.sh