原文地址: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
。