Was bedeutet „das Rohr offen halten“?

9

Ich habe exemplarische Vorgehensweisen für verschiedene Exploit-Übungen für Linux-Anwendungen verfolgt. Ich verstehe den Inhalt dieser gut genug, aber einige beziehen sich auf die Verwendung von Katze, um "das Rohr offen zu halten", z . B. hier .

Zum Beispiel:

(python2 exploit.py ; cat) | ./programToExploit

Was bedeutet es in der Praxis eigentlich, das Rohr offen zu halten, und wie wird das Rohr wie beim obigen Befehl offen gehalten?

Plunkspeaker
quelle
Das habe ich mich auch immer gefragt.
Wogsland

Antworten:

12

Hast Du es versucht?

Sehen Sie den Unterschied zwischen

echo 'ls' | sh -s

und

( echo 'ls'; cat ) | sh -s

oder,

{ echo 'ls'; cat; } | sh -s

Hier sh -swird eine Shell-Sitzung gestartet, die Befehle liest, die von der Standardeingabe ( -s) ausgeführt werden sollen.

Im ersten Beispiel wird die Shell einfach ausgeführt lsund beendet (da keine Eingabe mehr erfolgt).

Im zweiten und dritten Beispiel wird die Shell ausgeführt lsund wartet, bis keine Eingabe mehr erfolgt. Der Eingabestream zu sh -swurde zuerst vom echoBefehl generiert , catübernahm dann aber die Rolle. Der catProzess liest aus der übergeordneten Shell-Sitzung und leitet Befehle über die Pipe an weiter sh -s. Wenn Sie lsoder andere Befehle eingeben (es wird keine Eingabeaufforderung angezeigt), führt die Shell diese Befehle aus.

Dies wird fortgesetzt, bis Sie den catVorgang beenden , indem Sie Ctrl+Dauf eine leere Zeile drücken , um das Ende der Eingabe zu signalisieren.

Ich glaube, das ist es, was du mit "offen halten" meinst.

Kusalananda
quelle
Ja, ich habe es versucht und es hat wie von den Autoren beschrieben funktioniert. Ich wollte meistens nur verstehen, warum es funktioniert und warum die Subshell notwendig ist. Ihre Antwort deckt dies ab, also danke.
Plunkspeaker
Das ist ein cooler kleiner Trick!
Wogsland