您绝对不应从Web粘贴到终端。相反,您应该粘贴到文本编辑器,检查命令,然后粘贴到终端。

可以,但是如果Vim是我的文本编辑器怎么办?能否伪造一种将Vim切换到命令模式并执行恶意命令的内容?

评论

@ryekayo我知道如何在后台运行命令。问题更多地是关于是否有可能将vim从插入模式切换到命令模式,然后执行任何操作

Vim的最新版本在括号中粘贴,应该可以防止此类攻击。

@EmilJeřábek文章中的链接为您提供了奔跑而不是奔跑的充分理由。

@EmilJeřábek由于您可以使用转义字符伪装隐藏的文本,因此我想您也可以使用EOF伪造文本。然后,隐藏的文本可能包含/ bin / bash之类的内容; EOF rm -rf〜。粘贴到终端后,它将开始bash,将其终止,然后删除您的房屋。粘贴到cat中后,它将使cat打印命令,结束cat并删除您的房屋。

另请参阅如何保护自己免受此类剪贴板侵害?

#1 楼

简短的答案:在许多情况下,Vim容易受到这种攻击(在插入模式下粘贴文本时)。

概念证明

以链接的文章作为开始到目前为止,我能够使用以下代码快速创建一个网页,使用HTML span元素和CSS隐藏文本的中间部分,以便临时查看者(不查看源代码)只能看到ls -la。注意:^[是转义字符,而^M是回车字符。 Stack Exchange可以防止用户输入并使用CSS防止内容隐藏,因此我已上载了概念证明。

ls ^[:echom "This could be a silent command."^Mi -la


如果您处于插入模式并粘贴了此文本进入终端Vim(带有一些限定符,请参见下文),您会看到ls -la,但如果运行:messages命令,则可以看到隐藏的Vim命令的结果。 >要防御这种攻击,最好保持在正常模式下并使用"*p"+p进行粘贴。在普通模式下,当从寄存器中放置文本时,将粘贴全文(包括隐藏部分)。在插入模式下(即使设置了:set paste)也不会发生相同的情况。复制粘贴攻击。 Sato Katsura澄清说:“对带括号的粘贴的支持出现在Vim 8.0.210中,并且最近已在8.0.303版本(于2017年2月2日发布)中修复。”

注意:据我所知,使用方括号粘贴模式支持的Vim版本在使用Ctrl-Shift-V(大多数GNU / Linux桌面环境),Ctrl-V(MS Windows),Command-V(Mac OS X),Shift-Insert粘贴时应能保护您或单击鼠标中键。

测试

稍后,我在Lubuntu 16.04台式机上进行了一些测试,但结果令人困惑且不确定。从那以后,我意识到这是因为我一直使用GNU屏幕,但事实证明,该屏幕过滤了用于启用/禁用方括号粘贴模式的转义序列(有一个补丁,但看起来像是在项目未得到积极维护)。在我的测试中,无论通过Vim还是终端仿真器支持方括号粘贴模式,通过GNU屏幕运行Vim时,概念验证始终有效。

进一步的测试将很有用,但到目前为止,我发现只要GNU屏幕没有阻止相关的转义序列,终端仿真器对方括号粘贴模式的支持就会阻止我的概念验证。但是,用户nneonneo报告说,精心设计的转义符可能会退出括号内的粘贴模式。

请注意,即使使用最新版本的Vim,如果用户在插入模式下通过键入(Ctrl-R *)从*寄存器粘贴。这也适用于GVim,它可以区分键入的输入和粘贴的输入。在这种情况下,Vim将其留给用户以信任其注册内容的内容。因此,从不受信任的来源进行粘贴时,永远不要使用此方法(这是我经常做的事-但我现在开始训练自己不要这样做。)。

相关链接



您看到的不是您复制的内容(从2009年开始,我第一次提到这种发现的漏洞)
如何保护自己免受此类剪贴板攻击?
/>
关于vim_dev邮件列表的最新讨论(2017年1月)

结论

粘贴文本(从+*寄存器)时使用普通模式。


…或使用Emacs。我听说这是一个不错的操作系统。 :)


评论


您应该在粘贴Vim之前启用粘贴模式(:set paste)。如果您的终端也支持,则方括号中的粘贴将生效。启用粘贴模式时,您的概念证明不起作用。

–佐藤桂(SatōKatsura)
17-4-3在16:01



我看不到方括号粘贴模式的安全性。如果攻击者知道您使用的是括号内粘贴,他们将在粘贴命令中粘贴\ e [201〜序列以退出括号内粘贴模式,然后继续伪装您。 (除非我错过了有关方括号粘贴如何工作的一些细节?)

–nneonneo
17年4月3日在18:00

@SatoKatsura:我在Vim 8.0.540上尝试过,它不容易受到最初的攻击。在添加\ x1b [201〜之后,该漏洞利用程序便像以前一样起作用(即,仅将ls -la写入缓冲区并执行echom命令)。因此,我认为带括号的粘贴仍然容易受到有针对性的攻击,并且还不够强大。 (实际上,任何形式的带内信令都容易受到攻击!)

–nneonneo
17年4月3日在18:18

无论是否使用:set paste我都尝试过-漏洞仍然有效。为了完全清楚,我粘贴了以下(base64编码的)blob:bHMgG1syMDF + GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhhIHNpbGVudCBjb21tYW5kLiLiaSAtbGE =。在OS X上,您可以复制该文件,然后运行pbpaste | base64 -D | pbcopy可以将原始版本粘贴到vim。

–nneonneo
17年4月3日在18:21

更清楚地说,我正在使用macOS Terminal.app通过SSH连接到Ubuntu 16.04机器进行测试。如果您的终端仿真器正在剥离粘贴中的转义序列,则可能会嵌套该序列(例如\ x1b \ x1b [201〜[201〜])或使过滤器蒙混的内容。

–nneonneo
17年4月3日在18:24

#2 楼

如果您使用的是X11剪贴板功能或特定于平台的等效功能,并且使用启用了鼠标支持的中间按钮粘贴或vim粘贴命令,而不使用任何终端粘贴命令(shift-middle-button或终端的任何快捷键优惠),那么您可能会比较安全。

如果不这样,那么您的终端仿真器支持方括号粘贴模式,并且已经在终端和vim中启用了该终端仿真器实现保护以防止注入以方括号粘贴模式结尾的转义序列,那么您可能是安全的。

如果不这样做,则可能容易受到此处所述的攻击。<​​br />