Encontrei isso em um script de shell malicioso ofuscado, começando com:
${!#}${*^} <<<
...
Não foi possível encontrar nenhuma referência a ${!#}
, mas quando echo
'd, ele gera -bash
. Isso é uma referência secreta para o shell em execução? Por que há um traço extra então?
Obrigado!
Esta resposta é
bash
específica, porque você tentou oecho
inbash
. Nem todas as conchas se comportam da mesma forma.Em
bash
, se$var1
éfoo
, então${!var1}
é o mesmo que$foo
. A expansão!
é indireta : fazbash
com que seja recuperado da variável fornecida um nome de variável (foo
) em vez de um valor .Agora substitua
var1
por#
.$#
é o número de argumentos. Se$#
é 0,${!#}
é$0
. Se$#
é 4,${!#}
é$4
. Em outras palavras,${!#}
é o último parâmetro posicional, não importa quantos parâmetros posicionais existam.Se não houver parâmetros posicionais,
$#
é0
, então o resultado é$0
, que é o nome do shell ou script ( referência ). No seu caso, isso foibash
(mais um significado principal-
de que é um shell de login).Teste rápido: