私はLinuxアプリケーションのさまざまなエクスプロイトの練習に従ってきました。私はこれをかなりよく理解していますが、一部の人は「パイプを開いたままにする」ためにcatを使用すると言いました。ここ。
たとえば、
(python2 exploit.py ; cat) | ./programToExploit
実際に「パイプを開いておく」とは実際に何を意味し、上記のコマンドのようにパイプを開いたままにする方法は何ですか?
答え1
違いを見る
echo 'ls' | sh -s
そして
( echo 'ls'; cat ) | sh -s
または、
{ echo 'ls'; cat; } | sh -s
ここで、sh -s
標準入力()から実行するコマンドを読み取ってシェルセッションを開始します-s
。
最初の例では、シェルが実行されls
終了します(入力がなくなったため)。
2番目と3番目の例では、シェルが実行され、ls
入力がなくなるまで待ちます。入力ストリームは最初sh -s
にコマンドによって生成され、引き継がれます。プロセスは、親シェルセッションからデータを読み取り、コマンドを。echo
cat
cat
sh -s
ls
cat
これは、入力の終了を通知するために空白行を押してプロセスを終了するまで続きます。Ctrl+D
私はこれが「パイプを開いたままにしておくこと」が意味していると信じています。