これは、次に始まる難読化された悪意のあるシェルスクリプトで発見されました。
${!#}${*^} <<<
...
ペアへの参照が見つかりませんが、${!#}
「echo
d」が印刷された場合は、-bash
実行中のシェルへの秘密参照ですか?では、なぜ追加のダッシュを使用するのですか?
ありがとうございます!
答え1
この回答はでbash
試したので具体的です。すべてのシェルが同じように機能するわけではありません。echo
bash
bash
、$var1
そうであればとfoo
同じ${!var1}
です$foo
。!
これは間接拡張bash
:与えられた変数aで検索します。変数名( foo
) 変える値。
次に、パラメータの数var1
をに置き換えます#
。 0$#
ならそうです。 4ならそうです。つまり、位置引数がどんなに多くても、最後の位置引数です。 $#
${!#}
$0
$#
${!#}
$4
${!#}
位置引数がない場合、結果はです$#
。これはシェルまたはスクリプトの名前です(0
$0
引用する)。あなたが思う限り、それはbash
(プラス先頭-
これはログインシェルであることを意味します。)
クイックテスト:
$ echo ${!#}
-bash
$ set the quick brown fox
$ echo ${!#}
fox