原文地址:https://ura.d3npa.dev/posts/hiding-from-cats.md
躲开 cat 命令
/usr/bin/cat 是一种从一个位置读取数据并将其写入另一个位置的工具;在大多数情况下,它用于从文件读取文本并将其写入STDOUT。Cat还支持某些控制字符,例如换行符\f,回车符\r和换行符\n。
这是一个有趣的小概念验证,说明如何\r使用它来隐藏cat的shell脚本命令:
1 | cmd_h = "echo 'You forgot to check `cat -A`!' > oops" # hidden |
这会滥用cat的默认行为,即呈现回车\r符。本质上,一个\r会将光标移回该行的开头,并且此后打印的字符将被写在之前(覆盖)打印的任何内容。这也是为什么我们在字符串的末尾添加空格。
因此,当我们运行时cat test.sh:
1 | $ cat test.sh |
但是,运行文件实际上会执行:
1 | echo 'You forgot to check `cat -A`!' > oops |
1 | $ ls |
最后,有三种捕获方法:
1.test.sh的文件大小与cat打印的内容不匹配。
2.打开在文件中的编辑器,例如vi,vim,或nano,或一个类似less页调器。
3.如果我们使用cat -A ./test.sh替代,则禁用控制字符的呈现:
1 | $ cat -A test.sh |
不幸的是,当从Internet下载脚本时,大多数人没有认真检查他们正在运行的脚本。在少数人中,有许多人依靠/usr/bin/cat这样做。这种攻击可以用来躲过攻击,即使是那些用cat费心检查代码的人。
从现在开始,让我们在检查脚本时使用一些更安全的东西,比如less。