终端中的二进制字符串可以做任何危险的事情吗?

终端中的二进制字符串可以做任何危险的事情吗?

我发现自己有时会意外地cat输入一个二进制文件,或者SELECT从 CLI 输入一些二进制字段mysql,最终在屏幕上显示如下内容:

▒=▒▒▒▒▒f4▒Kҫ24T?)

或者更糟(Putty在 Windows 上使用):

Putty 二进制字符串

问题是,除了使我的终端可能无法使用(改变颜色等),迫使我关闭并重新打开它之外,将二进制数据输出到终端是否有风险?比如错误地执行了命令,或者其他我应该注意的事情?

答案1

一些他们可能面临这样的风险。实际上,如今的终端仿真器试图确保所有输出都得到安全解释,但这并不能 100% 保证——我个人认为它远不如将不受信任的 HTML/JS 提供给 Web 浏览器那么安全。

  1. 有一些转义序列会导致终端通过发送一些输入来响应返回程序。(这一页包含所有常见序列的列表 - 搜索单词“Report”。)

    例如,字节 0x05(Ctrl+E)是控制字符 ENQ,它已经过时几十年了,但在某些终端仍然会生成一个简单的“应答”序列 -PuTTY在这种情况下。

    更常见的是,程序可能会使用一个序列,使终端以其当前大小(列×行)进行回答,或报告是否支持某些功能(例如,测试 256 色模式)。大多数这些序列的响应都采用固定格式,但有些可以包含自由文本,例如“报告当前窗口标题”序列。

    然而,现代终端通常会确保这些转义序列永远不会产生任何“不受信任”的输入。也就是说,控制台应用程序可以窗口标题,但不能得到将其粘贴回去——终端将始终响应,就好像标题为空一样。同样,一些终端允许控制台应用程序将文本复制到剪贴板,但不允许触发将文本粘贴回去剪贴板。

  2. 有一些转义序列旨在调用操作例如运行程序、显示通知、或移动/调整终端窗口大小。

    在现代终端中,这些是大多安全 – 没有终端再接受“运行程序”,也无法启动打印。但许多终端仍然允许“移动/调整大小”控制序列,因此不受信任的输出实际上会使您的 PuTTY 窗口在屏幕上缩放。

    某些终端(例如 Terminology)具有一些非常强大的自定义控制序列,允许应用程序在文本中嵌入 PNG 图像,甚至显示视频。因此,恶意二进制输出不需要通过颗粒状 ASCII 艺术来欺骗您,它可以在高分辨率下欺骗您。

  3. 最后,终端的控制序列解析器是复杂的代码片段,并且它有由于错误导致的安全问题(例如缓冲区溢出)。别忘了更新 PuTTY。

    而且,由于某些“安全”序列也会与外界交互,因此它们也可能触发操作系统错误。例如,显示系统通知的序列(否则这是合法功能)可能会尝试发送 HTML,而某些系统实际上可能会解释该 HTML。

答案2

cating 不会对你的终端造成任何不良影响,因为它只“显示”文件的内容。据我所知,SQL 语句也应该如此。

可能发生的情况是,如果您尝试意外打印具有特殊含义的字符(例如颜色代码),则控制台的格式可能会被破坏cat。然后,所有后续行和输入提示可能看起来很奇怪。但这应该只是表面现象。

话虽如此,您还是应该小心,因为根据事件的顺序,用户输入的文本可能会与输出文本混淆,从而掩盖当前命令。恕我直言,使用 退出这些行通常更安全Ctrl+C

相关内容