我正在查看 at 命令的GTFOBINS页面并看到了这个命令(该页面中的最后一个命令)
echo "/bin/sh <$(tty) >$(tty) 2>$(tty)" | sudo at now; tail -f /dev/null
获取root shell。这个命令确实给了我一个 root shell,但是,
- 命令的前半部分是什么意思,它是如何工作的?
删除 tail 命令会导致 shell 立即关闭。
- tail 命令如何使 shell 保持打开状态?
我正在查看 at 命令的GTFOBINS页面并看到了这个命令(该页面中的最后一个命令)
echo "/bin/sh <$(tty) >$(tty) 2>$(tty)" | sudo at now; tail -f /dev/null
获取root shell。这个命令确实给了我一个 root shell,但是,
删除 tail 命令会导致 shell 立即关闭。
该命令计划启动命令(
sudo at now
),计划命令是一个 shell,它将您的控制台作为标准输入、标准输出和标准错误。在这里$(tty)
被替换为/dev/pty/0
取决于您的控制台的东西。这是必需的,因为计划的作业是由没有 TTY 重定向的守护程序启动的。只需永远等待(
tail -f /dev/null
或 Ctrl-C)并避免与 TTY 交互,然后在启动此命令的 shell 和 root shell 之间进行交互。没有它,我猜你有 2 个并行的 shell 来读取你的 TTY,你输入的内容可能会被一个 shell 或另一个随机解释。