开始寻找 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
标志提升权限。在这种情况下,使用了第二种方法来简化事情。
在检查 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