本文将探讨 Linux 实用程序中的 time 命令,了解该命令在 Linux 渗透测试中的重要作用,以及如何利用时间因素逐步提升至更高权限的 shell。
目录
全面解析 Linux 时间命令
时间工具执行的主要操作
滥用时间工具
Linux 时间命令全解析
time 命令会使用给定的参数运行指定的程序命令。当命令执行完毕后,time 会向标准错误输出写入包含该程序运行时间统计信息的消息。
这些统计信息包括:
- • 从调用到终止所经历的实际时间,称为 real(实际时间)。
在大多数情况下,time 可能作为独立程序(如 GNU time)或作为 shell(如 sh、bash、tcsh 或 zsh)存在。
要识别所有已安装的 time 程序类型,我们运行以下命令:
type -a time
这里的“ time 是一个 shell 关键字 ”意味着它是 bash 内置的关键字,而“ time 是/usr/bin/time ”表示它是 GNU 提供的一个二进制程序。
Time 执行的主要操作
可以通过“help time”或“man time”命令查看摘要说明,以确认 time 命令的用途。
运行命令
如上所述,time 命令可计算任何程序运行(管道执行)的时间统计。例如:计算 date 命令的执行时间
For Bash: time dateFor GNU: /usr/bin/time date/usr/bin/time -p date
结果中你会注意到,它首先运行了 date 命令并输出了完整的日期及时区信息,随后以秒为单位显示了 date 命令消耗的实际时间、用户 CPU 时间和系统 CPU 时间。而通过 GNU time 输出的相同信息还包含额外数据,如总输入/输出量。
使用/usr/bin/time 时添加-p 选项可获取符合 bash time 格式的输出。
注意:对于持续执行的程序,其实际时间、用户时间和系统时间将显示为零,因为下次调用时该程序会直接从系统的内部缓存中读取。
保存输出
默认情况下,time 命令会在终端显示程序执行完成后的计时统计信息,但若要将获取的计时统计信息存入文件,可以使用-o 选项。
语法:/usr/bin/time -o
命令
/usr/bin/time -o /tm/ping ping google.comcat /tmp/ping.txt
详细模式
可使用 -v 选项进入详细模式,在此模式下可估算内部资源处理给定输入并生成输出所需的时间。
格式化字符串
格式字符串通常由'资源说明符'与普通文本组合而成,使用百分号(`%`)进行连接,如下所示。
/usr/bin/time -f “Elaspsed Time = %E, Inputs %I, Outputs %O” head -4 /etc/passwd
如截图所示,您可以使用\n 换行符来打印格式字符串。
/usr/bin/time -f “Elaspsed Time = %E \n Inputs %I \n Outputs %O” tail -5 /etc/passwd
滥用时间工具
特权提升的 SUID 实验环境设置
SUID 位权限允许用户以文件所有者的身份执行任何文件。现在我们为 time 命令启用 SUID 权限,使得本地用户能够利用 time 命令获得 root 用户权限。
因此输入以下命令以启用 SUID 位:
which timechmod u+s /usr/bin/timels -la /usr/bin/time
权限提升
现在我们将利用 SUID 权限的优势开始攻击时间服务。为此,我正在创建受害者机器的会话,这将允许我们建立目标系统的本地用户访问权限。
现在需要通过 ssh 连接目标机器,请输入命令:
ssh test@192.168.1.103
众所周知,我们已获得目标机器的访问权限,因此将使用 find 命令来识别具有 SUID 权限的二进制文件。
find / -perm -u=s -type f 2>/dev/null
我们注意到许多二进制文件都设置了 SUID 权限位,但需要重点关注的是:/usr/bin/time。
利用 SUID 权限的时间优势,我们将获取 shadow 文件以提取密码哈希。
现在我使用 John the Ripper 工具破解了密码哈希值。通过这一操作,我们将获得用户凭证,如下图所示。
john hash

一旦获取用户凭证,我们便可切换用户。首先检查用户 raj 的 sudo 权限时发现,该用户拥有 ALL(全部)特权。
su rajsudo -lsudo su
因此,我们直接切换到 root 用户账户并获取 root shell 权限,如图所示。至此,我们已成功完成利用时间工具实现提权的任务。

《Linux 渗透测试:时间提权》中的 Sudo 权限实验环境配置
接下来我们的步骤是设置 Sudo 权限实验环境,即为用户配置针对 time 可执行文件的 Sudo 特权。我们将把名为 test 的用户添加到 sudoers 文件中,并授予 test 用户以 root 身份运行/usr/bin/time 的权限。
权限提升
现在我们将通过 ssh 连接到 kali 系统,然后运行 sudo -l 命令(即 sudo 列表),通过该命令我们可以看到 test 用户拥有以 root 身份运行/usr/bin/time 的权限。
sudo -l
如上所示,time 命令用于计算程序运行时间,现在我们将利用这一特性进行提权操作。
sudo time /bin/sh
结论: 本文通过 time 命令演示了攻击者如何利用该工具被赋予的权限实现提权操作。