cat 任意文件有多安全?

Gun*_*ars 79 terminal special-characters cat

有时当我cat错误地输入二进制文件时,我的终端会出现乱码。没有什么是快速reset解决不了的,但理论上攻击者不能创建一个文件,当在终端上显示时,它会执行一些任意代码吗?通过终端模拟器中的漏洞利用或其他方式。

Ant*_*hon 37

是否可以利用此类输出取决于终端程序,以及该终端根据正在发送的转义码执行的操作。我不知道终端程序具有这种可利用的功能,现在唯一的问题是是否存在未知的缓冲区溢出或类似的东西,可能会被利用。

对于一些较旧的hardware终端,这可能是一个问题,因为您通过在硬件中存储该键的命令序列来使用这些类型的转义序列对例如功能键进行编程。您仍然需要物理按键来激活它。

但是总是有(正如 Hauke 被恰当地标记为“脑残”)如果它为他们解决了一个问题,人们愿意添加这样的功能,而不是理解他们创造的漏洞。根据我对开源软件的经验,由于有很多人在查看代码,因此与封闭源代码相比,这种情况不太可能发生。(我记得在 Silicon Grahpics 的 Irix 上的邮件程序中,在 90 年代中期,您可以包含要在接收方机器上执行的命令、可执行文件的真实路径……)

  • *“您可以包含要在接收方机器上执行的命令”* 您的意思是在电子邮件中包含调用 Windows 脚本主机的 VBScript 之类的内容?:) (3认同)

Uwe*_*Uwe 36

如果大多数终端模拟器收到某些转义序列,它们会发回一些响应(查看xterm 控制序列文档)。例如,您可以发送\e[0c到类似 VT100 的仿真器,它会发回设备属性,例如\e[?1;2c (这可能是 Keith 观察到的。)但这些答案不是任意字符串。尽管如此,2c在系统上某处命名的可执行文件会做一些致命的事情是一个坏主意。

更新:风险实际上比我想象的要大,因为可以设置 xterm 窗口的标题并使用适当的转义序列发回标题http://www.securityfocus.com/bid/6940/) . 与上面的示例相反,标题几乎可以是任意字符串。


l0b*_*0b0 19

这会更改 GNOME 终端 3.6.1 中的终端标题,除非被PS1 之类的东西覆盖:

printf "\033]2;Script Kiddie was here\007"
Run Code Online (Sandbox Code Playgroud)

现在打开一个新的 GNOME 终端窗口来测试cat版本:

printf "\033]2;Script Kiddie was here\007" > test.bin
cat test.bin
Run Code Online (Sandbox Code Playgroud)

是的,这也设置了终端标题。

曾经有一个转义码的安全问题导致标题被打印到命令行,所以你可以有效地创建一个文件,当cated 打印时(我不确定你是否可以在那里放一个换行符)任意命令。哎哟!


Mal*_*ous 11

虽然使用cat可能不会导致代码执行,但转义码将被处理,因此您很容易被误导认为脚本是无害的,而实际上它是恶意的。

这是您可以运行的示例命令,它将创建一个“恶意”shell 脚本:

echo -e '#!/bin/sh\necho "...doing something bad here..."\nexit\n\033[A\033[Aecho "Hello dear reader, I am just a harmless script, safe to run me!"' > demo.sh
chmod a+x demo.sh
Run Code Online (Sandbox Code Playgroud)

当您检查文件时,它似乎无害:

$ cat demo.sh
#!/bin/sh
echo "Hello dear reader, I am just a harmless script, safe to run me!"
Run Code Online (Sandbox Code Playgroud)

但是如果你真的运行它......

$ ./demo.sh 
...doing something bad here...
Run Code Online (Sandbox Code Playgroud)

该脚本通过包含原始转义代码来将光标向上移动几行,因此脚本的其余部分写在恶意代码的顶部,将其隐藏。

几乎任何其他程序都会显示脚本的内容。只有不处理文件内容的程序(如catmoreless -r)才会产生误导性输出。

请注意,tailhead也会产生相同的误导性输出。因此,使用“less +F”比“tail -f”更安全。


Kil*_*oth 8

我确实经历过xterm将任意字符插入到自身中,就像我输入它们一样。有时这显然包括换行符,所以我得到ngwerm:0riu: command not found了回应。我看不出为什么有人不能制作发送特定有害命令的文件。所以是的,至少一些终端容易受到任意影响的攻击。