/bin/bash ; EOF rm -rf ~
。当粘贴到终端时,它将开始bash,将其终止,然后删除您的家。粘贴到cat中后,它将使cat打印命令,结束cat并删除您的房屋。
/bin/bash ; EOF rm -rf ~
。当粘贴到终端时,它将开始bash,将其终止,然后删除您的家。粘贴到cat中后,它将使cat打印命令,结束cat并删除您的房屋。
Answers:
简短的答案:在许多情况下,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
。在正常模式下,当p从寄存器文本的Utting,全文(包括隐藏的部分)被粘贴。即使:set paste
已设置了“插入”模式,也不会发生相同的情况。
Vim的最新版本支持带括号的粘贴模式,可减轻这种类型的复制粘贴攻击。Sato Katsura澄清说:“在Vim 8.0.210中提供了对带括号粘贴的支持,并且最近已在8.0.303版本(2017年2月2日发行)中修复。”
注:根据我的理解,与括号粘贴模式支持Vim版本应使用粘贴时保护你Ctrl- - Shift(V大多数GNU / Linux桌面环境),Ctrl- V(微软视窗),Command- V键(Mac OS X),Shift- Insert或者鼠标单击鼠标中键。
后来,我在Lubuntu 16.04台式机上进行了一些测试,但结果令人困惑且不确定。从那以后,我意识到这是因为我一直使用GNU屏幕,但事实证明,该屏幕过滤了用于启用/禁用方括号粘贴模式的转义序列(有一个补丁,但看起来像是在项目未得到积极维护)。在我的测试中,无论通过Vim还是终端仿真器支持方括号粘贴模式,通过GNU屏幕运行Vim时,概念验证始终有效。
进一步的测试将是有用的,但是到目前为止,我发现终端仿真器对方括号粘贴模式的支持会阻止我的概念验证–只要GNU屏幕没有阻止相关的转义序列即可。但是,用户nneonneo 报告说,精心设计的转义序列可以用于退出包围粘贴模式。
请注意,即使使用最新版本的Vim,如果用户*
在插入模式下通过键入(Ctrl- R*)从寄存器中粘贴,概念验证也将始终有效。这也适用于GVim,它可以区分键入的输入和粘贴的输入。在这种情况下,Vim将其留给用户以信任其注册内容的内容。因此,从不受信任的来源粘贴时,永远不要使用此方法(这是我经常做的事-但我现在已经开始训练自己不要这样做)。
粘贴文本(从+
或*
寄存器)时,请使用“普通”模式。
…或使用Emacs。我听说这是一个不错的操作系统。:)
paste
模式(:set paste
)。如果您的终端也支持,则方括号中的粘贴将生效。启用模式后,您的概念证明无效。paste
\e[201~
在粘贴命令中粘贴一个序列即可退出包围式粘贴模式,然后继续对您进行伪装。(除非我错过了有关方括号粘贴工作原理的一些细节?)
\x1b[201~
,该漏洞利用程序便像以前一样起作用(即仅ls -la
写入缓冲区并echom
执行命令)。因此,我认为带括号的粘贴仍然容易受到有针对性的攻击,并且还不够强大。(实际上,任何形式的带内信令都是易受攻击的!)
:set paste
-漏洞仍然有效。为了完全清楚,我粘贴了以下(base64编码的)blob :bHMgG1syMDF+GzplY2hvbSAiVGhpcyBjb3VsZCBiZSBhIHNpbGVudCBjb21tYW5kLiIKaSAtbGE=
。在OS X上,您可以复制该文件,然后运行pbpaste | base64 -D | pbcopy
以获取要粘贴的原始版本vim
。
\x1b\x1b[201~[201~
)或使过滤器蒙混的内容。