Dennis Williamson Asked: 2009-10-23 18:31:11 +0800 CST2009-10-23 18:31:11 +0800 CST 2009-10-23 18:31:11 +0800 CST 是否可以在 Linux 上的 Bash 中隐藏恶意别名? 772 是否可以在 Linux 系统上的 Bash 中隐藏恶意别名的存在,并让用户在不知情的情况下执行它? linux 1 个回答 Voted Best Answer Dennis Williamson 2009-10-23T18:37:25+08:002009-10-23T18:37:25+08:00 如果该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命令修改了一个名为“aliases”的文件——这种类型的真实脚本将进入喉咙并修改一个真实的脚本文件,这样恶意别名将在下次执行时被激活。 这个例子的恶意部分只是敲响了终端铃声,所以你知道它正在工作。 最初使用别名的命令将使用 的内容hide作为参数执行,因此可以想象您可能会收到与此问题中报告的错误类似的错误。可能会反转原始部分和恶意部分来影响这一点,尽管这会干扰提供给别名的参数。在上面的脚本中尝试用 . 标记参数的结尾--。 与其将原始部分和恶意&&部分与通过不干扰其他重定向来进一步存在echostdinstdout 另一种可能性是将原始别名包含在恶意脚本中,这可能会从参数列表中删除光标移动字符串并将其余部分传递给原始别名。 我随意选择了记录 3 和 4,更智能的代码可以针对特定的别名,但它们需要相邻(或者光标移动可以更复杂)。 hide可以修改该字符串以包含不同的光标移动和原始别名的文本,因此该alias命令将显示为显示未修改的别名,而不是将其与恶意部分一起隐藏。 要按书面方式试用,您需要至少有四个活动别名,运行此脚本,然后使用. aliases. 然后,您可以尝试使用受影响的别名,并查看使用时的样子alias|hd。 这无疑可以用一百种不同的方式重写——都更好。 这种威胁有多现实?我没有头绪。但如果我能做到...
如果该
alias
命令用于显示别名定义,则可以通过将现有别名附加到恶意别名上并使用光标移动将其隐藏来做到这一点。这不是一个完美的万无一失的方法,但它可能会在一段时间内未被发现。管道alias
通过hd
将显示您的别名中是否有任何转义序列(光标移动)。以下是如何将恶意命令插入别名的概念证明:sed
命令修改了一个名为“aliases”的文件——这种类型的真实脚本将进入喉咙并修改一个真实的脚本文件,这样恶意别名将在下次执行时被激活。hide
作为参数执行,因此可以想象您可能会收到与此问题中报告的错误类似的错误。可能会反转原始部分和恶意部分来影响这一点,尽管这会干扰提供给别名的参数。在上面的脚本中尝试用 . 标记参数的结尾--
。&&
部分与通过不干扰其他重定向来进一步存在echo
stdin
stdout
hide
可以修改该字符串以包含不同的光标移动和原始别名的文本,因此该alias
命令将显示为显示未修改的别名,而不是将其与恶意部分一起隐藏。. aliases
. 然后,您可以尝试使用受影响的别名,并查看使用时的样子alias|hd
。