「netcat -e」は標準出力を中継しません。

「netcat -e」は標準出力を中継しません。

私はnetcatを使ってバックドアを生成し、次のコマンドを使ってPythonスクリプトを実行しました。

netcat -l -p 1234 -e 'python /script.py'

次に、別のシェルを使用してバックドアに接続します。

netcat localhost 1234

script.py は、入力を読み込み、ファイルに保存し、再印刷する単純なループです。これで、2番目のシェルで作成したすべての内容がスクリプトに入り、正常にファイルに保存されます。ただし、2番目のシェルのスクリプトでは出力は表示されません。 Pythonprintとメソッドを試しましたが、sys.stdout.write どちらも失敗したようです。次のコマンドを使用すると、出力が2番目のシェルに戻される理由がわかりません。

netcat localhost 1234 /bin/bash

しかし、私の台本ではありません。明らかに重要なものを見逃しています。これは私のスクリプトです。

import sys

while 1:
    kbInput = sys.stdin.readline()
    sys.stdout.write( 'Input: '+kbInput)
    f  = open("output.txt", "w")
    f.write(kbInput)
    f.close()
    print

ベストアンサー1

stdoutへの書き込みはPythonによってバッファリングされ、バッファがいっぱいになった場合にのみ書き込まれます。 2つの簡単な修正があります。

  1. -uバッファリングされていない出力を要求するオプションをpythonコマンドに追加します('python -u /script.py')。

  2. または、各書き込み後に出力をフラッシュします。あなたの例では、そのsys.stdout.write( 'Input: '+kbInput)行の後に次の行を追加します。

    sys.stdout.flush()
    

おすすめ記事