程序从命令行执行时可以输出什么输出以生成终端仿真器上的漏洞行为?

信息安全 linux Unix
2021-08-25 13:40:11

阅读这篇标题为“修复 Unix/Linux/POSIX 文件名”的帖子时,我发现了作者的一个非常有趣的短语,它说:

哦,不要显示文件名。文件名可能包含控制终端(和 X-windows)的控制字符,从而在显示上造成令人讨厌的副作用。显示文件名甚至会导致安全漏洞——谁会期望打印文件名是一个漏洞?!?此外,您无法确定文件名的字符编码是什么,因此如果您从使用非 ASCII 字符的其他人那里获得文件名,您可能会得到垃圾 mojibake

我一直怀疑是这种情况,因为有时意外运行会cat binary_file导致我的终端会话退出,或者导致终端CTRL+L自行退出,但我从来没有知道要问一个足够连贯的问题。

我的问题是:程序从命令行执行时可以输出什么输出以生成可能被视为终端仿真器漏洞的行为?

请注意,我不是指将来自网站的命令粘贴到命令行中。

2个回答

我不认为一个软件可以这么容易地向系统发送 Ctrl-Alt-Del,这个事件必须来自物理键盘。但是,可以肯定的是,对于不太新的图形终端,可以利用这种流来注入恶意命令。

线索是某些终端提供: - 更新窗口标题的转义序列, - 将窗口标题报告回命令行的另一个转义序列。

当用户使用对这种漏洞敏感的终端时(大多数知名终端在过去几年中已得到纠正),因此可以在用户提示符下使用例如特制文件名(当做目录列表)或二进制文件(使用“cat”时)。

然后用户仍然需要按“Enter”来执行恶意命令,但通常还有其他转义序列允许欺骗用户(例如清空提示字符串,更改命令的前景色以将其设置为与背景相同,因此命令本身不可见,然后显示类似“按回车键继续...”的内容)。

“控制字符”是模拟器为了改变环境而捕获的序列。Control-C 用于中断,Control-M 用于回车等。它们有数百个它们是组合键,因此从文件中提取它们与在键盘上敲击它们是一样的。

不过,几乎所有这些都仅限于终端行为。如果你能找到一种方法来偷偷 CTRL-ALT-DEL 可能会强制重启(我不知道怎么做,但这是我唯一能想到的),但现代系统没有很多东西都映射到功能键了,所以强迫它们执行不会做任何事情。